Я перестраиваю свой сайт, который является поисковой системой для прозвищ с самого активного форума во Франции: вы ищете прозвище, и у вас есть все его сообщения.Mongodb: большая структура данных
Текущая база данных содержит более 60 ГБ данных, хранящихся в базе данных MySQL. Теперь я переписываю его в базу данных mongodb, и после извлечения 1 миллиона сообщений (1 сообщение = 1 документ) find() начал занимать некоторое время.
Структура документа как таковой:
{
"_id" : ObjectId(),
"message": "<p>Hai guys</p>",
"pseudo" : "mahnickname", //from a nickname (*pseudo* in my db)
"ancre" : "774497928", //its id in the forum
"datepost" : "30/11/2015 20:57:44"
}
Я установить идентификатор Анкр, как уникальный, так что я не получаю в два раза один и тот же вход.
Затем пользователь вводит псевдоним и находит все документы, имеющие этот псевдоним.
Вот запрос:
Model.find({pseudo: "danickname"}).sort('-datepost').skip((r_page -1) * 20).limit(20).exec(function(err, bears)...
Должен ли я структурировать его по-другому? Вместо того, чтобы иметь один документ для каждого сообщения, у меня есть документ для каждого псевдонима, и я обновляю документ, как только получаю новое сообщение от этого псевдонима?
Я использовал первый метод с MySQL, и это не так долго.
Редактировать: Или, может быть, мне нужно просто индексировать ники (pseudo)?
Спасибо!
Вы должны добавить индекс в 'pseudo'. Оформить этот пост здесь, в частности, области избирательности: http://stackoverflow.com/questions/33545339/how-does-the-order-of-compound-indexes-matter-in-mongodb-performance-wise/33546159 # 33546159 – inspired
Обратите внимание, что 'skip' фактически должен анализировать файлы, которые он пропускает, поэтому, если' r_page' действительно большой, то 'skip' нужно будет перепрыгнуть через кучу документов. –
Ahah Я полностью забыл об индексировании прозвища. Спасибо, я попробую сейчас. – Sinequanon