2016-05-20 17 views
3

私はマップ上に表示するいくつかの追加プロパティを持つ地理空間的+時間的データのコレクションを持っています。コレクションにはこの時点で数百万のドキュメントがあり、時間の経過と共に成長します。MongoDBインデックス:複数の単一フィールド対単一の化合物?

各文書には次のフィールドがあります。

  • 場所:[にGeoJSONオブジェクト]
  • 日:[Dateオブジェクト]
  • ZoomLevel:[INT32]
  • EntryType:[オブジェクトID]

私は、このコレクションを場所(一般にgeowithinクエリ)、日付(一般的に$ gte/$ lt )、ZoomLevel、およびEntryType。

私が疑問に思っているのは、4つのフィールドすべて、またはフィールドごとに1つのインデックス、またはそれらの組み合わせを含む複合インデックスを作成する必要がありますか?

のみ2dsphereインデックスフィールドが インデックスは、ドキュメントを参照するかどうかを判断し、他の種類の キーと一緒に2dsphereインデックスキーを含み、複合インデックスの場合:私は、MongoDBのドキュメントに以下をお読みください。

... 2dsphereインデックスをLocationに持つことは、複合インデックスの一部であるという意味は無意味かもしれません。

これについての明確さは非常に高く評価されます。

答えて

2

複数のインデックスを使用する必要があります。

文書のすべてのフィールドをカバーする1つの索引を作成すると、索引に最初のフィールドが含まれている場合にのみ照会が使用できます。

これらの4つのフィールドの任意の組み合わせでクエリを行う必要があるため、データアクセスパターンを分析し、実際に使用しているフィルタを正確に確認し、それぞれのインデックスまたは特定のインデックスを作成することをお勧めします。

編集:2dsphereについてのご質問は、化合物を合成することに意味があります。

この注釈は 'sparse'オプションを指します。スパースインデックスは、インデックスフィールドを含むドキュメントのみを参照します.2dspheresの場合、除外されるドキュメントはgeojson/point配列を含まないドキュメントのみです。

+0

Aha! 2dsphereスパースオプションビットを指摘してくれてありがとう。今より意味をなさない。 – DanM

関連する問題