Что может вызвать один и тот же запрос к одинаковым коллекциям, которые проиндексированы одинаковым образом, чтобы вернуть разные результаты? - PullRequest
1 голос
/ 24 августа 2011

Я и мои товарищи по команде используем mongodb 1.8.2.Две из трех сред работают нормально при выполнении следующего геопространственного индексированного запроса:

db.runCommand( {geoNear: "places", near: [-46.65069190000003, -23.5633661],
                maxDistance: 0.0006278449223041908, spherical: true,
                distanceMultiplier:  6371.0 });

для следующей коллекции из 4032 документов:

{
  "ns" : "places",
  "count" : 4032,
  "size" : 1645724,
  "avgObjSize" : 408.1656746031746,
  "storageSize" : 2785280,
  "numExtents" : 4,
  "nindexes" : 2,
  "lastExtentSize" : 2097152, 
  "paddingFactor" : 1,
  "flags" : 1,
  "totalIndexSize" : 344064,
  "indexSizes" : {
    "_id_" : 180224,
    "location_2d" : 163840
  },
  "ok" : 1
}

, выполняющих его в двух разных экземплярах mongodb (один OSX Lion, другой сервер Ubuntu 11.04) набор результатов содержит 100 записей со следующей статистикой выполнения:

"stats" : {
   "time" : 0,
   "btreelocs" : 522,
   "nscanned" : 522,
   "objectsLoaded" : 146,
   "avgDistance" : 0.4824636947838318,
   "maxDistance" : 0.00012637762666867466
},

(пока все в порядке: запрос использует индекс, как вы можете видеть по количеству btreeходьба по узлу)

НО в одной из сред (другая OS X Lion) результаты резко отличаются (3 вместо 100 от других машин) с точно таким же набором данных и индексами:

"stats" : {
  "time" : 0,
  "btreelocs" : 45,
  "nscanned" : 50,
  "objectsLoaded" : 6,
  "avgDistance" : 0.865580980499049,
  "maxDistance" : 0.0001845858750423995
},

Заметно, что запрос выполняется по-другому в этом экземпляре mongod.Я хотел бы знать, какие факторы могут это сделать

То, что я до сих пор пробовал:

  • Серверные и клиентские версии Mongodb одинаковы (включая git-хэш)
  • Предположительно странная база данных была стерта, восстановлена ​​из дампа BSON и воссозданы индексы

Информация о версии:

db version v1.8.2, pdfile version 4.5
Tue Aug 23 23:33:22 git version: 433bbaa14aaba6860da15bd4de8edf600f56501b

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Так что я на самом деле задаюсь вопросом о целостности данных здесь. «Плохой» набор данных в основном занимал одну десятую часть работы хорошего набора данных. Как будто он просто решил прекратить на полпути и не сказать вам, что происходит.

MongoDB имеет команду validate, которая может перепроверить целостность коллекции. Сможете ли вы запустить это и посмотреть, если что-нибудь произойдет?

Ссылка на команду здесь .

0 голосов
/ 24 августа 2011

Если возвращаемое число ровно 100, то я подозреваю, что ваши наборы результатов отличаются, поскольку на указанном расстоянии более 100 точек.Поэтому БД может выбрать только первые 100 баллов, которые соответствуют критериям.

Есть ли способ увеличить размер результата примерно до 2000 или уменьшить расстояние до чего-то меньшего.

...