Кэширование многомиллионной базы MySQL

топ 100 блогов ru_highload04.03.2010 Есть MySQL база со 100 миллионами записей (телефонные номера).
Стоит задача придумать оптимальный способ кэширования.

Имхо, memcache не совсем подходит, так как записей в таблице очень много, и memcache их всех в памяти держать не сможет. Еще один нюанс - не будет такого, что один номер телефона будет искаться часто (то есть, не будет такого, что один номер будут искать 10000 раз в сутки, а другой - 1). Распределение между номера будет более-менее равномерным.

Подумав, я пришел к следующему варианту. Допустим, есть URL вида "site.ru/1234567.html". Настраиваем Apache так, чтобы он отдавал реальный файл по этому адресу (если файл существует), если файл не существует - идет перенаправление на скрипт, который делает запросы в базу, отрисовывает страничку и сохраняет ее. Когда следующий посетителей зайдет на эту же страничку, то Apache отдаст ему уже созданный файл.
Какую-то динамику (допустим, комментарии) можно подгружать через AJAX.

Собственно, вопросы:
1) Верны ли мои рассуждения о memcache?
2) Какие недостаки у предложенного мной метода?
3) Подойдет ли под эту схему Apache, или какой-то другой веб-сервер будет эффективней?
4) Может быть, существуют способы лучше, чтобы справиться с этой задачей?

Update:
Планируемая посещаемость - один миллион посетителей в сутки.

Опишу задачу:
- Есть база телефонных номеров
- Есть база людей.
На один телефонный номер могут быть привязаны несколько людей. Также есть "история" номера (какие люди были к нему привязаны в прошлом).
Необходимо осуществлять 2 вида поиска - по номеру телефона и по фамилии человека. Оба вида поиска в итоге должны отображать (или вести на) страницу телефонного номера. Грубо говоря, весь сайт - это страницы вида .ru/1234567.html, .ru/2234567.html, и тд.

Чтобы избежать JOIN'ов, я пришел к такому решению:

В таблице phone_numbers создаем поля 'owners' и 'owners_archive' (соответсвенно, текущие "владельцы" и прошлые"). В них хранятся сериализованные массивы данных о людях (имя, фамилия, номера аккаунтов в социальных сетях, и тд.).

В таблице persons в одном поле через запятую храним все номера телефонов, привязанные к этому человеку.

Если ищем по телефоному номеру, то все данные берутся через один запрос из таблицы phone_numbers.
Если ищем по фамилии, то через один запрос из таблицы persons получаем все номера телефонов и выводим прямые ссылки на них.

Update 2:
Да, доля апдейтов/инсертов будет ничтожна по сравнению с селектами.

Оставить комментарий

Предыдущие записи блогера :
Архив записей в блогах:
А у моей сестры еще цветут астры, последний летний привет.. Осенние астры от лета привет, Глядят из под листьев опавших. Они как салют,они фейерверк И память о лете вчерашнем. Каких только нет сейчас сортов Махровые,белые,красные. Не боятся осенних они холодов, И осенью нет их ...
Но вполне правдоподобно (особенно учтывая нравы Павла Петровича): http://xlt.narod.ru/texts/brown06.html Сам термин "необходимая оборона" впервые появился в указе Павла I (которого наши граждане часто представляют чуть ли не полусумасшедшим) и означал он совсем ...
Мне предложили такую пряжу - lineapiu-nido. Расцветка примерно такая (фото из сети): Отзывов начиталась хороших массу. А вот связанного из неё в сети нашлось мало, и как-то всё не очень, чтобы очень. Может кто-то связал из этой Нидо чудесную вещь? Покажите, ...
Я, если честно, очень удивился, когда узнал кому принадлежит эта недвижимость. Перед вами на фото дачный домик Ангелы Меркель. Стоит отметить, что он является единственной загородной недвижимостью во владении четы Зауэр–Меркель. Мне понравилось, как его громко называют в интернет ...
БЕЗ Без извинения, Без продолжения, Без надежды на нажать кнопку DELETE , Без сомнения, Без удивления, Без понимания света, Или тьмы, без, Без всякой и мастерской боли, Без желания лучшей роли, Без возрождения, И без ...