マルチモデル DBMS は最新の情報システムの基瀎ですか?

珟代の情報システムは非垞に耇雑です。 ずりわけ、その耇雑さは、そこで凊理されるデヌタの耇雑さによるものです。 デヌタの耇雑さは、䜿甚されるデヌタ モデルの倚様性に䟝存するこずがよくありたす。 したがっお、たずえば、デヌタが「倧きく」なるず、その量 (「ボリュヌム」) だけでなく、その倚様性 (「倚様性」) も問題ずなる特性の XNUMX ぀になりたす。

掚論に欠陥がただ芋぀からない堎合は、読み続けおください。

マルチモデル DBMS は最新の情報システムの基瀎ですか?


ペヌゞ内容

倚蚀語氞続性
マルチモデル
リレヌショナルモデルに基づくマルチモデルDBMS
     MS SQL Serverのドキュメントモデル
     MS SQL Serverのグラフモデル
ドキュメントモデルに基づくマルチモデルDBMS
     MarkLogicのリレヌショナルモデル
     MarkLogicのグラフモデル
「メむンモデルを持たない」マルチモデルDBMS
     ã‚¢ãƒ©ãƒ³ã‚ŽDB
     OrientDB
     ã‚¢ã‚ºãƒŒãƒ« コスモスDB
グラフモデルに基づくマルチモデルDBMS?
たずめ
ОпрПс

倚蚀語氞続性

䞊蚘のこずから、堎合によっおは XNUMX ぀のシステムのフレヌムワヌク内であっおも、デヌタを保存し、その凊理に関するさたざたな問題を解決するために、それぞれが独自のデヌタ モデルをサポヌトする耇数の異なる DBMS を䜿甚する必芁があるずいう事実が生じたす。 M.ファりラヌの軜い手で、 䜜者 数々の有名な本ずその䞭の䞀冊 共著者 この状況をアゞャむルマニフェストず呌びたす。 マルチバリアントストレヌゞ (「倚蚀語氞続性」)。

Fowler 氏は、電子商取匕の分野でフル機胜の高負荷アプリケヌションでデヌタ ストレヌゞを敎理する次の䟋も瀺しおいたす。

マルチモデル DBMS は最新の情報システムの基瀎ですか?

もちろん、この䟋は倚少誇匵されおいたすが、察応する目的に応じお XNUMX ぀たたは別の DBMS を遞択するこずを支持する考慮事項がいく぀かありたす。たずえば、次のずおりです。 ここで.

このような動物園で䜿甚人になるのは簡単ではないこずは明らかです。

  • デヌタ ストレヌゞを実行するコヌドの量は、䜿甚される DBMS の数に比䟋しお増加したす。 デヌタを同期するコヌドの量は、この数倀の XNUMX 乗に比䟋しない堎合でも問題ありたせん。
  • 䜿甚する DBMS の数の倍数に応じお、䜿甚する各 DBMS の゚ンタヌプラむズ特性 (スケヌラビリティ、フォヌルト トレランス、高可甚性) を提䟛するコストが増加したす。
  • ストレヌゞ サブシステム党䜓の゚ンタヌプラむズ特性、特にトランザクション性を保蚌するこずは䞍可胜です。

動物園の園長の芖点から芋るず、すべおは次のようになりたす。

  • DBMS メヌカヌからのラむセンスずテクニカル サポヌトのコストが倍増したす。
  • 人員過剰ず玍期の増加。
  • デヌタの䞍䞀臎による盎接的な経枈的損倱たたは眰金。

システムの総所有コスト (TCO) が倧幅に増加しおいたす。 「耇数のストレヌゞオプション」の状況から抜け出す方法はあるのでしょうか?

マルチモデル

「倚倉量ストレヌゞ」ずいう甚語は 2011 幎に䜿甚され始めたした。 このアプロヌチの問題点の認識ず解決策の暡玢には数幎かかり、2015 幎たでに、Gartner アナリストの口からその答えが定匏化されたした。

  • 「からNoSQL DBMS のマヌケット ガむド - 2015»

    DBMS、そのアヌキテクチャ、およびその䜿甚方法の将来はマルチモデルです。

  • 「からODBMS のマゞック クアドラント - 2016»

    䞻芁なオペレヌショナル DBMS は、単䞀プラットフォヌムの䞀郚ずしお耇数のモデル (リレヌショナルおよび非リレヌショナル) を提䟛したす。

今回はGartnerのアナリストの予想が正しかったようだ。 ずいうペヌゞに行くず、 äž»ãªè©•äŸ¡ DB-Engines 䞊の DBMS を芋るず、次のこずがわかりたす。Пそのリヌダヌのほずんどは、特にマルチモデル DBMS ずしお自らを䜍眮づけおいたす。 プラむベヌト評䟡のペヌゞでも同様のこずが芋られたす。

以䞋の衚は、マルチモデルであるず䞻匵する各民間評䟡のリヌダヌである DBMS を瀺しおいたす。 各 DBMS に぀いお、元のサポヌトされおいるモデル (か぀おは唯䞀のモデルでした) ず、珟圚サポヌトされおいるモデルが衚瀺されたす。 たた、自身を「元々はマルチモデル」ずしお䜍眮付けおおり、䜜成者によれば、初期継承モデルを持たない DBMS もリストされおいたす。

DBMS 初期モデル 远加モデル
オラクル 関連した グラフ、ドキュメント
MS SQL 関連した グラフ、ドキュメント
PostgreSQL 関連した グラフ*、ドキュメント
MarkLogic ドキュメンタリヌ グラフ、リレヌショナル
MongoDBの ドキュメンタリヌ Key-Value、グラフ*
DataStax ワむドカラム ドキュメンタリヌ、グラフ
Redisの キヌず倀 ドキュメンタリヌ、グラフ*
アランゎDB - グラフ、ドキュメント
OrientDB - グラフ、ドキュメント、リレヌショナル
アズヌル コスモスDB - グラフ、ドキュメント、リレヌショナル

テヌブルぞの泚意

衚内のアスタリスクは、予玄が必芁なステヌトメントを瀺しおいたす。

  • PostgreSQL DBMS はグラフ デヌタ モデルをサポヌトしおいたせんが、この補品はグラフ デヌタ モデルをサポヌトしおいたす。 それに基づいお、AgensGraph など。
  • MongoDB に関連しお、ク゚リ蚀語におけるグラフ挔算子の存圚に぀いお話すのがより正確です ($lookup, $graphLookupグラフ モデルのサポヌトよりも重芁ですが、もちろん、それらの導入には、グラフ モデルをサポヌトする方向で物理ストレヌゞ レベルでの最適化が必芁でした。
  • Redis に関しお蚀えば、拡匵機胜を意味したす。 Redisグラフ.

次に、各クラスに぀いお、いく぀かのモデルのサポヌトがこのクラスから DBMS にどのように実装されるかを瀺したす。 リレヌショナル、ドキュメント、グラフ モデルが最も重芁であるず考え、特定の DBMS の䟋を䜿甚しお、「欠けおいるもの」がどのように実装されるかを瀺したす。

リレヌショナルモデルに基づくマルチモデルDBMS

珟圚、䞻芁な DBMS はリレヌショナルであるため、RDBMS がマルチモデリングの方向ぞの動きを瀺さなければ、Gartner の予枬は真実であるずは考えられたせん。 そしお圌らはデモンストレヌションをしたす。 マルチモデル DBMS は䜕もうたくできないスむスナむフのようなものであるずいう考えは、Larry Ellison に盎接圓おられたす。

ただし、著者は Microsoft SQL Server でのマルチモデリングの実装を奜みたす。その䟋に぀いおは、ドキュメント モデルずグラフ モデルの RDBMS サポヌトに぀いお説明したす。

MS SQL Serverのドキュメントモデル

MS SQL Server がドキュメント モデルのサポヌトを実装する方法に぀いおは、Habré に関する優れた蚘事が XNUMX ぀すでにありたすが、ここでは簡単な再話ず解説に限定したす。

MS SQL Server でドキュメント モデルをサポヌトする方法は、リレヌショナル DBMS では非垞に䞀般的です。JSON ドキュメントは、通垞のテキスト フィヌルドに栌玍されるこずが提案されおいたす。 ドキュメント モデルのサポヌトは、この JSON を解析するための特別な挔算子を提䟛するこずです。

  • JSON_VALUE スカラヌ属性倀を抜出するには、
  • JSON_QUERY サブドキュメントを抜出したす。

䞡方の挔算子の XNUMX 番目の匕数は、JSONPath のような構文の匏です。

抜象的には、この方法で保存されたドキュメントは、タプルずは異なり、リレヌショナル DBMS の「ファヌストクラスの゚ンティティ」ではないず蚀えたす。 具䜓的には、MS SQL Server には珟圚、JSON ドキュメントのフィヌルドにむンデックスが存圚しないため、これらのフィヌルドの倀を䜿甚しおテヌブルを結合したり、これらの倀を䜿甚しおドキュメントを遞択したりするこずさえ困難になりたす。 ただし、そのようなフィヌルドに察しお蚈算列を䜜成し、その列にむンデックスを䜜成するこずは可胜です。

さらに、MS SQL Server は、挔算子を䜿甚しおテヌブルの内容から JSON ドキュメントを簡単に構築する機胜を提䟛したす。 FOR JSON PATH - ある意味、これたでの埓来のストレヌゞずは逆の可胜性。 RDBMS がどれほど高速であっおも、このアプロヌチがドキュメント DBMS のむデオロギヌず矛盟しおいるこずは明らかです。ドキュメント DBMS は基本的に、䞀般的なク゚リに察する既成の回答を保存しおおり、開発の容易さの問題のみを解決できたすが、速床の問題は解決できたせん。

最埌に、MS SQL Server を䜿甚するず、ドキュメント構築の逆の問題を解決できたす。次を䜿甚しお JSON をテヌブルに分解できたす。 OPENJSON。 ドキュメントが完党に平らでない堎合は、次の方法を䜿甚する必芁がありたす。 CROSS APPLY.

MS SQL Serverのグラフモデル

グラフ (LPG) モデルのサポヌトも Microsoft SQL Server に完党に実装されおいたす 予想通り: ノヌドを栌玍し、グラフの゚ッゞを栌玍するために特別なテヌブルを䜿甚するこずが提案されおいたす。 このようなテヌブルは匏を䜿甚しお䜜成されたす CREATE TABLE AS NODE О CREATE TABLE AS EDGE それぞれ。

最初のタむプのテヌブルは、レコヌドを栌玍するための通垞のテヌブルに䌌おいたすが、唯䞀の倖郚的な違いは、テヌブルにシステム フィヌルドが含たれおいるこずです。 $node_id — デヌタベヌス内のグラフ ノヌドの䞀意の識別子。

同様に、XNUMX 番目のタむプのテヌブルにはシステム フィヌルドがありたす。 $from_id О $to_id、このようなテヌブルの゚ントリは、ノヌド間の接続を明確に定矩したす。 各タむプの関係を保存するために別個のテヌブルが䜿甚されたす。

マルチモデル DBMS は最新の情報システムの基瀎ですか? これを䟋で説明しおみたしょう。 グラフデヌタを図のようなレむアりトにしたす。 次に、デヌタベヌスに察応する構造を䜜成するには、次の DDL ク゚リを実行する必芁がありたす。

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);

このようなテヌブルの䞻な特城は、テヌブルに察するク゚リで、Cypher のような構文でグラフ パタヌンを䜿甚できるこずです (ただし、「*」などはただサポヌトされおいたせん。 パフォヌマンス枬定に基づいお、これらのテヌブルにデヌタが栌玍される方法は、通垞のテヌブルにデヌタが栌玍される方法ずは異なり、そのようなグラフ ク゚リの実行に最適化されおいるず想定するこずもできたす。

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 Server におけるドキュメント モデルずグラフ モデルの実装の説明を芁玄するず、䞻に蚀語蚭蚈の芳点から、あるモデルを別のモデルの䞊に重ねお実装するこずは成功しおいるようには芋えないこずに泚意しおください。 ある蚀語を別の蚀語で拡匵する必芁がありたすが、蚀語は完党に「盎亀」ではなく、互換性ルヌルが非垞に奇劙な堎合がありたす。

ドキュメントモデルに基づくマルチモデルDBMS

このセクションでは、ドキュメント DBMS の䞭で最も人気のない MongoDB の䟋を䜿甚しお、ドキュメント DBMS でのマルチモデルの実装を説明したいず思いたす (前述したように、条件付きグラフ挔算子しかありたせん) $lookup О $graphLookup、シャヌド化されたコレクションでは動䜜したせん)、より成熟した「゚ンタヌプラむズ」DBMS の䟋を䜿甚したす。 MarkLogic.

したがっお、コレクションには次のタむプの XML ドキュメントのセットが含たれたす (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 のリレヌショナル ビュヌは完党に制限されおいたした。 むンデックスベヌス 曞き蟌み可胜ですが、珟圚は非掚奚ずみなされおいたす。

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 は他の XNUMX ぀の方法でグラフ モデルをサポヌトしたす。

  1. DBMS は、RDF デヌタの本栌的な別個のストレヌゞになりたす (その䞭のトリプレットは ず呌ばれたす)。 マネヌゞド 䞊蚘のものずは察照的に 抜かれた).
  2. 特別なシリアル化の RDF は、XML たたは JSON ドキュメントに簡単に挿入できたす (その埌、トリプレットが呌び出されたす) 管理されおいない。 これはおそらくメカニズムの代替手段です idref 等

MarkLogic で物事が「実際に」どのように機胜するかに぀いおの良いアむデアは、次のずおりです。 光APIこの意味では、これは䜎レベルですが、その目的はむしろ逆で、䜿甚されるデヌタ モデルから抜象化を詊み、異なるモデルのデヌタ、トランザクション性などの䞀貫した䜜業を確保するこずです。

「メむンモデルを持たない」マルチモデルDBMS

垂堎には、継承されたメむン モデルを持たず、圓初はマルチモデルずしお䜍眮付けられおいる DBMS もありたす。 これらには以䞋が含たれたす アランゎDB, OrientDB (2018幎より開発䌚瀟はSAPに所属) コスモスDB (Microsoft Azure クラりド プラットフォヌムの䞀郚ずしおのサヌビス)。

実際、ArangoDB ず OrientDB には「コア」モデルがありたす。 どちらの堎合も、これらは独自のデヌタ モデルであり、ドキュメント XNUMX を䞀般化したものです。 䞀般化は䞻に、グラフずリレヌショナルの性質のク゚リを実行できるようにするこずを目的ずしおいたす。

これらのモデルは、指定された DBMS で䜿甚できる唯䞀のモデルであり、独自のク゚リ蚀語はそれらず連携するように蚭蚈されおいたす。 もちろん、そのようなモデルや DBMS は有望ですが、暙準モデルや蚀語ずの互換性がないため、これらの DBMS をレガシヌ システムで䜿甚するこず、぀たりそこで既に䜿甚されおいる DBMS を眮き換えるこずは䞍可胜になりたす。

Habré には、ArangoDB ず OrientDB に関する玠晎らしい蚘事がすでにありたした。 NoSQL デヌタベヌスでの JOIN.

アランゎDB

ArangoDB はグラフ デヌタ モデルのサポヌトを䞻匵しおいたす。

ArangoDB のグラフのノヌドは通垞のドキュメントであり、゚ッゞは通垞のシステム フィヌルドずずもに (_key, _id, _rev) システムフィヌルド _from О _to。 ドキュメント DBMS 内のドキュメントは、䌝統的にコレクションに結合されたす。 ゚ッゞを衚すドキュメントのコレクションは、ArangoDB でぱッゞ コレクションず呌ばれたす。 ちなみに、゚ッゞコレクションドキュメントもドキュメントなので、ArangoDBの゚ッゞもノヌドずしお機胜したす。

初期デヌタ

コレクションをしたしょう 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 
  }
]

ク゚リず結果

ArangoDB で䜿甚される 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 よりもリレヌショナル 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

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"
    }
  ]

ご芧のずおり、頂点には、入っおくる゚ッゞず出おいく゚ッゞに関する情報も栌玍されたす。 で の䜿甚 Document API は参照敎合性自䜓を監芖する必芁があり、Graph API がこの䜜業を匕き受けたす。 しかし、プログラミング蚀語に統合されおいない「玔粋な」ク゚リ蚀語で 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ではCypher颚のリク゚ストフォヌムが登堎したしたが、 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

結果の圢匏は前のリク゚ストず同じになりたす。 最初のク゚リのように、より「リレヌショナル」にするために䜕を削陀する必芁があるかを考えおください。

アズヌル コスモスDB

皋床は䜎いですが、ArangoDB ず OrientDB に぀いお䞊で述べたこずは、Azure CosmosDB にも圓おはたりたす。 CosmosDB は、SQL、MongoDB、Gremlin、Cassandra のデヌタ アクセス API を提䟛したす。

SQL API ず MongoDB API は、ドキュメント モデル内のデヌタにアクセスするために䜿甚されたす。 Gremlin API ず Cassandra API - それぞれグラフ圢匏ず列圢匏のデヌタにアクセスしたす。 すべおのモデルのデヌタは、CosmosDB 内郚モデル圢匏で保存されたす。 ARS (「atom-record-sequence」)、これもドキュメント XNUMX に近いものです。

マルチモデル DBMS は最新の情報システムの基瀎ですか?

ただし、ナヌザヌが遞択したデヌタ モデルず䜿甚する API は、サヌビスでのアカりント䜜成時に固定されたす。 次のように、あるモデルにロヌドされたデヌタに別のモデルの圢匏でアクセスするこずはできたせん。

マルチモデル DBMS は最新の情報システムの基瀎ですか?

したがっお、今日の Azure CosmosDB のマルチモデルは、XNUMX ぀のメヌカヌの異なるモデルをサポヌトする耇数のデヌタベヌスを䜿甚できるだけであり、マルチバリアント ストレヌゞの問題をすべお解決するわけではありたせん。

グラフモデルに基づくマルチモデルDBMS?

泚目すべきは、グラフ モデルに基づくマルチモデル DBMS がただ垂堎に存圚しないずいう事実です (ただし、RDF ず LPG ずいう XNUMX ぀のグラフ モデルを同時にサポヌトするマルチモデル サポヌトは陀きたす。これに぀いおは、「 以前の出版物。 最倧の問題は、リレヌショナル モデルではなく、グラフ モデルの䞊にドキュメント モデルを実装するこずによっお匕き起こされたす。

グラフ モデルの䞊にリレヌショナル モデルを実装する方法の問題は、グラフ モデルの圢成䞭にも怜蚎されたした。 どうやっお 圌は蚀い​​たした䟋えば デビッド・マクガバン:

グラフ アプロヌチには、(1) 通垞のキヌ倀ペアからのタプルの回埩ず (2) グルヌプ化によるリレヌショナル ビュヌを可胜にする、グラフ デヌタベヌス䞊でのレむダヌの䜜成 (たずえば、適切なむンデックス付けによる) を劚げる本質的なものは䜕もありたせん。リレヌションタむプ別のタプル。

グラフ モデルの䞊にドキュメント モデルを実装する堎合は、たずえば次のこずに留意する必芁がありたす。

  • JSON 配列の芁玠は順序付けされおいるず芋なされたすが、グラフの゚ッゞの頂点から発せられる芁玠は順序付けされおいたせん。
  • ドキュメント モデル内のデヌタは通垞非正芏化されおおり、同じ埋め蟌みドキュメントの耇数のコピヌを保存するこずは望たしくなく、サブドキュメントには通垞識別子がありたせん。
  • 䞀方、ドキュメント DBMS のむデオロギヌは、ドキュメントは毎回新たに構築する必芁のない既成の「集合䜓」であるずいうこずです。 完成した文曞に察応するサブグラフを迅速に取埗する機胜をグラフ モデルに提䟛する必芁がありたす。

いく぀かの広告

この蚘事の著者は NitrosBase DBMS の開発に関係しおおり、その内郚モデルはグラフであり、倖郚モデル (リレヌショナル モデルずドキュメント) はその衚珟です。 すべおのモデルは同等です。自然なク゚リ蚀語を䜿甚しお、ほがすべおのデヌタをどのモデルでも利甚できたす。 さらに、どのビュヌでもデヌタを倉曎できたす。 倉曎は内郚モデルに反映され、それに応じお他のビュヌにも反映されたす。

NitrosBase でのモデル マッチングがどのようなものであるかに぀いおは、次の蚘事のいずれかで説明できればず思いたす。

たずめ

マルチモデリングず呌ばれるものの抂芁が読者にずっお倚かれ少なかれ明らかになったこずを願っおいたす。 マルチモデル DBMS はたったく異なるものであり、「マルチモデルのサポヌト」も異なっお芋える堎合がありたす。 それぞれの特定のケヌスにおける「マルチモデル」ず呌ばれるものを理解するには、次の質問に答えるこずが圹立ちたす。

  1. 埓来のモデルのサポヌトに぀いお話しおいるのでしょうか、それずもある皮の「ハむブリッド」モデルのサポヌトに぀いお話しおいるのでしょうか?
  2. モデルは「等しい」のでしょうか、それずもモデルの XNUMX ぀が他のモデルの䞻題になっおいるのでしょうか?
  3. モデルたちはお互いに「無関心」なのでしょうか あるモデルに曞き蟌たれたデヌタを別のモデルで読み蟌んだり、䞊曞きしたりするこずはできたすか?

マルチモデル DBMS の関連性に぀いおの質問にはすでに前向きに答えられるず思いたすが、興味深いのは、どのタむプの DBMS が近い将来より需芁が高たるかずいうこずです。 埓来のモデル、䞻にリレヌショナル モデルをサポヌトするマルチモデル DBMS の需芁がさらに高たるず思われたす。 さたざたな埓来の DBMS の利点を組み合わせた新しいモデルを提䟛するマルチモデル DBMS が普及するのは、さらに遠い将来の話です。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

マルチモデル DBMS を䜿甚しおいたすか?

  • 私たちはそれを䜿甚せず、すべおを XNUMX ぀の DBMS ず XNUMX ぀のモデルに保存したす。

  • 埓来の DBMS のマルチモデル機胜を䜿甚したす

  • 私たちは倚蚀語氞続性を実践したす

  • 新しいマルチモデル DBMS (Arango、Orient、CosmosDB) を䜿甚したす

19 人のナヌザヌが投祚したした。 4名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす