私は成長し、(潜在的に)時間とともに改訂される時系列を持っています:
on "2013-01-01": データの最初のバージョン
"2013-01-01" 10
on "2013-01-02": 1 月 1 日のデータを 10 から 11 に修正
"2013-01-01" 11
on "2013-02-01": 2 月 1 日のデータの最初のバージョン
"2013 年 1 月 1 日" 11 "2013 年 2 月 1 日
" 20
on "2013-02-02": 2 月 1 日のデータを 20 から 21 に修正
"2013-01-01" 11
"2013-02-01" 21
最も頻繁なクエリ:
query1: すべての日付の最新バージョンを取得する
"2013-01-01" 11
"2013-02-01" 21
query2: 特定の日付で既知の時系列を取得します。
たとえば、"2013-02-01" でクエリを実行すると、
"2013-01-01" 11
"2013-02-01" 20を取得する必要があります。
query1 は query2 と同じですが、日付 = 現在の日付であることに注意してください
ドキュメントを構造化するのに助けが必要です。私はリレーショナルのバックグラウンドを持っているため、自分の構造が意味するものについて確信が持てません。私は基本的に2つの可能な構造を特定しました.フィードバックや他の構造の提案をいただければ幸いです.
オプション A: 個別のドキュメントの各リビジョン
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-01",
"value":10
}
{
"id":"1",
"date":"2013-01-01",
"version_date":"2013-01-02",
"value":11
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-01",
"value":20
}
{
"id":"1",
"date":"2013-02-01",
"version_date":"2013-02-02",
"value":21
}
オプション B: 1 つのドキュメントに 1 つの日付のすべてのリビジョンが含まれる
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
}
オプション B では、ドキュメントに成長部分があるため、更新クエリを実行するのが少し難しくなる可能性があるという事実も懸念しています。これは、mongodb によって十分にサポートされているか、最適化されているかどうかはわかりません。
編集:クエリ1を高速化するオプションCも検討しています:(ただし、書き込みが少し遅くなる可能性があります)
{
"id":"1",
"date":"2013-01-01",
"values" : [
{ "version_date":"2013-01-01",
"value":10
},
{
"version_date":"2013-01-02",
"value":11
}
"last_value":11
}
{
"id":"1",
"date":"2013-02-01",
"values" : [
{ "version_date":"2013-02-01",
"value":20
},
{
"version_date":"2013-02-02",
"value":21
}
"last_value":21
}