2014-01-09 2 views
1

Я использую mongodb и хочу создать базу данных для удовлетворения высоких требований к масштабируемости. В настоящее время, скажем, коллекция A в значительной степени используется для чтения и записи. Запись будет означать блокировку (теперь блокировка базы данных, надеюсь, сбор блокировки в будущих выпусках), блокировка операций чтения.MongoDB: отдельные коллекции для чтения и записи для высокой производительности

Моя идея состоит в том, чтобы дублировать A в A и A-tmp, где обе имеют одну и ту же схему. A хранит все данные, а A-tmp изначально пуст. Новые записи вставляются в A-tmp. Использование записей cronjob из A-tmp периодически перемещается в A. Когда приложение пытается найти данные после записи, будет выглядеть в A, и если данные не будут найдены впоследствии, посмотрите в A-tmp. Таким образом, A-tmp в основном используется для записи и иногда читается, когда записи не найдены в A. A в основном используется для чтения и периодически записывается в A-tmp.

Это разумное решение? Или это дает мало пользы? Или все это обрабатывается для меня, когда я перехожу к репликации и оштрафован дополнительным оборудованием?

ответ

2

Запись будет означать блокировку (теперь блокировка базы данных, надеюсь, сбор блокировки в будущих выпусках), блокировка операций чтения.

Это не просто автоматически блокировать чтение, блокировка писатель жадный, но есть правила спадать для чтения и т.д.

Я только де-факто вставить эту ссылку: http://docs.mongodb.org/manual/faq/concurrency/

Использование записей cronjob из A-tmp периодически перемещается в A.

Звучит просто.

Или это дает мало пользы?

Теперь хорошо отметить, что в вашем названии упоминается «db», но ваш вопрос упоминается как A и A-tmp как коллекции.

Я положу основы коллекций.

Нет, нет никакой выгоды для их разделения, если не существует серьезной логической причины относительно того, почему, то есть дизайн приложения/схемы.

Или все это обрабатывается для меня, когда я перехожу к репликации и оштрафованию с помощью дополнительного оборудования?

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

Это совершенно разные вещи.

+0

Старый пост, но я думаю, что все еще справедливо для комментариев: Одно большое преимущество в решении разделенных коллекций состоит в том, что коллекции чтения и записи могут иметь отделенные индексы. Что-то, что реплики и осколки не поддерживают в моих знаниях. В вашем сообщении содержатся «логические причины ... приложение/схема дизайна», в котором также содержатся индексы, но я думаю, что стоит также прямо упомянуть об этом. – kaskelotti

+0

Действительно, хорошо заметить, что поведение блокировки сильно изменилось, так как этот ответ, который делает мой ответ недействительным (я думаю, что на самом деле не перечитал его) – Sammaye

2

В вашем случае это не похоже на то, что отличается от high-availability replication, поскольку набор реплик даст вам желаемое поведение для A-tmp, которое является таким же поведением для вторичных узлов в наборе реплик. Вам потребуются дополнительные аппаратные средства, но оперативное использование набора реплик будет намного проще, чем управление заданием cron.

В сценарии высокой готовности с MongoDB вы должны подумать о том, какой уровень отказоустойчивости вы хотите поддержать или сколько членов может стать недоступным, прежде чем набор не сможет выбрать новый первичный. Это и ряд других проблем HA: documented here.

+0

Я считаю, что это хорошее решение, так как новое оборудование потребуется в любом случае, когда все больше и больше пользователей прибудут. Итак, если я правильно понимаю, основной будет для всех записей (т. Е. Мой A-tmp), в то время как все второстепенные будут в основном использоваться для чтения (то есть A). Я понимаю, что будет отсрочка для повторения данных от первичного до вторичного. – Se7enDays

+0

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

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