Кэширование данных против записи в таблицу памяти - PullRequest
4 голосов
/ 09 октября 2009

Каким будет лучший способ получить быстрое хранилище хешей / сессий одним из этих трех способов?

Путь 1: Создайте таблицу памяти в MySQL, в которой будут храниться хеш и временная метка при создании записи. Событие MySQL автоматически удаляет все записи старше 20 минут. Это должно быть довольно быстро, потому что все данные хранятся в памяти, но издержки подключения к серверу базы данных могут разрушить это преимущество.

Способ 2: Я создаю пустой файл с хэшем в качестве имени файла и создаю cronjob, который автоматически удаляет все файлы старше 20 минут. Это может стать медленным из-за всех операций чтения с жесткого диска.

Путь 3: Поскольку это будет связано с PHP и мы будем использовать Zend Framework, я мог бы использовать Zend_Cache и хранить хэш с временем жизни 20 минут.

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

Есть ли у вас опыт работы с подобными сценариями? Буду признателен за ваш опыт и решения для этого.

Ответы [ 4 ]

1 голос
/ 10 октября 2009

Если производительность является проблемой, я бы с радостью пошел с memcached. Все крупные интернет-сайты используют memcached для кэширования, в противном случае требуются ресурсоемкие задачи сервера, или даже для механизмов хранения и блокировки сеансов.

Memcached - это путь, если вы спросите меня

0 голосов
/ 10 октября 2009

Как уже говорили другие, используйте memcached. Если бы PHP поддерживал пулы соединений с базами данных, как, например, Java, я бы порекомендовал MySQL, но PHP - это то, что есть, memcached - единственный реальный ответ.

0 голосов
/ 10 октября 2009

Считаете ли вы также проблемы масштабирования со всеми этими подходами? О скольких хешах вы говорите? Сколько мегабайт данных вы говорите?

  1. Держите его в памяти вашего компьютера, если можете (ваш вариант 3)
  2. Поместите его на диск, но, если можете, держите его в памяти (ваш вариант 2, если вы используете файловые сессии, вы можете использовать $ session, как кто-то указал)
  3. Использовать базу данных

У вас много данных? Используйте memcached.

0 голосов
/ 09 октября 2009

Не изобретайте велосипед - используйте memcache. Либо так, либо измерьте свою производительность MySQL против Memcache. Помните, что доступ к БД, как правило, всегда является узким местом в средах с высокой производительностью.

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