Карма: 1
Сообщений: 140 Сила слова: 0.71
|
Я конечно извеняюсь, но вот задумался серьёзно насчёт кэширования полученых из бд данных. Подумал так, и не верится что мускул будет сам справляться с кэшированием(даже если есть внутрение механизмы). Думаю над реализацией, а точнее архитектурой данной хрени.
Товарищи пыхеры и пыхершы(если такие имеются) помогите плз... Спустя 33 секунды добавил Хотябы добрым словом ;D Спустя 1 минуту 14 секунд добавил memcached и других серверов не представляется возможным подключить.
шаред мемори тоже вырублена(думаю и не помогло бы)
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
truth4oll ↓
|
 |
|
17 Май, 2011, 02:12:22 , спустя 3 минуты 7 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 15
Сообщений: 471 Сила слова: 3.18
|
файловый кеш?
|
|
|
|
|
Записан
|
План прост - потому красив
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 02:15:25 , спустя 3 минуты 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
рассказывать что есть несколько драйверов/подходов/хуевин для кеширования - содрагание воздуха, банально пречислю несоклько memcache, file cache, apc, eaccelerator, xcache, redis, memcachedb и прочие ...
у любой есть базовый одинаковый функционал - сохранение пачки данных и извлечение по "ключу", берем например ключем md5 от sql запрса который кешируем и под эим ключем сохраняем и возвращаем из кеша запросы.
например была функция
переделываем на подобный лад
function dbExecute ($sql, $cache = 0)
{
$md5 = md5($sql);
if($data = Cache:: get($md5))
{
return $data;
}
$q = mysql_query($sql) or die("blead krivoi zapros");
$data = array();
while($r = mysql_fetch_assoc($q)) $data[] = $r;
if($cache)
{
// key, data, expiretime
Cache:: set($md5, $data, $cache);
}
return $data;
}
ну и юзаем $topnews = dbExecute("SELECT * FROM news ORDER BY toppoints DESC LIMIT 50", 900);
и получили "кеширующую функцию для базы" ))))))
ну это так, на пальцах, щас придет главрыб и объяснит как правильно это делают опытные теоретики через zend_cache и прочую гламурную кисо
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
AlexanderC ↓
|
 |
|
17 Май, 2011, 02:27:28 , спустя 12 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 1
Сообщений: 140 Сила слова: 0.71
|
Ны это понятно, что файловых кэш.
Про ключи тоже, вот только если данные поменялись в базе, хотельсь бы кэш обновить...
я подумывал над тем чтобы хранить в подразделах, по таблицам. Допустим если таблица обновлена, то и кэш обновляется, а если нет то уже ищем по хэшу. Реализация драйвера в симбиозе с кэширующим механизмом это и есть главная идея реализации, вопрос только вот в эфективной системе учёта(и пливать что лишний цикл при обработки ответа мускула).
П.С. кстати die() тут бы Попов поддержал, правдо он бы добавил от себя mysql_error() ;D Спустя 1 минуту 42 секунды добавил жали конечно что доступа к рут нет, так бы воспользовался memcache в симбиозе с APC...
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 02:29:10 , спустя 1 минуту 42 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
AlexanderC, в браузере не удобно код писать, для отступов таб не работает - перекидыват на другие элементы, поэтому я обломался писать иф и трау эксепшн :-)
ну сделай Cache::clear($key = false);
и очищай по ключу ... для удобства я бы тогда завел удобные для веширования ключи, а не мд5, а то не удобно будет запрос вписывать в инвалидацию)) я ключи обычно делаю аля "$user#$id" ну и инвалидирую по ним, ну а без параметров например очищает все кеш пространство :-)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
AlexanderC ↓
|
 |
|
17 Май, 2011, 02:29:56 , спустя 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 1
Сообщений: 140 Сила слова: 0.71
|
Кстати ну нах погружать целый фрэймворк ради клэширование. Это извращение получится...
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
AlexanderC ↓
|
 |
|
17 Май, 2011, 02:50:28 , спустя 20 минут 32 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 1
Сообщений: 140 Сила слова: 0.71
|
А, и вот ещё- думал хранить кэшь тоже в базе(отдельную для него создать), потому как удобно структурировать и управлять...
Вопрос в том что целесообразно это или нет, ну и хватит ли мне TEXT или лучше хранить в бинарном виде?
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 02:56:44 , спустя 6 минут 16 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
Вопрос в том что целесообразно это или нет, ну и хватит ли мне TEXT или лучше хранить в бинарном виде?
абсолютно нецелесообразно. хранить в файлах - скорость работы будет раз так в 10 больше + на совсем простых страницах возможно вообще не придется подключаться к базе :-)
делают кеш специально чтобы разгрузить базу ... а ты в нее же родимую суешь ... база хорошо, но грузить ее пусть и однотипные пиздечки простыми запросами - смысла особого нет, лучше в файлы
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
AlexanderC ↓
|
 |
|
17 Май, 2011, 03:04:06 , спустя 7 минут 22 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 1
Сообщений: 140 Сила слова: 0.71
|
Мда, тут конечно прикланяюсь- хуйню начал нести ))))
Если для каждой таблицы создавать папку, и отдельно для таблиц кэш обновлять норм ?
Кстати для страниц есть отдельный файловый кэш, ток после манипуляций с базой данных он обновляется... Спустя 23 секунды добавил ... уже принялся за код...
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
AlexB ↓
|
 |
|
17 Май, 2011, 03:35:23 , спустя 31 минуту 17 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
memcached и других серверов не представляется возможным подключить.
Если у тебя серьезный проект, требующий кеширования - то это нелепая отмазка. Иначе никакого кеширования не надо.
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 03:38:22 , спустя 2 минуты 59 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
AlexB, да ладно тебе, не пугай человека)) не раз видел файловый кеш, который базу разгружает на 70-80% и в итоге все начинает летать :-)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
AlexB ↓
|
 |
|
17 Май, 2011, 03:43:15 , спустя 4 минуты 53 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
Про файловый кеш, предлагаю задуматься над таким вопросом - в момент когда один пользователь зашел на страницу первый раз - генерится кеш, в этот момент туда же заходит другой пользователь (кеш еще не сгенерен) и генерация запускается снова. Потом оба процесса одновременно предпринимают попытку записать в один файл. Спустя 1 минуту 18 секунд добавил
AlexB, да ладно тебе, не пугай человека)) не раз видел файловый кеш, который базу разгружает на 70-80% и в итоге все начинает летать :-)
Да я знаю, более того он у меня - основное кеширующее звено. Просто все эти отмазки про невозможно что-то поставить на мой взгдяд совершенно нелепы ...
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 03:44:49 , спустя 1 минуту 34 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
AlexB, а файл локи на что?)
можн вообще
мастер: залочил файл, начал обновлять, обновил кеш, отлочил файл
слейв: проверяет лок, если залочен - ждет, проверяет интервалами по 50 мс например, дождался когда файл разлочился, проверяет таймстапмы и тп, читает, если все валидно, то использует кешированную инфу.
профит)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
AlexanderC ↓
|
 |
|
17 Май, 2011, 03:45:48 , спустя 59 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 1
Сообщений: 140 Сила слова: 0.71
|
А как быть с файл локам ???
Проект для себя...
это не highload, но хост дерьмо, а на другой переходить лень(как обычно).
Если бы был серьёзным то там не ток кэширующий сервер нужен, но и подобающая архитектура, с маштабированием итдитп...
|
|
|
|
|
Записан
|
*Не всё Windows™ что виснет, не всё Linux что "да ну его..."
|
|
|
|
phpdude ↓
|
 |
|
17 Май, 2011, 03:45:56 , спустя 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
а так, ты просто перекладываешь 2 строки кода в мастере и вайл в слейве на мемкеш ... а если зашло 100500 пользователей?) по хорошему для сложных выборок надо все равно локи использовать, хоть на уровне мема хоть на уровне файлов, похуй где в общем то)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|