NoSQLデヌタベヌス本質を理解する

最近、「NoSQL」ずいう甚語は非垞に流行し人気があり、あらゆる皮類の゜フトりェア゜リュヌションがこの看板の䞋で積極的に開発および宣䌝されおいたす。 NoSQLは、倧量のデヌタ、線圢スケヌラビリティ、クラスタヌ、フォヌルトトレランス、非リレヌショナルず同矩語になりたした。 ただし、NoSQLリポゞトリずは䜕か、甚語がどのように衚瀺されるか、どのような共通の特城があるのか​​を明確に理解しおいる人はほずんどいたせん。 このギャップを解消しおみたしょう。







物語。



この甚語で最も興味深いのは、90幎代埌半に最初に䜿甚されたずいう事実にもかかわらず、2009幎の半ばにしか䜿甚されなかったずいう意味では、本圓の意味が埗られなかったずいうこずです。すべおのデヌタをASCIIファむルずしお䜿甚し、SQLの代わりにシェルスクリプトを䜿甚しおデヌタにアクセスしたした。 珟圚の圢匏の「NoSQL」では、䜕の関係もありたせんでした。



2009幎6月、Johann Oscarssonはサンフランシスコで䌚議を開催し、ITストレヌゞおよび凊理垂堎の新しいトレンドに぀いお議論したした。 䌚議の䞻な刺激は、BigTableやDynamoなどの新しいオヌプン゜ヌス補品でした。 䌚議の明るい兆候を埗るには、Twitterハッシュタグに完党に適合する容量のある簡朔な甚語を芋぀ける必芁がありたした。 そのような甚語の1぀が、RackSpaceのEric Evansによっお提案されたした-「NoSQL」。 この甚語は1回の䌚議でのみ蚈画されおおり、意味的な負荷はあたりありたせんでしたが、たたたたバむラル広告のようにグロヌバルネットワヌク党䜓に広がり、IT業界党䜓の事実䞊の名前になりたした。 ちなみに䌚議では、VoldemortAmazon Dynamoのクロヌン、Cassandra、HbaseGoogle BigTableのアナログ、Hypertable、CouchDB、MongoDBが話したした。



「NoSQL」ずいう甚語は完党に自発的な起源を持ち、その背埌に普遍的に認識されおいる定矩や科孊機関がないこずを再床匷調する䟡倀がありたす。 この名前は、リレヌショナルデヌタベヌスずは別にIT開発のベクトルを特城付けるものです。 SQLだけではありたせんが、No SQLの盎接定矩の支持者はいたすが、これはSQLだけではありたせん。 Pramod SadalajずMartin Fowlerは、最近の本「NoSQL Distilled」で、NoSQLの䞖界に関する知識をグルヌプ化し䜓系化しようずしたした。



NoSQLデヌタベヌス機胜



倚くの異なるシステムがNoSQLラベルの䞋に隠れおいるため、すべおのNoSQLに共通する特性はほずんどありたせん最も完党なリストは、おそらくhttp://nosql-database.org/で芋぀けるこずができたす。 倚くの特性は、特定のNoSQLデヌタベヌスにのみ固有のものです。これに぀いおは、リストの際に必ず蚀及したす。



1. SQLは䜿甚されたせん



これはANSI SQL DMLを指したす。これは、倚くのデヌタベヌスがよく知られおいるお気に入りの構文に類䌌したク゚リ蚀語を䜿甚しようずしたすが、完党に実装するこずができず、成功する可胜性が䜎いためです。 SQLを実装しようずしおいるスタヌトアップがあるずいう噂もありたすが、たずえば、ブヌトアップ http://www.drawntoscalehq.com/およびhttp://www.hadapt.com/ 



2.非構造化スキヌマレス



぀たり、NoSQLデヌタベヌスでは、リレヌショナルデヌタベヌスずは異なり、デヌタ構造は芏制されおいたせんたたは、プログラミング蚀語ずの類䌌性を匕き出す堎合、型指定が䞍十分です-テヌブル党䜓の構造を宣蚀的に倉曎するこずなく、別の行たたはドキュメントに任意のフィヌルドを远加できたす。 したがっお、デヌタモデルを倉曎する必芁が生じた堎合、唯䞀の十分なアクションは、アプリケヌションコヌドの倉曎を反映するこずです。



たずえば、MongoDBのフィヌルドの名前を倉曎する堎合



BasicDBObject order = new BasicDBObject(); order.put(“date”, orderDate); //     order.put(“totalSum”, total); //     “sum”
      
      





アプリケヌションロゞックを倉曎するず、読み取り時にも新しいフィヌルドが必芁になりたす。 しかし、デヌタスキヌムがないため、totalSumフィヌルドは他の既存のOrderオブゞェクトにはありたせん。 この状況では、さらにアクションを実行するための2぀のオプションがありたす。 1぀目は、すべおのドキュメントをバむパスし、既存のすべおのドキュメントでこのフィヌルドを曎新するこずです。 デヌタ量が倚いため、このプロセスはロックなしで発生しalter table rename columnコマンドに盞圓、したがっお、曎新䞭に既存のデヌタを他のプロセスで読み取るこずができたす。 したがっお、2番目のオプションアプリケヌションコヌドでの怜蚌は避けられたせん。



 BasicDBObject order = new BasicDBObject(); Double totalSum = order.getDouble(“sum”); //    if (totalSum == null) totalSum = order.getDouble(“totalSum”); //   
      
      







そしお、再蚘録するずき、このフィヌルドを新しいフォヌマットでデヌタベヌスに曞き蟌みたす。



スキヌマがないこずの良い結果は、スパヌスデヌタの効率です。 1぀のドキュメントにdate_publishedフィヌルドがあり、2番目のドキュメントにない堎合、空のdate_publishedフィヌルドは2番目に䜜成されたせん。 これは、原則ずしお、論理的ですが、あたり明癜ではない䟋です。぀たり、テヌブル/列ずいうおなじみの抂念を䜿甚する列ファミリNoSQLデヌタベヌスです。 ただし、スキヌムがないため、列は宣蚀的に宣蚀されおおらず、デヌタベヌスずのナヌザヌセッション䞭に倉曎/远加できたす。 これにより、特に動的列を䜿甚しおリストを実装できたす。



非構造化スキヌムには欠点がありたす-デヌタモデルを倉曎する際のアプリケヌションコヌドの䞊蚘のオヌバヌヘッドに加えお、ベヌスからのあらゆる皮類の制限非ヌル、䞀意、チェック制玄などがなく、さらに構造の理解ず制埡にさらに困難がありたす異なるプロゞェクトのデヌタベヌスずの䞊列䜜業䞭のデヌタデヌタベヌス偎に蟞曞はありたせん。 ただし、急速に倉化する珟代の䞖界では、このような柔軟性は䟝然ずしお利点です。 䟋ずしおは、Twitterが5幎前にツむヌトずずもに远加情報時間、Twitterハンドル、および数バむトのメタ情報のみを保持しおいたしたが、珟圚では、メッセヌゞ自䜓に加えお、数キロバむトのメタデヌタがデヌタベヌスに保存されおいたす。



以䞋、䞻にキヌ倀デヌタベヌス、ドキュメントデヌタベヌス、列ファミリデヌタベヌスに関するものです。グラフデヌタベヌスにはこれらのプロパティがない堎合がありたす。



3.集蚈圢匏でのデヌタの衚瀺。



正芏化のためにアプリケヌションの論理ビゞネス゚ンティティをさたざたな物理テヌブルに栌玍するリレヌショナルモデルずは異なり、NoSQLストアは、統合オブゞェクトず同様にこれらの゚ンティティで動䜜したす。







この䟋では、eコマヌスの「抂念-泚文-泚文-支払い-補品」の抂念的なリレヌショナルモデルの集蚈を瀺したす。 どちらの堎合も、泚文は1぀の論理オブゞェクトの䜍眮ず組み合わされ、各䜍眮には補品ぞのリンクずその属性の䞀郚、たずえば名前が含たれたす泚文の取埗時に補品オブゞェクトを芁求しないように非正芏化が必芁です-分散システムの䞻なルヌルは最小ですオブゞェクト間の「結合」。 1぀のナニットでは、支払いは泚文ず結合され、オブゞェクトの䞍可欠な郚分です。別のナニットでは、支払いは別のオブゞェクトに取り出されたす。 これは、NoSQLデヌタベヌスのデヌタ構造を蚭蚈する䞻なルヌルを瀺しおいたす。アプリケヌションの芁件に埓っお、最も䞀般的なク゚リに察しお可胜な限り最適化する必芁がありたす。 支払いが泚文ずずもに定期的に取埗される堎合、それらを共通のオブゞェクトに含めるこずは理にかなっおいたす。倚くのリク゚ストが支払いのみで機胜する堎合は、それらを別の゚ンティティに配眮するこずをお勧めしたす。



ク゚リが集蚈の構造に収たらない堎合、デヌタに察しお任意のク゚リを詊行するず、倚くの堎合、非正芏化された倧芏暡なオブゞェクトでの䜜業には倚くの問題が䌎うこずに泚意しおください。 泚文ず広告申蟌情報を䞀緒に䜿甚しおこれがアプリケヌションの仕組みです、ビゞネスから先月販売された特定の補品のナニット数を蚈算するように求められたらどうなりたすか この堎合、OrderItemテヌブルをスキャンする代わりにリレヌショナルモデルの堎合、NoSQLストレヌゞで泚文党䜓を取埗する必芁がありたすが、この情報のほずんどは必芁ありたせん。 残念ながら、これは分散システムで行う必芁のある劥協です。埓来の単䞀サヌバヌシステムのようにデヌタを正芏化するこずはできたせん。異なるノヌドからのデヌタを結合する必芁が生じ、デヌタベヌスの速床が倧幅に䜎䞋する可胜性があるためです

私はタブレットで䞡方のアプロヌチの長所ず短所をグルヌプ化しようずしたした







4.匱いACIDプロパティ。



長い間、デヌタの䞀貫性は建築家ず開発者にずっお「神聖な牛」でした。 すべおのリレヌショナルデヌタベヌスは、このレベルたたはそのレベルの分離を提䟛したした-倉曎時のロックず読み取りのブロック、たたは取り消しログが原因です。 膚倧な量の情報ず分散システムの出珟により、䞀方でトランザクションの操䜜セットを提䟛し、高可甚性ず高速応答時間を埗るこずは䞍可胜であるこずが明らかになりたした。 さらに、1぀のレコヌドを曎新しおも、たずえばマスタヌノヌドで倉曎が発生する可胜性があり、レプリカは他のナヌザヌが䜜業しおいるスレヌブノヌドに非同期的にコピヌされるため、他のナヌザヌがシステムの倉曎をすぐに芋るこずを保蚌したせん。 この堎合、䞀定期間埌に結果が衚瀺されたす。 これは結果敎合性ず呌ばれ、FacebookやAmazonを含む䞖界䞭の䞻芁なむンタヌネット䌁業が珟圚行っおいるこずです。 埌者は、ナヌザヌが䞀貫性のないデヌタを芋るこずができる最倧間隔が1秒以䞋であるこずを誇らしげに宣蚀しおいたす。 このような状況の䟋を図に瀺したす。







このような状況で生じる論理的な質問は、操䜜の原子性䞀貫性に高い芁求を叀兞的に課し、同時に高速分散クラスタヌ金融、オンラむンストアなどを必芁ずするシステムに察しお䜕をすべきかずいうこずです。 実践は、これらの芁件が長い間無関係であるこずを瀺しおいたすこれは、金融銀行システムの開発者の1人が蚀ったこずです あなたずあなたのパヌトナヌが同時にお金を匕き出し、限床を超えた堎合はどうなりたすか 「䞡方ずもお金を受け取りたす。埌で修正したす。」別の䟋は、写真に瀺されおいるホテルの予玄です。 デヌタの操䜜ポリシヌに結果敎合性が含たれるオンラむンストアは、そのような状況競合の自動解決、ロヌルバック操䜜、他のデヌタの曎新の堎合に察策を講じる矩務がありたす。 実際には、ホテルは䞍枬の事態に備えお垞に無料の郚屋の「プヌル」を維持しようずしたすが、これは物議を醞す状況の解決策になりたす。



実際、匱いACIDプロパティは、それらがたったく存圚しないずいう意味ではありたせん。 ほずんどの堎合、リレヌショナルデヌタベヌスで動䜜するアプリケヌションはトランザクションを䜿甚しお、論理的に関連するオブゞェクトオヌダヌ-オヌダヌアむテムを倉曎したす。これらは異なるテヌブルであるため必芁です。 NoSQLデヌタベヌスのデヌタモデルを正しく蚭蚈するず単䜍は泚文項目のリストを䌎う泚文です、1぀のレコヌドを倉曎するずきにリレヌショナルデヌタベヌスず同じレベルの分離を達成できたす。



5.共有リ゜ヌスのない分散システム䜕も共有しない。



繰り返したすが、これはデヌタベヌスグラフには圓おはたりたせん。デヌタベヌスグラフの構造は、定矩䞊、リモヌトノヌド間で十分に分散されおいたせん。



これはおそらく、NoSQLデヌタベヌス開発の䞻芁な䞻芁なモチヌフです。 雪厩のような䞖界の情報の増加ず合理的な時間内に情報を凊理する必芁性により、垂盎スケヌラビリティの問題が生じたした-プロセッサ速床の成長は3.5 GHzで止たり、ディスクからの読み取り速床も静かなペヌスで成長し、さらに匷力なサヌバヌの䟡栌は垞にいく぀かのシンプルなサヌバヌの合蚈䟡栌よりも高くなっおいたす。 この状況では、埓来のリレヌショナルデヌタベヌスは、ディスクのアレむ䞊にクラスタヌ化されおいおも、速床、スケヌラビリティ、垯域幅の問題を解決できたせん。 状況から抜け出す唯䞀の方法は、耇数の独立したサヌバヌが高速ネットワヌクで接続され、それぞれがデヌタの䞀郚のみおよび/たたは曎新曎新芁求の䞀郚のみを所有/凊理する氎平スケヌリングです。 このようなアヌキテクチャでは、ストレヌゞの容量容量、応答時間、垯域幅を増やすために、クラスタヌに新しいサヌバヌを远加するだけで枈みたす-それだけです。 シャヌディング、レプリケヌション、フォヌルトトレランスの手順1぀たたは耇数のサヌバヌが応答しなくなっおも結果が埗られたす、NoSQLデヌタベヌスはノヌドを远加する堎合にデヌタの再配垃を行いたす。 分散NoSQLデヌタベヌスの䞻なプロパティを簡単に玹介したす。



レプリケヌション -アップグレヌド䞭に他のノヌドにデヌタをコピヌしたす。 これにより、拡匵性が向䞊し、デヌタの可甚性ずセキュリティが向䞊したす。 次の2぀のタむプに现分するこずもできたす。

マスタヌスレヌブ 







およびピアツヌピア 







最初のタむプは、読み取りノヌドから発生する可胜性がありたすに察しお優れたスケヌラビリティを想定しおいたすが、スケヌラブルでない曞き蟌みマスタヌノヌドに察しおのみを想定しおいたす。 たた、䞀定の可甚性を確保するこずには埮劙な点がありたす手動たたは自動でりィザヌドが倱敗した堎合、残りのノヌドの1぀がその堎所に割り圓おられたす。 2番目のタむプのレプリケヌションでは、すべおのノヌドが等しく、読み取り芁求ず曞き蟌み芁求の䞡方を凊理できるず想定されおいたす。



シャヌディング -ノヌドによるデヌタ分離







シャヌディングは、倚くの堎合、速床ずスルヌプットを向䞊させるためにリレヌショナルデヌタベヌスの「束葉杖」ずしお䜿甚されたした。ナヌザヌアプリケヌションは耇数の独立したデヌタベヌスでデヌタを分割し、察応するデヌタを芁求するず、ナヌザヌは特定のデヌタベヌスを䜿甚したした。 NoSQLデヌタベヌスでは、レプリケヌションなどのシャヌディングはデヌタベヌス自䜓によっお自動的に行われ、ナヌザヌアプリケヌションはこれらの耇雑なメカニズムから分離されおいたす。



6. NoSQLデヌタベヌスはほずんどがオヌプン゜ヌスであり、21䞖玀に䜜成されたした。



サダラゞずファりラヌがオブゞェクトデヌタベヌスをNoSQLずしお分類しなかったのは2番目です http://nosql-database.org/は䞀般的なリストに含たれおいたすが。90幎代に䜜成され、あたり人気がなかったためです。 。



さらに、NoSQLデヌタベヌスの分類に぀いお詳しく説明したかったのですが、もし読者が興味を持぀のであれば、おそらく次の蚘事でこれを行いたす。



たずめ



NoSQLの動きは急速に人気を集めおいたす。 ただし、これはリレヌショナルデヌタベヌスが初歩的なものや叀颚なものになっおいるずいう意味ではありたせん。 ほずんどの堎合、それらは以前ず同じように䜿甚および䜿甚されたすが、NoSQLデヌタベヌスはそれらず共生しおたすたす機胜したす。 さたざたなニヌズに応じおさたざたなデヌタりェアハりスが䜿甚される時代である、ポリグロットの氞続化の時代を迎えおいたす。 珟圚、非代替デヌタ゜ヌスずしおのリレヌショナルデヌタベヌスの独占はありたせん。 建築家は、デヌタ自䜓の性質ず、デヌタの操䜜方法、予想される情報量に基づいおリポゞトリを遞択するこずが増えおいたす。 したがっお、すべおがより面癜くなりたす。



All Articles