2012-01-25 8 views
6

優れているものを、私はIDを持っていると私は毎日、このユーザーには歴史的な記録(文書)を格納するユーザーを持っていると仮定すると:MongoDB履歴データストレージ - ベストプラクティス?

  • レコードごとに新しいドキュメントを作成して、ユーザーを検索id;または
  • このデータを更新し、時間の経過と共に成長し続ける1つのユーザー文書に埋め込むことができますか?

ほとんどの場合、ユーザーの現在のドキュメントのみを取得する必要がありますが、すべてのレコードはスーパーロング検索/クエリなしでいつでもアクセスできる必要があります。

+0

ほとんどの場合、現在のドキュメントだけを欲しいと思っている人は、「超ロング検索/クエリなしで」*「*」検索できることにもっと関心があるはずです – APC

+0

はい、私は思っていましたが、これは実際に正しいアプローチです(編集にも感謝します) –

答えて

3

このような決定に影響を与える変数はたくさんあります。 1つの大きなドキュメントは、それが非実用的に大きくなったり、サイズが許されないサイズになったりすることがない限り、最も明白です(ドキュメントのサイズは最大16MBです)。

エントリごとのドキュメントを使用することも完全に実行可能であり、適切なインデックスを作成してもクエリが遅くならないようにする必要があります。

4

文書の大きさには限界があります。それは(v1.8時点で)16 MBです。したがって、&埋め込みを更新すると、部屋を使い果たすことができます。また、mongoは、コレクション内の平均ドキュメントサイズに基づいてドキュメントスペースを割り当てます。調整/サイズ変更を続けると、パフォーマンスにマイナスの影響が出る可能性があります。

レコードごとに新しいドキュメントを作成し、そのデータを照合する場合はマップ/リダクションジョブで行うほうがずっと安全だと思います。

+3

サイズ制限は1.8から16MBです;) –

+0

更新されました。ありがとう。 – z5h

+0

あなたの答えに感謝します。両方の返信が同じ品質(IMHO)であるので、私はレモンズを1つだけマークアップします。これは現在、あなたはもう1つのアップヴォートを持っており、ポイントも少なくなっています。あなたの答えはまだ非常に高く評価されています。 –