バックグラウンド
各列に名前を付けて、テーブル行を MongoDb ドキュメントとして保存しています。テーブルに対象の列があるとしましょう: Identifier
、Person
、Date
、Count
。MongoDb ドキュメントには、テーブル データとは別に、 で表されるいくつかの追加フィールドもありますtimestamp
。列は固定されていません (これが、最初にスキーマフリー データベースを使用して列を格納する理由です)。
さまざまな複雑なクエリを実行する必要がありますが、これまでのところ特定されていません。クエリのパフォーマンスがボトルネックになることは考えられますが、パフォーマンスについてはあまり心配していません。挿入されると、ドキュメントは変更されず (同じドキュメントがIdentifier
代わりに作成されます)、挿入はそれほど頻繁ではありません (たとえば、1 日あたり 1000 個の新しい MongoDb ドキュメント)。そのため、データ量は時間の経過とともに着実に増加します。
例
簡単なアプローチは、次のような MongoDb ドキュメントのコレクションを持つことです。
{
_id: XXXX,
insertDate: ISODate("2012-10-15T21:26:17Z"),
flag: true,
data: {
Identifier: "AB002",
Person: "John002",
Date: ISODate("2013-11-16T21:26:17Z"),
Count: 1
}
}
オブジェクトごとに 2 つのフィールドを持つ配列を使用して、別のアプローチ (たとえば、この質問の受け入れられた回答) を見てきました。
{
_id: XXXX,
insertDate: ISODate("2012-10-15T21:26:17Z"),
flag: true,
data: [
{ field: "Identifier", value: "AB002" },
{ field: "Person", value: "John001" },
{ field: "Date", value: ISODate("2013-11-16T21:26:17Z") },
{ field: "Count", value: 1 }
]
}
質問
2番目のアプローチはまったく意味がありますか?
はいの場合、どちらを使用するかをどのように選択しますか? 特に、あるアプローチでは簡単/安価で、別のアプローチでは困難/コストがかかる特定の種類のクエリはありますか? どちらに進むべきかについての「経験則」、または両方の賛否両論のリストはありますか? 1 つのアプローチが不便である実際のケースの例は、特に価値があります。