Задача: кешировать данные (самое оптимальное в виде таблиц) с условием, что данными активно пользуются много юзеров и все это множество часто делают обновления данных в базе (читайте часто обновляют/убивают кеш). И конечно же этом может происходить парралельно. Различных наборов данных (таблиц) может быть много (и по кол-ву типов, и по объему) и конечно данные разделяются по пользователям — у каждого группы пользователей свой кеш и упаси боже что бы кто-то/как-то мог влезть в чужой кеш. Зачем: кеш должен помочь снизить кол-во запросов к базе, соотв. повысить скорость обработки запросов. Речь именно не о кеше страниц. Проект обитает на амазоне.
Какое решение оптимальнее использовать для парсера? Поделитесь пожалуйста опытом.
Вчера читал статью на хабре с этим способом. Пока напрягает только то, что под хранение данных и кеша используется одно решение. И как все это поведет себя при нагрузках — не ясно. У меня проблем с ключами нет, в MEMORY таблицах я тож особо не узрел таких сложностей. Единственное конечно вопрос сериализци, идеально было бы повесить кеширование результов запросов минуя парсер. Т.е. идет сначала запрос к кешу, если его нет или он устарел — выполняется запрос по данным и его результат автоматом идет в кеш и отдается парсеру. Все что через парсер в данном случае как лишняя прослойка: xml не блещет скоростью, json в HEAD :-) (мне так и не удалось скомпилировать хеад на маке :-( приходится ждать релиза).
Да Миш, это факт, что по началу кеш не будет таким эффективным. Но особенность проекта в том, что со временем (через неделю/две/месяц) кол-во обновлений у группы пользователей резко будет падать, а кол-во использований будет возрастать. Именно поэтому кеш актуален.
Для распределения базы будет использоваться RDS. Пока мне известно 2 решения: в файлой системе и в memory таблицах. Файловая хороша тем, что весь инстанс в памяти, соотв. не так медленно, но как это поведет себя на коллективном обновлении — что-то очень сомнительно, что будет без проблем. Про memory таблицы написал коммент ниже: не очень нравится хранение данных и кеша в одном месте.
Пока напрягает только то, что под хранение данных и кеша используется одно решение. И как все это поведет себя при нагрузках — не ясно.
Не очень понимаю опасений. По мне так чем меньше разного софта, тем выше надежность. К mysql претензий по надежности не имеем. Вопрос скорее в том, сколько памяти вы готовы выделить под кеш. :)
Т.е. идет сначала запрос к кешу, если его нет или он устарел — выполняется запрос по данным и его результат автоматом идет в кеш и отдается парсеру.
Если вы кешируете то, что отдается браузеру (html), то никаких проблем нет - какой-нибудь nginx и вперед. Но мне показалось, что речь шла о таблицах, поэтому не очень понятно о чьих запросах в кеш идет речь.
(мне так и не удалось скомпилировать хеад на маке :-( приходится ждать релиза).
Посмотрим, что там может быть не так (видимо какие-то мелочи), плюс может бету соберем и для мака тоже.
Я уже давно "забил" на сборку Парсера под Мак. :) Во-первых это действительно несколько муторно - Эпл, как всегда, идет нестандартным путем. Во-вторых хостинг на маке мало у кого есть, поэтому возня с настройками отдельных конфигураций под мак и серверную систему не имеет особого смысла.
Именно поэтому я просто поднимаю на виртуальной машине (Parallels Desktop) FreeBSD и разрабатываю прямо в ней (TextMate через ssh). Видимо для AWS надо будет какой-нибудь Linux поднять, хотя по моим ощущениям для разработчика полезнее FreeBSD и ее система "портов". Это очень здорово приближает разработку к "боевой" конфигурации, что очень полезно.
Видимо это единственный путь для тех кто работает за маком
Но фак - параллелс это же еще то буэ, хотя вариантов судя по всему нет. На aws дебиан, но это не мешает вести разработку на маке — особой возни с конфигурацией как то не замечаю.
Ну ты понимаешь, что пока парсер с ним тесно не дружит — вариант с костылями особо не интересует. Давно пора включить в сборку патч Hexley. Вам оно конечно видней, но строить приложения на parser - python - memcached для работы с кешом мало кому захочется.