alexkuklin: (Default)
alexkuklin ([personal profile] alexkuklin) wrote2009-02-03 04:30 am

(no subject)

Есть ли хоть одна причина не использовать storage engine MEMORY для хранения сессий на сайте при условии наличия достаточного количества памяти?....
sanmai: (Canon)

[personal profile] sanmai 2009-02-03 02:21 am (UTC)(link)
Зачем использовать это когда есть memcached?..

Кроме того, тебе может пригодиться переменная max_heap_table_size.

[identity profile] alexkuklin.livejournal.com 2009-02-03 02:26 am (UTC)(link)
затем, что код переписывать я не буду.
а вот alter table - сделать могу легко.
sanmai: (Hw details)

[personal profile] sanmai 2009-02-03 02:28 am (UTC)(link)
Тогда читай про max_heap_table_size, чтобы та таблица всю память внезапно не съела.

[identity profile] alexkuklin.livejournal.com 2009-02-03 02:36 am (UTC)(link)
эт я знаю...

[identity profile] mkevac.livejournal.com 2009-02-03 06:12 am (UTC)(link)
Ну а зачем использовать memcached, если, например, машина всего одна?

[identity profile] kirill a. korinskiy (from livejournal.com) 2009-02-03 04:35 pm (UTC)(link)
Как временную помойку в памяти, например?

на frontend приходят за объектом, он ищет его в memcache и если не нашел просит backend сгенерировать его.

[identity profile] mkevac.livejournal.com 2009-02-03 07:53 pm (UTC)(link)
Если машина одна, то сетевое соединение - лишний оверхед. Тот же MySQL через сокет или внутрипроцессный кэш будут на порядки быстрее.

[identity profile] kirill a. korinskiy (from livejournal.com) 2009-02-03 08:28 pm (UTC)(link)
1) как вы хотите работать через «внутрипроцессорный кэш»?

2) Соеденение через unix-сокет к mysql лишний оверхед тоже, даешь свою структуру данных!

Вообще плюс этого всего что оно уже есть, написано и отлажено. А еще оно работает и есть примеры как их состыковывать. Написать можно все самому, но сразу возникает вопрос о времени и трудозатратах на поддержку.

Решение nginx + memcached + масенький скрипт на php/python + mysql в поддержке много проще, чем все свое.

[identity profile] mkevac.livejournal.com 2009-02-03 08:35 pm (UTC)(link)
1) внутриПРОЦЕССный
2) Да. Лишний. Потому я сказал что лучше внутриПРОЦЕССный. Например berkleydb.

berkleydb тоже написан и отлажен. А memcached нужен только в случае DHT (Distributed Hash Table). Когда нужен ОДИН кэш, ОБЩИЙ кэш, но при этом распределённый по нескольким машинам. Если же у вас не более одной машины, то memcached не нужен.

В список рассылки memcached и libmemcached почти каждую неделю приходят с такими вот идеями и сами разработчики им говорят что memcached им не нужен.

[identity profile] kirill a. korinskiy (from livejournal.com) 2009-02-03 09:14 pm (UTC)(link)
1) внутриПРОЦЕССный

Приношу извенения, не так прочел.

2) Да. Лишний. Потому я сказал что лучше внутриПРОЦЕССный. Например berkleydb.

А чистить его кто будет? Мы сами ручками? А не проще тогда уж memcache интегрировать в приложение и использовать его как кеш? Ну и приложение в веб-сервер интегрировать, что бы не мучаться с оверхедом при передачи данных?

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

[identity profile] mkevac.livejournal.com 2009-02-03 09:26 pm (UTC)(link)
Ну LRU алгоритм не так уж и сложно запрограммировать. Да и я не сомневаюсь что уже существует куча готовых решений. Не исследовал подробно, так что не могу назвать конкретных представителей.

Не стоит идеализировать memcached. Это всего лишь неплохой hash table с LRU алгоритмом очистки и доступом по сети. Прелесть memcached в его связке с клиентскими библиотеками, которые и реализуют DHT (распределение ключей по различным серверам).

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

[identity profile] rusec.livejournal.com 2009-02-03 05:51 am (UTC)(link)
Одна есть:

ALTER TABLE `sessions` ENGINE = MEMORY
Ответ MySQL:
#1163 - The used table type doesn't support BLOB/TEXT columns

[identity profile] kirill a. korinskiy (from livejournal.com) 2009-02-03 11:45 am (UTC)(link)
Нельзя пережить без этого? не верю...

[identity profile] rusec.livejournal.com 2009-02-03 04:09 pm (UTC)(link)
Как учит нас Алекс чуть выше:

затем, что код переписывать я не буду.
а вот alter table - сделать могу легко

[identity profile] kirill a. korinskiy (from livejournal.com) 2009-02-03 04:16 pm (UTC)(link)
А разве есть увереность что у него есть blob/text?

[identity profile] maravan.livejournal.com 2009-02-04 09:45 am (UTC)(link)
а есть уверенность, что нет?

[identity profile] alexkuklin.livejournal.com 2009-02-04 09:48 am (UTC)(link)
вообще-то в таблице php-шных сессий не используются блобы..

[identity profile] maravan.livejournal.com 2009-02-04 09:50 am (UTC)(link)
тьфу блин, пропустил мимо мозга, что это не общий случай, а именно частный с сессиями.