3

ほとんどの場合と同様に、私は RDMS の世界から来て、noSQL データベース、特にドキュメント ストアについて理解を深めようとしています (それらが最も興味深いと思います)。

ドキュメントデータベースを使用してセットベースの操作を実行する方法を理解しようとしています(RavenDBで遊んでいます)。

私の理解によると:

  • ユニオン(SQL UNION と同様) は非常に単純な追加です。さらに、異なるセット間のユニオン (SQL JOIN) をマップ/リデュースできます。RavenDB mythology book に示されているブログ エントリのコメント カウントの例は、良い出発点です。
  • ここで説明されているように、非正規化から「マッピング」または「リンク」ドキュメントの作成まで、さまざまな手法を使用して交差を実行できます(および以下のアグリゲーターの例)。RDMS では、これは単純な「INNER JOIN」または「WHERE x IN」を使用して実行されます。
  • 減算(相対補数) は、私が行き詰まっているところです。RDMS では、この操作は単純に「WHERE x NOT IN」または結合セットが NULL の「LEFT JOIN」です。

実際の例を使用して、RSS アグリゲーター (Google リーダーなど) があり、数千のユーザー、それぞれのお気に入りのタグ付けなどを含む、数十億とは言わないまでも数百万の RSS エントリがあるとします。

この例では、エントリ、ユーザー、およびタグに焦点を当てています。ここで、タグはユーザーとエントリの間のリンクとして機能します。

user {string id, string name /*etc.*/}
entry {string id, string title, string url /*etc.*/}
tag {string userId, string entryId, string[] tags} /* (favourite, read, etc.)*/

上記のアプローチでは、タグを使用してエントリとユーザーの間の交差を簡単に実行できます。しかし、どのように減算を実行するかについて頭を悩ませることはできません。たとえば、「タグの付いていないすべてのアイテムを返す」、さらに困難な「タグのない最新の 1000 個のアイテムを返す」などです。

だから私の質問:

  • この件に関する読み物を教えてもらえますか?
  • タスクを効率的に達成する方法について、いくつかのアイデアを共有できます か?

注: ドキュメント データベースを使用するとクエリの柔軟性が失われることはわかっていますが、これを行う方法が必ずあるはずです。

4

2 に答える 2

2

Amok、あなたが望むことは、非リレーショナルデータベースでは本当に簡単に行うことはできません。主な理由は、彼らがセットで考えず、分散コンピューティングと強い結びつきを持っているからです。たとえば、すべてのデータにアクセスできなければ効率的なセットを実行することはできません。つまり、セットベースの操作ではすべてのデータにアクセスする必要があります。NoSQLデータベースは通常分散シナリオで使用されるため、実際にはそれをサポートできません。RavenDBは、具体的には、指定されたセットに対する一部の操作を許可しますが、他のドキュメントとの強い関係がない独立したドキュメント、または同じ方法ですべて一緒に操作する必要があるドキュメントを前提として強力に構築されています。

于 2011-07-19T10:16:32.707 に答える
0

RDBMSからドキュメントデータベースへの移行は完全にスムーズではなく、モデルを最適化するためにモデルへのリファクタリングが必要になる場合があります。これは、これらのテクノロジーの性質が異なるためです。

再。RavenDBでのセットベースの操作。以下を参照してください。

http://ayende.com/blog/4535/set-based-operations-with-ravendb

http://ravendb.net/documentation/set-based

于 2011-07-16T22:58:14.537 に答える