Может ли база данных на основе памяти заменить необходимость кэширования? - PullRequest
5 голосов
/ 18 сентября 2011

Mysql имеет механизмы обработки данных на основе памяти, что означает, что он хранит данные в оперативной памяти.

Насколько мне известно, в Mysql есть два типа механизма хранения памяти,

Одним из них является сам двигатель памяти Не очень интересная особенность этого механизма хранения заключается в том, что он создает только виртуальные таблицы, что означает, что при перезапуске сервера данные теряются

Другой механизм хранения кластера У этого недостатка нет предыдущего движка, он использует память, но также ведет запись данных на основе файлов.

Теперь вопрос состоит в том, использует ли ваша База данных ОЗУ для хранения и обработки данных, нужно ли добавить еще один механизм кэширования, такой как Memcached, чтобы повысить производительность вашего продукта?

Насколько быстро работает база данных с памятью по сравнению с Memcached?

Добавляет ли Memcache какие-либо функции в ваши продукты, которых нет в базе данных с памятью?

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

Я что-то упустил?

Ответы [ 3 ]

4 голосов
/ 18 сентября 2011

Зависит от того, как вы используете memcached. Если вы используете его для кэширования отображаемой HTML-страницы, для создания которой потребовалось 30 SQL-запросов, это даст вам повышение производительности даже по сравнению с базой данных в памяти.

1 голос
/ 18 сентября 2011

A (реляционная) база данных и служба кэширования дополняют друг друга. Как уже указывалось, у них разные цели проектирования и варианты использования. (И все же я нахожу основное преимущество базы данных, отсутствующей в посте.)

Memcached (и другие кэши) предлагают некоторые преимущества, которые не могут быть реализованы в модели базы данных ACID . Это компромисс, но такие кэши предназначены для максимального распределения и минимальной задержки. Memcached - это , а не база данных : это распределенное хранилище значений ключей с некоторыми политиками выселения. Поскольку это просто хранилище значений ключей, оно может «пропустить» многие этапы запроса данных базы данных - дорогостоящим способом только прямой поддержки операций 1-1. Нет соединений, нет отношений, один результат и т. Д.

Помните, кеш - это просто кеш. Он не является надежным хранилищем информации и не обеспечивает целостности / согласованности данных, обнаруженных в (реляционной) базе данных. Даже системы кэширования, которые могут «сохранять» данные, не обязательно имеют гарантии ACID (черт, даже MyISAM не является полностью ACID!). Некоторые кеш-системы предлагают гораздо более сильные гарантии синхронизации / согласованности; memcached - не такая система.

Суть в том, что из-за простого дизайна и модели memcache, выиграет в задержке и распределении по области, в которой работает. Сколько? Ну, это зависит ...

... сначала выберите подход (ы) с необходимыми характеристиками и гарантиями, а затем эталон подходами, чтобы определить, какие из них подходят (или "лучше всего подходят" ") для задачи. (Может даже не быть необходимости использовать кеш или «базу данных памяти» вообще, или лучшим подходом может быть использование конструкции «без SQL».)

Счастливого кодирования.

1 голос
/ 18 сентября 2011

Memcached может хранить до 1 МБ данных. Что он делает, так это использует нагрузку на базу данных таким образом, что вы даже не подключаетесь к базе данных, чтобы запросить у нее данные. Большинство веб-сайтов имеют небольшой объем данных, которые они отображают пользователю (с точки зрения текстовых данных, а не самих файлов).

Итак, чтобы ответить - да, неплохо было бы использовать Memcached, поскольку он может помочь вам, так что вы даже не подключаетесь к БД, что снимает некоторые накладные расходы при запуске.

С другой стороны, для MySQL доступно множество движков. Лично я бы не стал использовать движок памяти по многим причинам, одной из которых является потеря данных. InnoDB, движок MySQL по умолчанию по состоянию на недавний выпуск, уже хранит рабочий набор данных в памяти (управляемый переменной innodb_buffer_pool), и это невероятно быстро, если набор данных может поместиться в памяти. Есть также движок TokuDB, который превосходит InnoDB по масштабированию, и лучше, чем движок памяти. Однако всегда полезно кэшировать данные, к которым часто обращаются и которые редко изменяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...