Я использую 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.
Это разумное решение? Или это дает мало пользы? Или все это обрабатывается для меня, когда я перехожу к репликации и оштрафован дополнительным оборудованием?
Старый пост, но я думаю, что все еще справедливо для комментариев: Одно большое преимущество в решении разделенных коллекций состоит в том, что коллекции чтения и записи могут иметь отделенные индексы. Что-то, что реплики и осколки не поддерживают в моих знаниях. В вашем сообщении содержатся «логические причины ... приложение/схема дизайна», в котором также содержатся индексы, но я думаю, что стоит также прямо упомянуть об этом. – kaskelotti
Действительно, хорошо заметить, что поведение блокировки сильно изменилось, так как этот ответ, который делает мой ответ недействительным (я думаю, что на самом деле не перечитал его) – Sammaye