3

私のシステムには、短期間に多くのコメントが追加されるエンティティがあります。

ドキュメントを読んでその中の何かを変更すると、オブジェクト全体がストアに保持されるというのは正しいでしょうか?

これが正しければ、コメントを追加するためだけに 5000 個のコメントを含むオブジェクトを読み込んで保存するのは、少し多すぎるように思えますか?

各コメントをドキュメントとして保存し、ドキュメント コレクションをスキャンして特定のキーを探す必要がありますか? また、コメントをすばやく見つけて変更できるようにする必要もあります。

4

1 に答える 1

1

1 つの膨大なドキュメント

すべてのコメントを 1 つのドキュメントに保存したい場合、いくつかの問題が発生します。

  • 同時書き込み – 多くの読み取り操作と再試行操作を行う必要があります (最新の Etag ではありません)。
  • コメントを追加するために大きなドキュメントを読み込んでいます
  • 大きなドキュメントを読み込んでコメントを編集する

長所:

  • 1回の操作ですべてのドキュメントと一緒にメインオブジェクトを削除できます

複数のコレクション

私が推測する最良のオプションは、コメントとメイン オブジェクトを 2 つのコレクションに分割し、すべてのコメントを ID でメイン オブジェクトにリンクすることです。このようにして、単一のコメントを追加および編集したり、クエリによってすべてのドキュメントを取得したりできます。このようにして、たとえばコメント コレクションに対してより複雑なクエリを実行できます。たとえば、ユーザーごとにすべてのコメントを取得します。

短所:

  • すべてのコメントを含むメイン オブジェクトを削除すると、非常にコストがかかります (コメントを 1 つずつ削除する必要があります)。

OrderBy句はまだサポートされていないことに注意する必要がありますが、たとえば最後の 10 件のコメントなどを取得する際に問題が発生する可能性があります。

可能な代替

サポートしなければならない他の操作/クエリが何であるかわかりません。ただし、CRUD のみで、メイン オブジェクトのコメント リストを取得し、最後の x コメントを取得する可能性がある場合は、次の場合に Azure Table を使用することを検討できます。

  • 行キー – 衝突を避けるための時間ベースの識別子 (Unix エポック) + GUID
  • パーティション キー – メイン オブジェクト ID

このようにして、コメントエンティティを非常に高速に取得および更新し、時間ごとにクエリを実行できます

于 2014-11-07T17:14:50.913 に答える