ほとんどの場合と同様に、私は 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 個のアイテムを返す」などです。
だから私の質問:
- この件に関する読み物を教えてもらえますか?
- タスクを効率的に達成する方法について、いくつかのアイデアを共有できます か?
注: ドキュメント データベースを使用するとクエリの柔軟性が失われることはわかっていますが、これを行う方法が必ずあるはずです。