4

どの NoSQL データベースをお勧めしますか? また、スキーマは次の Web アプリケーション要件をどのように満たしますか?

  1. 多くのユーザーが存在する可能性があります(500k+)

  2. すべてのユーザーが自分のドキュメントを入力できます

  3. すべてのユーザーは、おそらく 1 か月あたり 10 ~ 200 のドキュメントを作成します。

  4. すべてのドキュメントは小さくなります (約 100 ワード)

  5. ユーザーは自分のタグでドキュメントにタグを付けることができます

  6. 別のユーザーからのデータは、他のユーザーおよびそのデータと相互作用しません

  7. ユーザーは自分のエントリをタグで検索できます

  8. 1 人のユーザーからすべてのエントリへの高速アクセス

  9. ユーザーは複雑な動的クエリを作成して、自分のデータをクエリできます

私の考えは、MongoDB を使用することです。しかし、私が見る問題は、 usersentryの 2 つのコレクションしかないことです。

1 つの巨大なコレクションをタグで検索するのは、私には悪い考えのように思えます。すべてのユーザーが独自のタグを持つことができるため、インデックスのサイズが非常に大きくなることが懸念されます。MongoDB はコレクション全体のタグ インデックスを作成しますが、私は常に、すべてではなく 1 人のユーザーのエントリのみをタグで検索します。

したがって、ユーザーごとのコレクションのアイデアはより適切に見えますが、作成できるコレクションの数には制限があるようであり、このアプローチも望ましくないようです。

CouchDB は動的クエリをサポートしていません...

これをMongoDBにどのように実装すればよいですか? または、より適切な NoSQL データベースを指定してください。

同様のアプリケーションの例: rememberthemilk、Trello、...

4

1 に答える 1

2

どの NoSQL データベースをお勧めしますか? また、スキーマは次の Web アプリケーション要件をどのように満たしますか?

私たちはそのためにここにいないので、あなたが尋ねたようにあなたのためにあなたのアプリケーションを定義するつもりはありませんが、あなたが実際にここで述べている問題と質問のいくつかに答えます.

すべてのユーザーが独自のタグを持つことができるため、インデックスのサイズが非常に大きくなることが心配です

確かに、ユーザーが適用できるタグの量を制限しない限り、インデックスのサイズはかなり大きくなる可能性があります。ほとんどのサイトでは、タグを最大 10 個までに制限していますが、場合によっては (ここでの質問のように) 5.

そのコレクションをクラスター全体で小さな断片にシャーディングすることを検討したい場合があります。適切に定義されたシャード インデックスに対するこれらのタグによるクエリは、決して遅くも悪くもありません。

タグ インデックスがシャード インデックスではない場合でも、非常に高速なグローバル スキャッター アンド ギャザー オペレーションを実行します (大規模なコレクションでのクエリの使用例は、http: //docs.mongodb.org/manual/core/shardingにあります)。 / )。

シャーディングは、膨大なサイズのインデックスを多くの汎用コンピューターに分散するのにも役立ち、コストを削減しながらデータの流れを維持できます。

したがって、最初に調べたいことは、シャーディングと、それがどのように役立つかです。この点で始めるのに適した場所は、ここにあります: http://docs.mongodb.org/manual/core/sharding/

したがって、ユーザーごとのコレクションのアイデアはより適切に見えますが、作成できるコレクションの数には制限があるようであり、このアプローチも望ましくないようです。

ロックはSQLとは異なりコレクションレベルではないため、実際にはDBレベルであるため、ロックの問題もあります(現在の「大規模な」インデックスのサイズに依存する名前空間の制限を忘れないでください)。多くの人がこの罠に陥ります。Facebook でない限り、99% のケースでは通常のセットアップで問題ないと述べたいと思いますが、それでも問題ないと思います。

同様のアプリケーションの例: rememberthemilk、Trello、...

私は実際に誰かに似たような質問をしてもらいました: Trello は MongoDB にデータをどのように保存しますか? (ボードごとのコレクション?)コメントを見ると、そこにもいくつかの助けがあるかもしれません。

于 2012-10-19T10:38:04.467 に答える