Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 08:36:12

Страниц: [1] 2 3
Печать
Автор Тема: Решил помучить вас- снова кэширование, снова мускул  (Прочитано 591 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexanderC    ↓ 
17 Май, 2011, 02:09:15
НЕ ХУЕТА! ХУЕТА!


Карма: 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 запрса который кешируем и под эим ключем сохраняем и возвращаем из кеша запросы.
 
например была функция
 
PHP
function dbExecute($sql)
{
   $q  = mysql_query($sql) or die("blead krivoi zapros");
   $data = array();
   while($r = mysql_fetch_assoc($q)) $data[] = $r;
 
   return $data;
}

переделываем на подобный лад
 
PHP
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.
Страниц: [1] 2 3
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd