Есть таблица с 10 млн записями. В ней хранятся какие-то данные + key1 и key2. При каком-то действии на сайте на скрипт приходят два параметра param1 и param2. И надо проверить есть ли в базе строка удовлетворяющая условию key1=param1 and key2=param2. Если нет вставить эти параметры в таблицу.
Вопрос в следующем:
1) правильно ли будет хранить в Memcached саму таблицу целиком? Или лучше хранить ключи в виде $key = md5(serialize($options)), где $options описывает все параметры запроса.
2) Если хранить всю таблицу целиком, то каким образом затем проверять, что в Memcached есть ключ соответсвующий условию key1=param1 and key2=param2
1. В качестве ключа memcached можно использовать конкатенацию key1 и key2.
2. Вы уверены что вам нужен memcached? Выборка по ключу из таблицы в 10млн в MySQL не занимает много времени. Если составной индекс по key1+key2 есть.
Memcached я хотел использовать для перестраховки. Но если запрос тяжелый (который выполняется недопустимо долго). Я думал при тяжелых запросах заранее выгружать полученный массив данных из этого запроса в memcached и хранит его минут 10. Затем уже выводить эти данные из memcached, но как их выводить из memcached я пока не очень понимаю. Обходить как обычный массив? С memcached я еще реально никогда не работал, только читал. Поэтому может я вообще не верно рассуждаю. Хотелось бы узнать как делать правильно изначально.
@isawillbenice Что вы подразумеваете под тяжелым запросом? Ведь насколько я понял у вас запрос по условию WHERE key1=param1 AND key2=param2. При наличии составного индекса такой запрос летать будет.
При таком WHERE key1=param1 AND key2=param2 да. Про тяжелый запрос это уже вопрос на будущее был)) Поэтому я описал новую ситуацию при тяжелом запросе, как действовать в таком случае