5


1

リレーショナルデータベースとNoSQLデータベースの両方を使用するのに適した状況は何ですか?

これはNoSQL対ではありません。 SQLタイプの質問。 私は、RDBMSとNoSQLデータベースの組み合わせを使用でき、その組み合わせの* useが適しているシナリオのタイプに興味があります *。 一般に、手元の状況とタスクに「依存する」ことを理解していますが、私の考えでは、この組み合わせが非常に役立つ一般的な/一般的な^ 1 ^状況があるはずです。

上記のタイプのソリューションにはそれぞれ長所と短所があります-私が望んでいるのは、両方の長所を十分に活用して活用できる状況/シナリオです

私の考えでは、1つはEコマースかもしれません。 RDBMSでの支払い、トランザクションなど(ACID ^ 2 ^と考えてください)、NoSQLデータベースの製品情報およびカタログ。 しかし、それは適切ですか?

アプリケーションの横断的関心事、例えば。 別の例として、ロギングはおそらくNoSQLタイプのソリューションに適しています。

あるいは、なぜこれらのタイプのテクノロジーを組み合わせて使用​​しないのですか?

編集:繰り返しになりますが、SQLとNoSQLにはそれぞれ固有の利点と欠点があり、特定のタイプの状況は上記のデータストアのいずれかにのみ適していることを理解しています。

^ 1 ^ FacebookやGoogleなどの巨人はおそらくこれらの組み合わせを使用することを知っていますが、[ラインスルー] *ほとんどすべて*ほとんどの場合、ほとんどのSOメンバーはこのような巨大なソリューションに取り組むことはないと思います。 より典型的な日々のタイプのもの。

^ 2 ^ RavenDBは、ACIDトランザクションをサポートするNoSQLソリューションです

5 Answer


1


良い例は、複数のノードで同時に更新され、潜在的に複雑なアドホッククエリをサポートする必要がある分散データストアです。 ノードは「最終的に一貫性のある」ものになります。つまり、特定のノードは、いつでもデータの画像にギャップがある可能性があります。

これは、関係間の「外部」結合によってギャップを非常に簡単に処理できるため、RDBMSに適しています。 グラフモデルは異なるデータ要素間のナビゲーションパスに依存しているため、リレーショナルモデルは、たとえばグラフベースのモデルよりもこれに適しているはずです。 要素が欠落している場合、グラフは2つのグラフに分割されるため、パスベースのクエリは無効になる可能性があります。 リレーショナルデータベースは非ナビゲーションであるため、この問題はリレーショナルモデルには存在しません。データ要素間に構造的な「リンク」がないため、データに対するクエリの「形状」は、データが欠落しているだけで変更する必要はありません。


1


明らかな答えは、単純なアプリケーションで一方が他方よりも適切である場合の例として報告することです。

たとえば、OLTP作業にRavenDBやCouchなどのドキュメントデータベースを使用すると、エンティティを保存し、それらのエンティティをドキュメント全体のフラット化されたプロジェクション(単一クエリビュー)にクエリする手段が得られるためです。 (RouchDBはCouchDBよりも優れていますが、それはここにもそこにもありません;-))

Map / Reduceを使用して特定のページ(人気のある製品、タグクラウドなど)に表示する統計を提供する単純なレポートにも使用できます。

ただし、リレーショナルストアを照会するために多くのレポートシステムが構築されているため、レポートデータベースにデータを複製することができます。

たとえば、RavenDBには、任意のインデックスを取得し、そのインデックス内のデータをリレーショナルストアに自動的に複製するオプションがあります。

リレーショナル形式のデータを使用すると、標準のOLTP作業やドキュメントデータベースの設計を妨げることなく、複雑なクロスドキュメントクエリを実行し、既存のレポート製品と統合できるため、理にかなっています。

これは多くの回答の1つに過ぎません。特定の種類のデータストアが特定の目的により適している例が他にもあるため、1日の終わりにはそこから抜け出すことはできません。 (VoltDBの連中を信じない限り)


1


リレーショナルデータベースがまったく機能しない規模で運用している場合を除き、NoSQLの大きな利点は開発の容易さです。たとえば、ORMやデータベースアップグレードスクリプトが不要です。 システムの一部でSQLの使用を開始するとすぐに、他の部分でSQLを使用するための追加作業はほとんど必要ありません。

ほぼすべてのプロジェクトに、特定のタイプのデータストアにより適したコンポーネントがあります。 重要な問題は、複数のデータストアを使用するオーバーヘッドを正当化するのに十分な差があるかどうかです。 一般的に、これは、スケール、アドホックレポート、およびリレーショナルデータベースに適切にマッピングされないデータ構造の組み合わせを意味します。


1


NOSQLを使用して、SQLデータストアからデータを複製できます。 このシナリオでは、モバイルSQLITEレコードからドキュメントを作成し、couchまたはmongoを使用してこれをサーバー上のnosqlに複製します。 サーバーSQLは、受信ドキュメントを処理できます。


0


それは実際にはプログラミングの質問ではありませんが、ここに私が思うことです。

CAP定理http://en.wikipedia.org/wiki/CAP_theoremを検討する場合、リレーショナルデータベースは一貫性と可用性に焦点を当て、NoSQLは可用性とパーティション許容度(*偶然*一貫性)に焦点を当てると仮定できます。

SQLクエリが本当に一貫していると思われる場合は、RDBMSの使用を検討する必要があります。 前提条件でない場合は、NoSQLデータベースを使用できます。

だからこそ、ほとんどの場合、両方の利点を生かして、両方を使用するのが最善の答えです。