オブジェクトの永続化には、リレーショナル データベースよりもドキュメント指向データベースの方が適していますか?

StackOverflow https://stackoverflow.com/questions/2336182

質問

データベースの使用に関して言えば、過去 10 年間は ORM の時代で、オブジェクト グラフを昔ながらの RMDBS に永続化しようと何百もの競合が行われていました。今、私たちはドキュメント指向データベースの時代の到来を目の当たりにしているようです。 これら データベース スキーマフリーのドキュメント用に高度に最適化されていますが、スケールアウトしてクラスターを並行してクエリできる機能も非常に魅力的です。

ドキュメント指向データベースには、オブジェクト指向設計でデータ モデルを永続化するという点で、RDBMS に比べていくつかの利点もあります。テーブルはスキーマフリーであるため、継承階層内の異なるクラスに属するオブジェクトを並べて格納できます。また、ドメイン モデルが変更されても、コードがドメイン クラスの古いバージョンからオブジェクトを戻すことに対応できる限り、変更のたびにデータベース全体を移行する必要を避けることができます。

一方、ドキュメント指向データベースのパフォーマンス上の利点は、主に、より深いドキュメントを保存するときに得られるようです。オブジェクト指向の用語では、他のクラスから構成されるクラス (ブログ投稿とそのコメントなど)。ただし、ブログの例など、私が思いつく例のほとんどでは、読み取りアクセスの増加は、新しいコメントが追加されるたびにブログ投稿の「ドキュメント」全体を書かなければならないというペナルティによって相殺されるように見えます。追加した。

データの読み取りと書き込みの方法に合わせて最適化された深いグラフでオブジェクトを整理することに細心の注意を払えば、ドキュメント指向データベースはオブジェクト指向システムに大きな利点をもたらすことができるように思えますが、これはユースケースを理解していることを意味します。フロント。現実の世界では、実際にプロファイリングできる実際の実装ができるまでは分からないことがよくあります。

リレーショナル vs. の場合も同様です。ドキュメント指向データベースはスイングとラウンドアバウトのどちらかですか?私は人々の意見やアドバイス、特にドキュメント指向データベース上に重要なアプリケーションを構築した人がいるかどうかに興味があります。

役に立ちましたか?

解決

それは、データの構造とデータ アクセス パターンによって異なります。

ドキュメント データベースはドキュメントを保存および取得します。基本的なアトミックな保存単位はドキュメントです。おっしゃるとおり、スマートなドキュメント モデルを作成するには、データ アクセス パターン/ユースケースについて考える必要があります。ドメイン モデルをいくつかのドキュメント間で分割およびパーティション化できる場合、ドキュメント データベースは魔法のように機能します。たとえば、ブログ ソフトウェア、CMS、Wiki ソフトウェアの場合、ドキュメント データベースは非常にうまく機能します。データをドキュメントに圧縮する適切な方法を見つけることができれば、問題はありません。でも試してはいけない リレーショナル モデルをドキュメント データベースに適合させる。データ アクセス パターンでリレーションの「ナビゲーション」が多用されると、グラフまたはオブジェクト データベースがより自然な選択になります。

もう 1 つは、読み取り/書き込みパフォーマンスのトレードオフについてです。たとえば、ブログ ソフトウェア。過渡的な RDBMS データ モデルでは、データは正規化されます。これは、ブログ投稿を読み取るために別のテーブルから読み取り、結合などの関係を計算するため、データの読み取りにコストがかかることを意味します。その代わり、タグの変更は安価です。対照的に、ドキュメント データベースでは、ポストドキュメントをロードするだけなので、ブログ投稿の読み取りは低コストです。ただし、ドキュメント全体を保存する必要があるため、更新にはおそらくコストがかかります。さらに悪いことに、何かを変更する (タグ シナリオの名前を変更する) ために、大量のドキュメントを調べなければなりません。ほとんどのシステムでは、読み取りは書き込みよりもはるかに重要です。したがって、再正規化されたデータ ストアを使用することは実際には意味があります。

大規模なデータベースでは、スキーマフリーの設計が利点になると思います。RDBMS ではスキーマをアップグレードする必要がありますが、これは非常に面倒なプロセスです。特に既存のデータを新しいスキーマに変換します。スキーマフリーのデータベースでは、アプリケーションがこれに対処する必要があるため、柔軟性が高まります。たとえば、古いドキュメントにアクセスしたときに、その場でスキーマをアップグレードできます。こうすることで、アプリケーションが古いバージョンをオンザフライで処理しながら、巨大なデータベースを稼働状態に保つことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top