Добавить новый осколок - всегда лучше?

В нашей настройке у нас в настоящее время есть 3 сегментированных кластера с набором сегментов, каждый из которых представляет собой набор реплик из 3. Наши записи собираются значительно увеличиться для реализации новой функции, и мы знаем, что дополнительные данные будут необходимы. Природа наших записей - в основном все upserts(которые, вероятно, будут обновления) и обновления, где мы увеличиваем определенное поле на 1.

Наши обновления всегда увеличиваются на 1, и то, как распределяются наши данные, не все документы обрабатываются одинаково, некоторые увеличивают свои поля намного больше. Альтернативное решение, которое, по моему мнению, может быть эффективным, состоит в том, чтобы иметь какой-то тип среднего человека, например, несколько баз данных Redis (или несколько небольших mongods), где мы обновляем их сначала и примерно через 5 минут (или используем какую-либо систему очередей), у нас есть кучка работников, которые потребляют данные и обновляют действующий кластер документами. Это сэкономит нашему основному кластеру тонну записей, поскольку позволит определенным тяжелым документам обновлений накапливать свои обновления и может сэкономить нам тонну записей (точные цифры я опубликую в скором времени в редактировании).

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

1 ответ

Redis, безусловно, можно использовать в качестве метода кэширования / обратной записи в MongoDB.

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

Также следует помнить о тенденциях блокировки записи в MongoDB. Mongo позволяет ядру управлять тем, что хранится в оперативной памяти, поэтому при выполнении upsert рекомендуется сначала прочитать объект (чтобы он был сохранен в оперативной памяти), а затем записать его. В противном случае блокировка записи будет длиться намного дольше в случае объектов, не входящих в рабочий набор, поскольку она устанавливает блокировку записи, затем читает документ с диска, записывает в документ (теперь в оперативной памяти), а затем освобождает замок. Все это менее навязчиво, если чтение (перенос объекта в ОЗУ) было выполнено до того, как произойдет блокировка записи.

Другие вопросы по тегам