ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው?

ዘመናዊ የመረጃ ሥርዓቶች በጣም ውስብስብ ናቸው. ከሁሉም ያነሰ, ውስብስብነታቸው በውስጣቸው በተሰራው መረጃ ውስብስብነት ምክንያት ነው. የውሂብ ውስብስብነት ብዙውን ጊዜ ጥቅም ላይ በሚውሉት የተለያዩ የመረጃ ሞዴሎች ላይ ነው. ስለዚህ, ለምሳሌ, መረጃው "ትልቅ" በሚሆንበት ጊዜ, አንዱ ችግር ያለባቸው ባህሪያት የድምፅ መጠን ("ድምጽ") ብቻ ሳይሆን ልዩነቱም ("የተለያዩ").

በምክንያት ውስጥ እስካሁን ጉድለት ካላገኘህ አንብብ።

ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው?


ይዘቶች

ፖሊግሎት ጽናት
ባለብዙ ሞዴል
ባለብዙ ሞዴል ዲቢኤምኤስ በግንኙነት ሞዴል ላይ የተመሠረተ
     á‰  MS SQL አገልጋይ ውስጥ የሰነድ ሞዴል
     á‹¨áŒáˆŤá ሞዴል በ MS SQL አገልጋይ ውስጥ
ባለብዙ ሞዴል ዲቢኤምኤስ በሰነዱ ሞዴል ላይ የተመሠረተ
     á‰  MarkLogic ውስጥ ተዛማጅ ሞዴል
     á‹¨áŒáˆŤá ሞዴል በ MarkLogic
ባለብዙ ሞዴል ዲቢኤምኤስ "ያለ ዋና ሞዴል"
     ArangoDB
     áŠ”á‹˜áˆ­áˆ‹áŠ•á‹ľáˆľ
     áŠ á‹™áˆ­ ኮስሞስዲቢ
ባለብዙ ሞዴል DBMS በግራፍ ሞዴል ላይ የተመሰረተ?
መደምደሚያ
የድምፅ አሰጣጥ

ፖሊግሎት ጽናት

ከላይ ያለው ነገር አንዳንድ ጊዜ በአንድ ስርዓት ማዕቀፍ ውስጥ እንኳን ብዙ የተለያዩ ዲቢኤምኤስን በመጠቀም መረጃን ለማከማቸት እና እነሱን ለማስኬድ የተለያዩ ችግሮችን መፍታት አስፈላጊ ነው ፣ እያንዳንዱም የራሱን የውሂብ ሞዴል ይደግፋል። በ M. Fowler ብርሃን እጅ ፣ ደራሲ በርካታ ታዋቂ መጽሐፍት እና አንዱ አብሮ-ደራሲዎች Agile Manifesto, ይህ ሁኔታ ይባላል ባለብዙ-ተለዋዋጭ ማከማቻ ("ፖሊግሎት ጽናት").

ፎለር በኢ-ኮሜርስ መስክ ባለ ሙሉ ባህሪ እና ከፍተኛ ጭነት መተግበሪያ ውስጥ የመረጃ ማከማቻን የማደራጀት የሚከተለው ምሳሌ አለው።

ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው?

ይህ ምሳሌ፣ በእርግጥ፣ በመጠኑ የተጋነነ ነው፣ ነገር ግን ለተዛማጅ ዓላማ አንድ ወይም ሌላ DBMS ለመምረጥ የሚጠቅሙ አንዳንድ ሃሳቦች ሊገኙ ይችላሉ፣ ለምሳሌ፡- እዚህ.

በእንደዚህ ዓይነት መካነ አራዊት ውስጥ አገልጋይ መሆን ቀላል እንዳልሆነ ግልጽ ነው.

  • የውሂብ ማከማቻን የሚያከናውነው የኮድ መጠን ከ DBMSs ብዛት ጋር በተመጣጣኝ መጠን ያድጋል; የኮድ ማመሳሰል መረጃ መጠን ከዚህ ቁጥር ካሬ ጋር የማይመጣጠን ከሆነ ጥሩ ነው።
  • እንደ ጥቅም ላይ የዋሉት የዲቢኤምኤስ ብዛት ብዜት፣ የእያንዳንዱ ጥቅም ላይ የዋሉት ዲቢኤምኤስዎች የድርጅት ባህሪያትን (ስኬታማነት፣ ስህተት መቻቻል፣ ከፍተኛ ተገኝነት) የማቅረብ ወጪዎች ይጨምራሉ።
  • በአጠቃላይ የማጠራቀሚያ ንዑስ ስርዓት የድርጅት ባህሪያትን ማረጋገጥ አይቻልም - በተለይም የግብይት ልውውጥ።

ከመካነ አራዊት ዳይሬክተር እይታ ሁሉም ነገር ይህን ይመስላል።

  • ከዲቢኤምኤስ አምራች የፈቃድ እና የቴክኒክ ድጋፍ ወጪ ብዙ ጭማሪ።
  • ከመጠን በላይ የሰራተኞች ብዛት እና የግዜ ገደቦች መጨመር።
  • በመረጃ አለመመጣጠን ምክንያት ቀጥተኛ የገንዘብ ኪሳራ ወይም ቅጣቶች።

በስርዓቱ አጠቃላይ የባለቤትነት ዋጋ (TCO) ላይ ከፍተኛ ጭማሪ አለ። ከ "ባለብዙ የማከማቻ አማራጮች" ሁኔታ መውጫ መንገድ አለ?

ባለብዙ ሞዴል

“ባለብዙ ​​ማከማቻ” የሚለው ቃል በ2011 ጥቅም ላይ ውሏል። የአቀራረብ ችግሮች እና የመፍትሄ አፈላላጊው ግንዛቤ በርካታ አመታትን የፈጀ ሲሆን እ.ኤ.አ. በ 2015 በጋርትነር ተንታኞች አፍ መልሱ ተዘጋጅቷል ።

  • ከ "የገበያ መመሪያ ለ NoSQL DBMSs - 2015"

    የዲቢኤምኤስ የወደፊት እጣ ፈንታ፣ አርክቴክቸርዎቻቸው እና የአጠቃቀም መንገዶች ብዙ ሞዴል ናቸው።

  • ከ "Magic Quadrant ለ ODBMS - 2016"

    ግንባር ​​ቀደም ኦፕሬሽናል ዲቢኤምኤስዎች በርካታ ሞዴሎችን ያቀርባሉ-ተዛማጅ እና ግንኙነት ያልሆኑ—እንደ ነጠላ መድረክ አካል።

በዚህ ጊዜ የጋርትነር ተንታኞች ትንበያቸው ትክክል የሆነ ይመስላል። ጋር ወደ ገጹ ከሄዱ á‹‹áŠ“ ደረጃ ዲቢኤምኤስ በዲቢ-ሞተሮች ላይ፣ ያንን ማየት ይችላሉ።оአብዛኛዎቹ መሪዎቹ እራሳቸውን እንደ ባለብዙ-ሞዴል ዲቢኤምኤስዎች ያዘጋጃሉ። ከየትኛውም የግል ደረጃ ጋር ተመሳሳይ በሆነ መልኩ በገጹ ላይ ሊታይ ይችላል.

ከታች ያለው ሠንጠረዥ DBMS - ባለብዙ ሞዴል ነን የሚሉ በእያንዳንዱ የግል ደረጃዎች ውስጥ ያሉ መሪዎችን ያሳያል። ለእያንዳንዱ ዲቢኤምኤስ፣ የመጀመሪያው የሚደገፍ ሞዴል (አንድ ጊዜ ብቸኛው የነበረው) እና ከእሱ ጋር በአሁኑ ጊዜ የሚደገፉ ሞዴሎች ይጠቁማሉ። እንዲሁም እራሳቸውን እንደ “በመጀመሪያው ባለ ብዙ ሞዴል” የሚቀመጡ ዲቢኤምኤስዎች ተዘርዝረዋል እና እንደ ፈጣሪዎች ገለጻ ምንም ዓይነት የመጀመሪያ የተወረሰ ሞዴል የላቸውም።

ዲቢኤምኤስ የመጀመሪያ ሞዴል ተጨማሪ ሞዴሎች
Oracle ግንኙነት ግራፍ, ሰነድ
ኤም.ኤስ.ኤስ.ኤል. ግንኙነት ግራፍ, ሰነድ
PostgreSQL ግንኙነት ግራፍ *, ሰነድ
ማርክ ሎጂክ ዘጋቢ ፊልም ግራፍ, ግንኙነት
MongODB ዘጋቢ ፊልም ቁልፍ-እሴት፣ ግራፍ*
ዳታስታክስ ሰፊ-አምድ ዘጋቢ ፊልም፣ ግራፍ
Redis ቁልፍ-እሴት ዘጋቢ ፊልም፣ ግራፍ*
ArangoDB - ግራፍ, ሰነድ
ኔዘርላንድስ - ግራፍ ፣ ሰነድ ፣ ተዛማጅ
አዙር ኮስሞስዲቢ - ግራፍ ፣ ሰነድ ፣ ተዛማጅ

በጠረጴዛው ላይ ማስታወሻዎች

በሰንጠረዡ ውስጥ ያሉ ኮከቦች ቦታ ማስያዝ የሚያስፈልጋቸውን መግለጫዎች ምልክት ያድርጉበት፡

  • የ PostgreSQL DBMS የግራፍ ዳታ ሞዴሉን አይደግፍም፣ ነገር ግን ይህ ምርት ይደግፈዋል በእሱ ላይ የተመሰረተእንደ AgensGraph ያሉ።
  • ከMongoDB ጋር በተያያዘ፣ በጥያቄ ቋንቋ ውስጥ የግራፍ ኦፕሬተሮች መኖራቸውን ማውራት የበለጠ ትክክል ነው።$lookup, $graphLookup) የግራፍ ሞዴልን ከመደገፍ ይልቅ, ምንም እንኳን, ምንም እንኳን, መግቢያቸው በግራፍ ሞዴሉን በመደገፍ በአካላዊ ማከማቻ ደረጃ ላይ አንዳንድ ማመቻቸትን ይጠይቃል.
  • ከሬዲስ ጋር በተያያዘ, ቅጥያውን ማለታችን ነው እንደገና ግራፍ.

በመቀጠል, ለእያንዳንዱ ክፍል, ከዚህ ክፍል በዲቢኤምኤስ ውስጥ ለበርካታ ሞዴሎች ድጋፍ እንዴት እንደሚተገበር እናሳያለን. የግንኙነት፣ የሰነድ እና የግራፍ ሞዴሎችን በጣም አስፈላጊ አድርገን እንወስዳለን እና “የጠፉት” እንዴት እንደሚተገበሩ ለማሳየት የተወሰኑ ዲቢኤምኤስ ምሳሌዎችን እንጠቀማለን።

ባለብዙ ሞዴል ዲቢኤምኤስ በግንኙነት ሞዴል ላይ የተመሠረተ

መሪዎቹ DBMSዎች በአሁኑ ጊዜ ተያያዥ ናቸው፤ RDBMSዎች ወደ ባለብዙ ሞዴሊንግ አቅጣጫ እንቅስቃሴ ካላሳዩ የጋርትነር ትንበያ እውነት ነው ተብሎ ሊወሰድ አይችልም። እና ያሳያሉ። አሁን ባለ ብዙ ሞዴል ዲቢኤምኤስ ልክ እንደ ስዊስ ቢላዋ ነው, ምንም ጥሩ ነገር ማድረግ የማይችል, በቀጥታ ወደ ላሪ ኤሊሰን ሊመራ ይችላል.

ይሁን እንጂ ደራሲው በ Microsoft SQL Server ውስጥ የባለብዙ ሞዴሊንግ ትግበራን ይመርጣል, በዚህ ምሳሌ ላይ RDBMS ለሰነድ እና ለግራፍ ሞዴሎች ድጋፍ ይገለጻል.

በ MS SQL አገልጋይ ውስጥ የሰነድ ሞዴል

MS SQL Server ለሰነድ ሞዴል ድጋፍን እንዴት እንደሚተገብረው በ Habré ላይ ቀደም ሲል ሁለት ጥሩ መጣጥፎች ነበሩ፤ እራሴን ለአጭር ጊዜ ገለጻ እና አስተያየት እገድባለሁ።

በ MS SQL አገልጋይ ውስጥ የሰነድ ሞዴልን የሚደግፉበት መንገድ ለግንኙነት ዲቢኤምኤስ የተለመደ ነው፡ የJSON ሰነዶች በመደበኛ የጽሑፍ መስኮች ውስጥ እንዲቀመጡ ቀርቧል። የሰነዱ ሞዴል ድጋፍ ይህንን JSON ለመተንተን ልዩ ኦፕሬተሮችን መስጠት ነው፡-

  • JSON_VALUE scalar የባህሪ እሴቶችን ለማውጣት ፣
  • JSON_QUERY ንዑስ ሰነዶችን ለማውጣት.

የሁለቱም ኦፕሬተሮች ሁለተኛው መከራከሪያ በJSONPath በሚመስል አገባብ ውስጥ ያለ መግለጫ ነው።

በአጭሩ፣ በዚህ መንገድ የተከማቹ ሰነዶች ከ tuples በተቃራኒ በግንኙነት DBMS ውስጥ “የመጀመሪያ ደረጃ አካላት” አይደሉም ማለት እንችላለን። በተለይም በ MS SQL አገልጋይ ውስጥ በአሁኑ ጊዜ በ JSON ሰነዶች መስኮች ላይ ምንም ኢንዴክሶች የሉም ፣ ይህም የእነዚህን መስኮች እሴቶች በመጠቀም ሰንጠረዦችን መቀላቀል እና እነዚህን እሴቶች በመጠቀም ሰነዶችን ለመምረጥ አስቸጋሪ ያደርገዋል። ሆኖም ግን, ለእንደዚህ አይነት መስክ የተሰላው አምድ እና በእሱ ላይ ኢንዴክስ መፍጠር ይቻላል.

በተጨማሪ፣ MS SQL አገልጋይ ኦፕሬተሩን በመጠቀም ከጠረጴዛዎች ይዘቶች የ JSON ሰነድን በተመቸ ሁኔታ የመገንባት ችሎታ ይሰጣል። FOR JSON PATH - ዕድል ፣ በተወሰነ መልኩ ፣ ከቀዳሚው ተቃራኒ ፣ የተለመደ ማከማቻ። የ RDBMS ምንም ያህል ፈጣን ቢሆንም፣ ይህ አካሄድ ከሰነድ ዲቢኤምኤስ ርዕዮተ ዓለም ጋር እንደሚጋጭ ግልጽ ነው፣ እሱም በመሠረቱ ለታዋቂ ጥያቄዎች ዝግጁ የሆኑ መልሶችን የሚያከማች እና የእድገትን ቀላልነት ችግሮች ብቻ ሊፈታ ይችላል ፣ ግን ፍጥነት አይደለም።

በመጨረሻም MS SQL Server የሰነድ ግንባታን የተገላቢጦሽ ችግር ለመፍታት ይፈቅድልዎታል-JSON ን በመጠቀም ወደ ጠረጴዛዎች መበስበስ ይችላሉ. OPENJSON. ሰነዱ ሙሉ በሙሉ ጠፍጣፋ ካልሆነ, መጠቀም ያስፈልግዎታል CROSS APPLY.

የግራፍ ሞዴል በ MS SQL አገልጋይ ውስጥ

ለግራፍ (LPG) ሞዴል ድጋፍ በማይክሮሶፍት SQL አገልጋይ ውስጥ ሙሉ በሙሉ ተተግብሯል። ሊገመት የሚችል: አንጓዎችን ለማከማቸት እና የግራፍ ጠርዞችን ለማከማቸት ልዩ ጠረጴዛዎችን ለመጠቀም ይመከራል. እንደነዚህ ያሉት ሠንጠረዦች የሚፈጠሩት መግለጫዎችን በመጠቀም ነው CREATE TABLE AS NODE и CREATE TABLE AS EDGE በየደረጃው.

የመጀመሪያው ዓይነት ሰንጠረዦች መዝገቦችን ለማከማቸት ከተለመዱት ጠረጴዛዎች ጋር ተመሳሳይ ናቸው, ብቸኛው ውጫዊ ልዩነት ሰንጠረዡ የስርዓት መስክ ይዟል. $node_id - በመረጃ ቋቱ ውስጥ የግራፍ መስቀለኛ መንገድ ልዩ መለያ።

በተመሳሳይም የሁለተኛው ዓይነት ሠንጠረዦች የስርዓት መስኮች አሏቸው $from_id и $to_idበእንደዚህ ዓይነት ሠንጠረዦች ውስጥ ያሉ ግቤቶች በአንጓዎች መካከል ያለውን ግንኙነት በግልፅ ይገልፃሉ. የእያንዳንዱን አይነት ግንኙነቶች ለማከማቸት የተለየ ሰንጠረዥ ጥቅም ላይ ይውላል.

ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው? ይህንን በምሳሌ እናስረዳው። የግራፍ ውሂቡ በሥዕሉ ላይ እንደሚታየው ዓይነት አቀማመጥ ይኑርዎት. ከዚያ በመረጃ ቋቱ ውስጥ ያለውን ተጓዳኝ መዋቅር ለመፍጠር የሚከተሉትን የዲዲኤል መጠይቆች ማስኬድ ያስፈልግዎታል።

CREATE TABLE Person (
  ID INTEGER NOT NULL,
  name VARCHAR(100)
) AS NODE;

CREATE TABLE Cafe (
  ID INTEGER NOT NULL, 
  name VARCHAR(100), 
) AS NODE;

CREATE TABLE likes (
  rating INTEGER
) AS EDGE;

CREATE TABLE friendOf
  AS EDGE;

ALTER TABLE likes
  ADD CONSTRAINT EC_LIKES CONNECTION (Person TO Cafe);

የእነዚህ ሠንጠረዦች ዋና ልዩነት በእነሱ ላይ በሚነሱ ጥያቄዎች ላይ የግራፍ ንድፎችን በሳይፈር መሰል አገባብ መጠቀም ይቻላል (ይሁን እንጂ፣ “*ወዘተ ገና አልተደገፉም)። በአፈጻጸም መለኪያዎች ላይ በመመርኮዝ በእነዚህ ሰንጠረዦች ውስጥ መረጃ የሚከማችበት መንገድ መረጃ በመደበኛ ሠንጠረዦች ውስጥ ከሚከማችበት መንገድ የተለየ እና እንደነዚህ ያሉትን የግራፍ ጥያቄዎችን ለማስፈፀም የተመቻቸ እንደሆነ መገመት ይቻላል.

SELECT Cafe.name
  FROM Person, likes, Cafe
  WHERE MATCH (Person-(friendOf)-(likes)->Cafe)
  AND Person.name = 'John';

በተጨማሪም ፣ ከእንደዚህ ዓይነት ሠንጠረዦች ጋር በሚሰሩበት ጊዜ እነዚህን የግራፍ ንድፎችን አለመጠቀም በጣም ከባድ ነው ፣ ምክንያቱም በመደበኛ የ SQL ጥያቄዎች ተመሳሳይ ችግሮችን ለመፍታት የስርዓት “ግራፍ” መስቀለኛ መለያዎችን ለማግኘት ተጨማሪ ጥረቶችን ማድረግ አስፈላጊ ይሆናል ($node_id, $from_id, $to_id; በተመሳሳዩ ምክንያት, ውሂብ ለማስገባት የሚጠይቁ ጥያቄዎች እዚህ ላይ አይታዩም ምክንያቱም አላስፈላጊ አስቸጋሪ ናቸው).

በ MS SQL አገልጋይ ውስጥ የሰነዱ እና የግራፍ ሞዴሎች አተገባበር ገለፃን ለማጠቃለል ፣ የአንዱ ሞዴል በሌላው ላይ እንደዚህ ያሉ ትግበራዎች የተሳካ አይመስሉም ፣ በዋነኝነት ከቋንቋ ዲዛይን እይታ አንፃር ። አንድን ቋንቋ ከሌላው ጋር ማራዘም አስፈላጊ ነው, ቋንቋዎቹ ሙሉ በሙሉ "ኦርቶጎናዊ" አይደሉም, የተኳሃኝነት ደንቦቹ በጣም እንግዳ ሊሆኑ ይችላሉ.

ባለብዙ ሞዴል ዲቢኤምኤስ በሰነዱ ሞዴል ላይ የተመሠረተ

በዚህ ክፍል ውስጥ፣ በሰነድ ዲቢኤምኤስ ውስጥ የባለብዙ-ሞዴል አተገባበርን በምሳሌ ለማስረዳት እወዳለሁ ሞንጎዲቢ (እንደተባለው፣ ሁኔታዊ ግራፍ ኦፕሬተሮች አሉት $lookup и $graphLookup, በተቆራረጡ ስብስቦች ላይ እየሰራ አይደለም) ነገር ግን የበለጠ የበሰለ እና "ድርጅት" ዲቢኤምኤስ ምሳሌ በመጠቀም ማርክ ሎጂክ.

ስለዚህ ስብስቡ የሚከተለው ዓይነት የኤክስኤምኤል ሰነዶች ስብስብ እንዲይዝ ይፍቀዱ (MarkLogic JSON ሰነዶችን እንዲያከማቹም ይፈቅድልዎታል)

<Person INN="631803299804">
  <name>John</name>
  <surname>Smith</surname>
</Person>

በ MarkLogic ውስጥ ተዛማጅ ሞዴል

የሰነዶች ስብስብ ተያያዥ እይታ በመጠቀም ሊፈጠር ይችላል የማሳያ አብነት (የኤለመንቶች ይዘት value ከዚህ በታች ባለው ምሳሌ የዘፈቀደ XPath ሊኖር ይችላል)

<template >
  <context>/Person</context>
  <rows>
    <row>
      <view-name>Person</view-name>
      <columns>
        <column>
          <name>SSN</name>
          <value>@SSN</value>
          <type>string</type>
        </column>
        <column>
          <name>name</name>
          <value>name</value>
        </column>
        <column>
          <name>surname</name>
          <value>surname</value>
        </column>
      </columns>
    </row>
  <rows>
</template>

የተፈጠረውን እይታ በSQL መጠይቅ (ለምሳሌ በODBC በኩል) ማነጋገር ይችላሉ።

SELECT name, surname FROM Person WHERE name="John"

እንደ አለመታደል ሆኖ በማሳያው አብነት የተፈጠረው ተዛማጅ እይታ ተነባቢ-ብቻ ነው። ለእሱ ጥያቄን ሲያስተናግድ፣ MarkLogic ለመጠቀም ይሞክራል። የሰነድ ኢንዴክሶች. ከዚህ ቀደም ማርክ ሎጂክ ሙሉ ለሙሉ የተገደበ የግንኙነት እይታዎች ነበረው። መረጃ ጠቋሚ የተመሠረተ እና ሊፃፉ የሚችሉ፣ አሁን ግን እንደተቋረጡ ይቆጠራሉ።

የግራፍ ሞዴል በ MarkLogic

ለግራፍ (RDF) ሞዴል ድጋፍ, ሁሉም ነገር ተመሳሳይ ነው. በድጋሚ በእርዳታ የማሳያ አብነት ከላይ ካለው ምሳሌ የሰነዶች ስብስብ RDF ውክልና መፍጠር ይችላሉ፡

<template >
  <context>/Person</context>
    <vars>
      <var>
        <name>PREFIX</name>
        <val>"http://example.org/example#"</val>
      </var>
    </vars>
  <triples>
    <triple>
      <subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
      <predicate><value>sem:iri( $PREFIX || surname )</value></predicate>
      <object><value>xs:string( surname )</value></object>
    </triple>
    <triple>
      <subject><value>sem:iri( $PREFIX || @SSN )</value></subject>
      <predicate><value>sem:iri( $PREFIX || name )</value></predicate>
      <object><value>xs:string( name )</value></object>
    </triple>
  </triples>
  </template>

የተገኘውን RDF ግራፍ በSPARQL መጠይቅ ማነጋገር ይችላሉ፡-

PREFIX : <http://example.org/example#>
SELECT ?name ?surname {
  :631803299804 :name ?name ; :surname ?surname .
}

ከግንኙነቱ በተለየ፣ MarkLogic የግራፍ ሞዴሉን በሁለት መንገዶች ይደግፋል፡-

  1. ዲቢኤምኤስ ሙሉ የተጠናቀቀ የተለየ የRDF ውሂብ ማከማቻ ሊሆን ይችላል (በውስጡ ውስጥ ሶስት እጥፍ ይጠራሉ። የሚተዳደር ከላይ ከተገለጹት በተቃራኒ እንዲወጣ ተደርጓል).
  2. በልዩ ተከታታይነት ያለው አርዲኤፍ በቀላሉ በኤክስኤምኤል ወይም በJSON ሰነዶች ውስጥ ሊገባ ይችላል (እና ከዚያ ሶስት ጊዜ ይጠራሉ) የማይተዳደር). ይህ ምናልባት ከስልቶች ሌላ አማራጭ ነው። idref እና ሌሎች.

በ MarkLogic ውስጥ “በእርግጥ” ነገሮች እንዴት እንደሚሠሩ ጥሩ ሀሳብ የተሰጠው በ ኦፕቲካል ኤፒአይ, በዚህ ትርጉም ውስጥ, ዝቅተኛ-ደረጃ ነው, ዓላማው ይልቁንም ተቃራኒ ቢሆንም - ጥቅም ላይ ያለውን የውሂብ ሞዴል ከ ረቂቅ መሞከር, በተለያዩ ሞዴሎች ውስጥ ውሂብ ጋር ወጥነት ያለው ሥራ ለማረጋገጥ, ግብይት, ወዘተ.

ባለብዙ ሞዴል ዲቢኤምኤስ "ያለ ዋና ሞዴል"

በገበያው ላይ ምንም አይነት የውርስ ዋና ሞዴል ሳይኖራቸው እራሳቸውን እንደ መልቲ-ሞዴል አድርገው የሚያስቀምጡ ዲቢኤምኤስዎች አሉ። እነዚህም ያካትታሉ ArangoDB, ኔዘርላንድስ (ከ 2018 ጀምሮ የልማት ኩባንያው የ SAP ነው) እና ኮስሞስ ዲቢ (የ Microsoft Azure ደመና መድረክ አካል ሆኖ አገልግሎት).

እንደ እውነቱ ከሆነ በአራንጎዲቢ እና በ OrientDB ውስጥ "ኮር" ሞዴሎች አሉ. በሁለቱም ሁኔታዎች, እነዚህ የራሳቸው የውሂብ ሞዴሎች ናቸው, እነሱም የሰነዱ አንድ አጠቃላይ መግለጫዎች ናቸው. አጠቃላይ መግለጫዎቹ በዋናነት የግራፍ እና ተዛማጅ ተፈጥሮ ጥያቄዎችን የማከናወን ችሎታን ለማመቻቸት ነው።

እነዚህ ሞዴሎች በተጠቀሰው ዲቢኤምኤስ ውስጥ ጥቅም ላይ የሚውሉት ብቻ ናቸው፣ የራሳቸው የመጠይቅ ቋንቋዎች ከነሱ ጋር ለመስራት የተነደፉ ናቸው። በእርግጥ እንደዚህ ያሉ ሞዴሎች እና ዲቢኤምኤስዎች ተስፋ ሰጭ ናቸው ነገር ግን ከመደበኛ ሞዴሎች እና ቋንቋዎች ጋር ተኳሃኝነት አለመኖሩ እነዚህን ዲቢኤምኤስ በቀድሞ ስርዓቶች ውስጥ ለመጠቀም የማይቻል ያደርገዋል - ቀደም ሲል እዚያ ጥቅም ላይ የዋሉትን ዲቢኤምኤስ ለመተካት።

ስለ ArangoDB እና OrientDB በሀበሬ ላይ አንድ አስደናቂ መጣጥፍ አስቀድሞ ነበር። በNoSQL የውሂብ ጎታዎች ውስጥ ይቀላቀሉ.

ArangoDB

ArangoDB ለግራፍ ውሂብ ሞዴል ድጋፍ ይሰጣል።

በአራንጎዲቢ ውስጥ ያለው የግራፍ አንጓዎች ተራ ሰነዶች ናቸው እና ጠርዞቹ ከመደበኛ የስርዓት መስኮች ጋር ልዩ ዓይነት ሰነዶች ናቸው (_key, _id, _rev) የስርዓት መስኮች _from и _to. በሰነድ ዲቢኤምኤስ ውስጥ ያሉ ሰነዶች በተለምዶ ወደ ስብስቦች ይጣመራሉ። ጠርዞችን የሚወክሉ ሰነዶች ስብስቦች በአራንጎዲቢ ውስጥ የጠርዝ ስብስቦች ይባላሉ. በነገራችን ላይ የጠርዝ መሰብሰብ ሰነዶች ሰነዶች ናቸው, ስለዚህ በአራንጎዲቢ ውስጥ ያሉ ጠርዞች እንደ አንጓዎች ሆነው ሊያገለግሉ ይችላሉ.

ጥሬ ውሂብ

ስብስብ ይኑረን personsሰነዶቻቸው ይህን ይመስላል።

[
  {
    "_id"  : "people/alice" ,
    "_key" : "alice" ,
    "name" : "АНиса"
  },
  {
    "_id"  : "people/bob" ,
    "_key" : "bob" ,
    "name" : "Боб"  
  }
]

ስብስብም ይኑር cafes:

[
  {
    "_id" : "cafes/jd" ,
    "_key" : "jd" ,
    "name" : "Джон Донн"  
  },
  {
    "_id" : "cafes/jj" ,
    "_key" : "jj" ,
    "name" : "Жан-Жак"
  }
]

ከዚያም ስብስቡ likes ይህን ሊመስል ይችላል፡-

[
  {
    "_id" : "likes/1" ,
    "_key" : "1" ,
    "_from" : "persons/alice" ,
    "_to" : "cafes/jd",
    "since" : 2010 
  },
  {
    "_id" : "likes/2" ,
    "_key" : "2" ,
    "_from" : "persons/alice" ,
    "_to" : "cafes/jj",
    "since" : 2011 
  } ,
  {
    "_id" : "likes/3" ,
    "_key" : "3" ,
    "_from" : "persons/bob" ,
    "_to" : "cafes/jd",
    "since" : 2012 
  }
]

ጥያቄዎች እና ውጤቶች

በአራንጎዲቢ ጥቅም ላይ የሚውለው የ AQL ቋንቋ የግራፍ አይነት መጠይቅ፣ የትኛውን ካፌ ማን እንደወደደ በሰው ሊነበብ በሚችል መልኩ የሚመለስ ጥያቄ ይህን ይመስላል።

FOR p IN persons
  FOR c IN OUTBOUND p likes
  RETURN { person : p.name , likes : c.name }

በግንኙነት ዘይቤ፣ ግንኙነቶችን ከማጠራቀም ይልቅ "በማስላት" ላይ፣ ይህ መጠይቅ እንደዚህ ሊፃፍ ይችላል (በነገራችን ላይ ያለ ስብስቡ) likes ያለ ማድረግ ይችላል):

FOR p IN persons
  FOR l IN likes
  FILTER p._key == l._from
    FOR c IN cafes
    FILTER l._to == c._key
    RETURN { person : p.name , likes : c.name }

በሁለቱም ሁኔታዎች ውጤቱ ተመሳሳይ ይሆናል-

[
  { "person" : "Алиса" , likes : "Жан-Жак" } ,
  { "person" : "Алиса" , likes : "Джон Донн" } ,
  { "person" : "Боб" , likes : "Джон Донн" }
]

ተጨማሪ ጥያቄዎች እና ውጤቶች

ከላይ ያለው የውጤት ቅርጸት ከሰነድ ዲቢኤምኤስ ይልቅ ለግንኙነት DBMS የተለመደ ከሆነ ይህን ጥያቄ መሞከር ይችላሉ (ወይም መጠቀም ይችላሉ) COLLECT):

FOR p IN persons
  RETURN {
    person : p.name,
    likes : (
      FOR c IN OUTBOUND p likes
      RETURN c.name
    )
}

ውጤቱም ይህን ይመስላል።

[
  { "person" : "Алиса" , likes : ["Жан-Жак" , "Джон Донн"]  } ,
  { "person" : "Боб" , likes : ["Джон Донн"] }
]

ኔዘርላንድስ

በ OrientDB ውስጥ ባለው የሰነድ ሞዴል ላይ የግራፍ ሞዴልን ለመተግበር መሰረቱ ዕድል የሰነድ መስኮች ፣ ከብዙ ወይም ባነሱ መደበኛ ስካላር እሴቶች በተጨማሪ ፣ እንደ ዓይነቶች እሴቶች አሏቸው LINK, LINKLIST, LINKSET, LINKMAP и LINKBAG. የእነዚህ ዓይነቶች ዋጋዎች አገናኞች ወይም አገናኞች ስብስቦች ናቸው á‹¨áˆľáˆ­á‹“ቾ መለያዎች ሰነዶች.

በስርዓቱ የተመደበው የሰነድ መለያ በመረጃ ቋቱ ውስጥ ያለውን ቦታ የሚያመለክት “አካላዊ ትርጉም” አለው እና ይህን ይመስላል። @rid : #3:16. ስለዚህ የማጣቀሻ ባህሪያት ዋጋዎች በእውነቱ ጠቋሚዎች ናቸው (እንደ ግራፍ ሞዴል) ከምርጫ ሁኔታዎች (እንደ ተያያዥ ሞዴል).

ልክ እንደ ArangoDB፣ በ OrientDB ውስጥ ያሉ ጠርዞች እንደ ተለያዩ ሰነዶች ይወከላሉ (ምንም እንኳን ጠርዝ የራሱ ባህሪ ከሌለው ሊሠራ ይችላል) ቀላል ክብደት, እና ከተለየ ሰነድ ጋር አይዛመድም).

ጥሬ ውሂብ

ቅርብ በሆነ ቅርጸት የመጣል ቅርጸት የ OrientDB ዳታቤዝ፣ የ ArangoDB ካለፈው ምሳሌ የተገኘው መረጃ ይህን ይመስላል።

[
     {
      "@type": "document",
      "@rid": "#11:0",
      "@class": "Person",
      "name": "АНиса",
      "out_likes": [
        "#30:1",
        "#30:2"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#12:0",
      "@class": "Person",
      "name": "Боб",
      "out_likes": [
        "#30:3"
      ],
      "@fieldTypes": "out_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#21:0",
      "@class": "Cafe",
      "name": "Жан-Жак",
      "in_likes": [
        "#30:2",
        "#30:3"
      ],
      "@fieldTypes": "in_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#22:0",
      "@class": "Cafe",
      "name": "Джон Донн",
      "in_likes": [
        "#30:1"
      ],
      "@fieldTypes": "in_likes=LINKBAG"
    },
    {
      "@type": "document",
      "@rid": "#30:1",
      "@class": "likes",
      "in": "#22:0",
      "out": "#11:0",
      "since": 1262286000000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    },
    {
      "@type": "document",
      "@rid": "#30:2",
      "@class": "likes",
      "in": "#21:0",
      "out": "#11:0",
      "since": 1293822000000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    },
    {
      "@type": "document",
      "@rid": "#30:3",
      "@class": "likes",
      "in": "#21:0",
      "out": "#12:0",
      "since": 1325354400000,
      "@fieldTypes": "in=LINK,out=LINK,since=date"
    }
  ]

እንደምናየው፣ ጫፎች ስለ ገቢ እና ወጪ ጠርዞች መረጃን ያከማቻል። በ በመጠቀም የሰነድ ኤፒአይ የማጣቀሻ ታማኝነትን እራሱ መከታተል አለበት እና የግራፍ ኤፒአይ ይህንን ስራ ይፈፅማል። ነገር ግን የOrientDB መዳረሻ ከፕሮግራሚንግ ቋንቋዎች ጋር ባልተዋሃዱ "ንፁህ" የመጠይቅ ቋንቋዎች ውስጥ ምን እንደሚመስል እንይ።

ጥያቄዎች እና ውጤቶች

በ OrientDB ውስጥ ላለው ArangoDB ምሳሌ ከጥያቄው ጋር ተመሳሳይ የሆነ ጥያቄ ይህንን ይመስላል።

SELECT name AS person_name, OUT('likes').name AS cafe_name
   FROM Person
   UNWIND cafe_name

ውጤቱ በሚከተለው ቅፅ ውስጥ ይገኛል.

[
  { "person_name": "Алиса", "cafe_name": "Джон Донн" },
  { "person_name": "Алиса", "cafe_name": "Жан-Жак" },
  { "person_name": "Боб",  "cafe_name": "Жан-Жак" }
]

የውጤቱ ቅርጸት እንደገና በጣም "ተዛማጅ" መስሎ ከታየ, መስመሩን ከ ጋር ማስወገድ ያስፈልግዎታል UNWIND():

[
  { "person_name": "Алиса", "cafe_name": [ "Джон Донн", "Жан-Жак" ] },
  { "person_name": "Боб",  "cafe_name": [ "Жан-Жак" ' }
]

የ OrientDB መጠይቅ ቋንቋ እንደ Gremlin መሰል ማስገቢያዎች SQL ሊገለፅ ይችላል። በስሪት 2.2፣ ሳይፈር የሚመስል የጥያቄ ቅጽ ታየ፣ MATCH :

MATCH {CLASS: Person, AS: person}-likes->{CLASS: Cafe, AS: cafe}
RETURN person.name AS person_name, LIST(cafe.name) AS cafe_name
GROUP BY person_name

የውጤቱ ቅርጸት ከቀዳሚው ጥያቄ ጋር ተመሳሳይ ይሆናል። እንደ መጀመሪያው መጠይቅ የበለጠ “ግንኙነት” ለማድረግ ምን መወገድ እንዳለበት አስቡ።

አዙር ኮስሞስዲቢ

በመጠኑም ቢሆን፣ ስለ ArangoDB እና OrientDB ከላይ የተነገረው በAzuure CosmosDB ላይ ተፈጻሚ ይሆናል። CosmosDB የሚከተሉትን የውሂብ መዳረሻ APIs ያቀርባል፡ SQL፣ MongoDB፣ Gremlin እና Cassandra።

SQL API እና MongoDB API በሰነድ ሞዴል ውስጥ ያለውን ውሂብ ለመድረስ ስራ ላይ ይውላሉ። Gremlin API እና Cassandra API - ውሂብን በግራፍ እና በአምድ ቅርጸቶች በቅደም ተከተል ለማግኘት። በሁሉም ሞዴሎች ውስጥ ያለ ውሂብ በCosmosDB የውስጥ ሞዴል ቅርጸት ተቀምጧል፡- ARS ("አተም-መዝገብ-ተከታታይ"), እሱም ደግሞ ለሰነዱ አንድ ቅርብ ነው.

ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው?

ነገር ግን በተጠቃሚው የተመረጠው የውሂብ ሞዴል እና ጥቅም ላይ የዋለው ኤፒአይ በአገልግሎቱ ውስጥ መለያ በሚፈጥሩበት ጊዜ ተስተካክለዋል. በእንደዚህ ዓይነት ነገር እንደሚታየው በአንድ ሞዴል ውስጥ የተጫነውን ውሂብ በሌላ ሞዴል ቅርጸት ማግኘት አይቻልም።

ባለብዙ ሞዴል ዲቢኤምኤስ የዘመናዊ የመረጃ ሥርዓቶች መሠረት ናቸው?

ስለዚህ, በ Azure CosmosDB ውስጥ ባለ ብዙ ሞዴል ዛሬ ከአንድ አምራች የተለያዩ ሞዴሎችን የሚደግፉ በርካታ የውሂብ ጎታዎችን የመጠቀም ችሎታ ብቻ ነው, ይህም ሁሉንም የባለብዙ ተለዋጭ ማከማቻ ችግሮችን አይፈታም.

ባለብዙ ሞዴል DBMS በግራፍ ሞዴል ላይ የተመሰረተ?

ትኩረት የሚስበው በገበያ ላይ በግራፍ ሞዴል ላይ የተመሰረቱ ባለብዙ ሞዴል ዲቢኤምኤስዎች አለመኖራቸው (ከባለብዙ ሞዴል ድጋፍ በስተቀር በአንድ ጊዜ ለሁለት ግራፍ ሞዴሎች፡ RDF እና LPG፤ ይህንን በ ውስጥ ይመልከቱ)። ያለፈው እትም). ትልቁ ችግሮች የሚከሰቱት ከግንኙነት ይልቅ የሰነድ ሞዴል በግራፍ ሞዴል ላይ በመተግበሩ ነው።

በግራፍ ሞዴል አናት ላይ ያለውን ተያያዥ ሞዴል እንዴት እንደሚተገበር ጥያቄው የኋለኛው በሚፈጠርበት ጊዜም እንኳ ግምት ውስጥ ያስገባ ነበር. እንዴት ተናገረለምሳሌ ዴቪድ ማክጎቨርን:

በግራፍ ዳታቤዝ ላይ ንብርብር መፍጠርን የሚከለክል ምንም ነገር የለም (ለምሳሌ ፣ ተስማሚ መረጃ ጠቋሚ በማድረግ) በግራፍ ዳታቤዝ ላይ (1) ቱፕሎችን ከተለመዱት የቁልፍ እሴት ጥንዶች መልሶ ማግኘት እና (2) tuples በግንኙነት አይነት.

በግራፍ ሞዴል አናት ላይ የሰነድ ሞዴል ሲተገበሩ, ለምሳሌ የሚከተሉትን ማስታወስ አለብዎት.

  • የJSON ድርድር አካላት እንደታዘዙ ይቆጠራሉ፣ ነገር ግን ከግራፉ ጠርዝ ጫፍ የሚወጡት አይደሉም።
  • በሰነዱ ሞዴል ውስጥ ያለው መረጃ ብዙውን ጊዜ መደበኛ ያልሆነ ነው ፣ አሁንም ተመሳሳይ የተከተተ ሰነድ ብዙ ቅጂዎችን ማከማቸት አይፈልጉም ፣ እና ንዑስ ሰነዶች ብዙውን ጊዜ መለያዎች የሉትም።
  • በሌላ በኩል፣ የሰነድ ዲቢኤምኤስ ርዕዮተ ዓለም ሰነዶች በእያንዳንዱ ጊዜ አዲስ መገንባት የማያስፈልጋቸው ዝግጁ-የተሠሩ “ድምር” ናቸው። ከተጠናቀቀው ሰነድ ጋር የሚዛመድ ንዑስ ግራፍ በፍጥነት የማግኘት ችሎታ ያለው የግራፍ ሞዴሉን ማቅረብ ይጠበቅበታል።

ትንሽ ማስታወቂያ

የአንቀጹ ደራሲ ከ NitrosBase DBMS እድገት ጋር የተያያዘ ነው, ውስጣዊው ሞዴል ግራፍ ነው, እና ውጫዊ ሞዴሎች - ተያያዥ እና ሰነድ - ውክልናዎቹ ናቸው. ሁሉም ሞዴሎች እኩል ናቸው፡ ማንኛውም ውሂብ ማለት ይቻላል በማንኛቸውም በተፈጥሮው የሆነ የመጠይቅ ቋንቋ በመጠቀም ይገኛል። ከዚህም በላይ በማንኛውም እይታ ውሂቡ ሊለወጥ ይችላል. ለውጦች በውስጣዊው ሞዴል እና, በዚህ መሰረት, በሌሎች እይታዎች ውስጥ ይንጸባረቃሉ.

በNitrosBase ውስጥ የሞዴል ማዛመድ ምን እንደሚመስል ከሚከተሉት መጣጥፎች በአንዱ እገልጻለሁ።

መደምደሚያ

መልቲ-ሞዴሊንግ የሚባሉት አጠቃላይ ዝርዝሮች ለአንባቢው የበለጠ ወይም ያነሰ ግልጽ እየሆኑ እንደመጡ ተስፋ አደርጋለሁ። ባለብዙ ሞዴል ዲቢኤምኤስ በጣም የተለያዩ ናቸው፣ እና “ባለብዙ ​​ሞዴል ድጋፍ” የተለየ ሊመስል ይችላል። በእያንዳንዱ የተለየ ጉዳይ ላይ "ባለብዙ ሞዴል" ተብሎ የሚጠራውን ለመረዳት ለሚከተሉት ጥያቄዎች መልስ መስጠት ጠቃሚ ነው.

  1. እየተነጋገርን ያለነው ስለ ባህላዊ ሞዴሎች መደገፍ ነው ወይስ አንድ ዓይነት "ድብልቅ" ሞዴል?
  2. ሞዴሎቹ "እኩል" ናቸው ወይስ ከመካከላቸው አንዱ የሌሎቹ ርዕሰ ጉዳይ ነው?
  3. ሞዴሎቹ አንዳቸው ለሌላው "ግድየለሽ" ናቸው? በአንድ ሞዴል የተፃፈ መረጃ በሌላ ሊነበብ ወይም ሊገለበጥ ይችላል?

እኔ እንደማስበው ስለ ባለብዙ-ሞዴል ዲቢኤምኤስ አግባብነት ያለው ጥያቄ ቀድሞውኑ በአዎንታዊ መልኩ ሊመለስ ይችላል ፣ ግን አስደናቂው ጥያቄ በቅርብ ጊዜ ውስጥ የትኞቹ ዓይነቶች የበለጠ ተፈላጊ ይሆናሉ የሚለው ነው ። ባህላዊ ሞዴሎችን የሚደግፉ ባለብዙ-ሞዴል ዲቢኤምኤስዎች በዋነኝነት ተያያዥነት ያላቸው ይመስላል። የባለብዙ-ሞዴል ዲቢኤምኤስ ተወዳጅነት ፣የተለያዩ ባህላዊ ጥቅማ ጥቅሞችን የሚያጣምሩ አዳዲስ ሞዴሎችን በማቅረብ ፣የወደፊቱ የሩቅ ጉዳይ ነው።

በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ። ስግን እንእባክህን።

ባለብዙ ሞዴል ዲቢኤምኤስ ትጠቀማለህ?

  • እኛ አንጠቀምበትም, ሁሉንም ነገር በአንድ ዲቢኤምኤስ እና በአንድ ሞዴል ውስጥ እናከማቻለን

  • ባህላዊ ዲቢኤምኤስዎችን ባለብዙ ሞዴል ችሎታዎችን እንጠቀማለን።

  • በፖሊግሎት ጽናት እንለማመዳለን።

  • አዲስ ባለብዙ ሞዴል ዲቢኤምኤስ (Arango፣ Orient፣ CosmosDB) እንጠቀማለን።

19 ተጠቃሚዎች ድምጽ ሰጥተዋል። 4 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ምንጭ: hab.com

አስተያየት ያክሉ