現在のアプリケーションにコメント セクションを実装しています。コメント セクションは、特定のページに対する一連のユーザー投稿と考えることができます。非リレーショナル データベース (Google App Engine) で最も効果的な設計はどれか考えています。
設計 1: コメントを groupId でグループ化し、それらの結果をフィルター処理する
Comment Entity >> [id, groupId, otherData...]
ページに関するすべてのコメントのクエリは次のようになります。
Select from Comments filter by groupId
設計 2: グループ内のすべてのコメントに対して 1 つのキーを格納し、エントリ数が 5000 エントリを超える場合は自己拡張リストを使用します。
Comment Entity >> [id, SELid]
クエリは単に ID/キー ルックアップを実行します。
インデックスが高価になる可能性があることは理解していますが、最初の設計提案では groupId フィールドのみをインデックス化し、コメントを投稿するために必要な書き込みは 1 回だけです (インデックスを含めると、より多くの書き込みが必要になります)。
2 番目の設計では、コストのかかるインデックス作成を回避できますが、投稿されたコメントごとに読み取り操作と書き込み操作が必要になります。さらに、競合の問題が心配です。これらのコメントで極端に高いスループットが発生することはないはずですが、2 番目の設計がボトルネックになっているようです。
私は非リレーショナル DB を初めて使用するので、これらの提案された設計とそれに関連するトレードオフについて意見をいただければ幸いです。