После того, как вы услышали много хорошего о производительности MongoDB, мы решили дать Mongodb попытку решить проблему, которая у нас есть. Я начал с перемещения всех записей, которые мы имеем в нескольких базах данных mysql, в одну коллекцию в mongodb. Это привело к созданию коллекции с 29 миллионами документов (каждая из них имеет не менее 20 полей), что занимает около 100 ГБ пространства в HD. Мы решили поместить их все в одну коллекцию, поскольку все документы имеют одинаковую структуру, и мы хотим запросить и агрегировать результаты по всем этим документам.
Я создал некоторые индексы для соответствия моим запросам, иначе даже простой счетчик() займет много времени. Тем не менее, запросы, такие как distinct() и group(), все еще занимают слишком много времени.
Пример:
// creation of a compound index
db.collection.ensureIndex({'metadata.system':1, 'metadata.company':1})
// query to get all the combinations companies and systems
db.collection.group({key: { 'metadata.system':true, 'metadata.company':true }, reduce: function(obj,prev) {}, initial: {} });
Я просмотрел журнал mongod и у него много таких строк (при выполнении запроса выше):
Thu Apr 8 14:40:05 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1048890 nreturned:417 154ms
Thu Apr 8 14:40:08 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1050205 nreturned:414 430ms
Thu Apr 8 14:40:18 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1049748 nreturned:201 130ms
Thu Apr 8 14:40:27 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1051925 nreturned:221 118ms
Thu Apr 8 14:40:30 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1053096 nreturned:250 164ms
...
Thu Apr 8 15:04:18 query database.$cmd ntoreturn:1 command reslen:4130 1475894ms
Этот запрос занял 1475894ms, что намного дольше, чем я ожидал (список результатов насчитывает около 60 записей). Прежде всего, это ожидалось, учитывая большое количество документов в моей коллекции? Ожидают ли, что запросы агрегирования в mongodb будут настолько медленными? Любые мысли о том, как я могу улучшить производительность?
Я запускаю mongod в одной машине с двухъядерным и 10 ГБ памяти.
Спасибо.