Подтвердить что ты не робот

Рекомендуется ли Memcache при использовании MongoDB?

Я хотел бы знать, рекомендуется ли Memcache при использовании базы данных NoSQL, такой как mongoDB.

4b9b3361

Ответ 1

Концепция использования memcache проистекает из идеи, что у вас есть "дополнительная RAM", сидящая где-то. И MongoDB, и MySQL (и большинство БД) будут принимать каждую мегабайт ОЗУ, которую они могут получить.

В случае с очень распространенным MySQL/Memcache, очень хорошо документировано, что использование Memcache больше связано с уменьшением загрузки запросов на сервере, чем с ускорением запросов. Хорошая реализация memcache в основном просто пытается сохранить наиболее распространенные данные в памяти, чтобы сервер базы данных мог отбросить большие файлы.

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

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

Если у вас есть дополнительная оперативная память на веб-серверах, вы можете использовать Memcache. Конечно, вы также можете запустить Mongo локально на веб-сервере. Просто ведите данные, которые вам нужны от мастера.

Если у вас есть дополнительная оперативная память на других компьютерах, то нет смысла использовать memcache. Просто добавьте больше узлов в набор реплик MongoDB или осколок. Именно здесь на самом деле сияет MongoDB. Из-за sharding/replication вы можете добавить больше RAM в Mongo Horizontally для повышения производительности. С SQL очень сложно "просто добавить больше серверов", потому что объединения не очень хорошо масштабируются. Но с Mongo вполне возможно просто "добавить больше узлов" к проблеме.

Ответ 2

MongoDB все равно сохраняет все в памяти и работает аналогичным образом, будучи основанной на значении ключа системой, однако я считаю, что MongoDB более гибкий, поскольку он позволяет хранить объекты BSON внутри себя.

(Только для пояснения, MongoDB использует BSON, специализированную форму JSON, для хранения всех своих данных, которая включает объекты внутри объектов.)

Ответ 3

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

Ответ 4

Ответ будет зависеть от ваших вариантов использования.
В общем, доступ к ОЗУ на порядок быстрее, чем доступ к диску.
Даже самые быстрые SSD-накопители примерно в 100 раз медленнее, чем RAM.

Теперь я не знаю, есть ли у Монго система кэширования (скорее всего, это так) или политика выселения, но как программист я бы предпочел кеш, в котором я могу хранить/извлекать и удалять элементы по желанию. Поэтому я бы предпочел использовать кэширующее решение даже с Mongo.

В целом, это действительно зависит от того, для чего вы используете эти решения. Нет ответа на все возможные варианты использования.