2013-12-02 2 views
2

Я записываю много информации о 8 машинах в осколком кластерном монгодбе. каждый день он выращивает около 500 тыс. документов в 3-х коллекциях. это 1 гб/день.советы по работе с миллионами документов?

моя структура:

  • 1 VPS 512mb RAM убунту // shardsrvr, configsrvr и маршрутизатор
  • 1 VPS 512mb RAM убунту // shardsrvr, configsrvr
  • 1 VPS 8gb RAM убунту // shardsrvr , configsrvr // первичный для всех коллекций

пока что ни одна коллекция не включена и никто не имеет набора реплик. Я только что установил кластер.

Так что теперь мне нужно запускать запросы во всех документах и ​​сборниках тезисов, чтобы получить различную статистику. это означает, что многие wheres, counts и т. д. ... Первый тест, который я сделал, - это объединение всех документов в одну коллекцию с PHP и печать идентификатора. это разбило первичный shardserver. , тогда я пробовал некоторые другие тесты, ограничивающие запросы документами 5k, и это работает ...

Мой вопрос - это лучший способ справиться с этой структурой.

  • включить очертание для коллекций?
  • создать набор реплик?
  • php способен это сделать? возможно, лучше использовать nodejs?
+0

Не могли бы вы описать крушение? Была ли трассировка стека? – ranman

ответ

1

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

Набор реплик только поможет вам с резервированием и доступностью данных. Если вы планируете, чтобы данные продолжали расти в долгосрочной перспективе, вы можете рассмотреть это как решение для аварийного восстановления.

С другой стороны, Sharding предоставит вам горизонтальное масштабирование и должно увеличить скорость ваших запросов. Поскольку запрос разбил ваш основной сервер осколков, я предполагаю, что данные, которые он пытался обработать, были слишком велики для того, чтобы он обрабатывал сам по себе. В этом случае это звучит так, как бы облегчая использование собранной коллекции, поскольку это будет распространять нагрузку на несколько серверов. Вы также должны учитывать, что индексы будут полезны для повышения эффективности запросов.

Однако вы должны учитывать, что осколки с вашей текущей настройкой означают более возможные точки отказа; если какой-либо из дисков поврежден, ваш весь набор данных будет уничтожен.

В конце концов, это может привести к тому, кто делает тяжелый подъем, PHP или Mongo?

Если вы просто делаете подсчеты и возвращаете большие наборы документов для обработки PHP, вы можете справиться с проблемами производительности, создав правильные индексы для своих запросов.

+1

«Набор реплик только поможет вам с избыточностью и доступностью данных.«Но поскольку он генерирует статистические данные, и если OP (или компания OP) может позволить себе сервер для набора реплик, он получает выгоду от использования репликации на сервер stat, а если сбой сервера stat, единственный основной недостаток, который я вижу (помимо служебных данных на репликации), заключается в том, что на сервере не будет резервной копии во время сбоя. Вероятно, это намного лучшая ситуация, чем сбой основного сервера! – JayC

+0

. помощь будет заключаться в том, что, как правило, есть гораздо больше запросов на чтение, чем запросы на запись, и если запросы на чтение могут быть распределены между серверами, возможно, путем настройки ваших клиентов для использования первичной записи и одного из нескольких второстепенных для чтения на http : //docs.mongodb.org/manual/applications/replication/ – JayC

Смежные вопросы