![]() |
Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
|
![]() |
#1 | ||
Senior Member
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
|
![]()
Эээээ...
Не думал, что когда нибудь такое скажу... НО мне даже очень понравилось кэширвоание на основе БД.... ![]() ![]() ![]() Как ни будь расскажу почему (единственный минус конечно когда на хостингах жмешь кнопку рез. копии, то база вся дампится)... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
|
![]()
Даже smarty - кэш переведу на БД (с такой возможностью)...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
|
![]()
Вы лучше напишите "почему". Обещали
![]() От себя приведу такой пример. На одном сайте в таблице RealURL encode cache больше миллиона записей, в decode cache раза в два меньше. По статистике запросы на выборку из этой таблицы по Primary Key регулярно пишуться в лог относительно медленных запросов (наряду с выборками из tt_news), для этого в t3lib_db добавлен небольшой код. Любая операция со страницей в BE (иногда приходится делать на рабочем сайте) ведет к операции DELETE FROM ... WHERE pid = xx Если делать таблицу MyISAM, то под нагрузкой такая операция практически вешает сервер на 3-7 минут. Если делать InnoDB (как того рекомендует автор Дмитрий Дулепов) то якобы операция удаления не должна блокировать таблицу и все должно продолжать работать. На практике серверу еще хуже. Так как пока очень долго идет операция удаления (десятки минут), то все другие операции с таблицей очень сильно замедляются и LA сервера растет и растет. Даже если вручную снять этот висящий запрос на удаление, то еще пару десятков минут продолжает висеть в списке процессов MySQL некая операция "freeing items" и тоже все тормозит. Так что пока вы кешируете в таблицы что-то небольшое и немного - это удобно. Но в реальной жизни на крупных сайтах все не так радужно. Мне нравиться Redis - с одной стороны использует память как и memcached, с другой данные уже не влезающие в память пишутся на диск, а не просто удаляются. Конечно в Redis и в memcached единственная проблема которая не так красиво решается как в СУБД - это тэгирование записей кэша. Ну я тут не стал выдумывать очередной велосипед и храню пары ключ-тэг в MySQL.MEMORY таблице. Когда-то видел сравнение скорости работы memcached vs MEMORY таблиц, получилось примерно одинаково. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
|
![]()
1) С точки зрения управления кэшированием на основе БД - можно сделать более сложную логику - в виде "матрешки". Где кроме того, можно еще и по определенным тэгам удалять отдельные кэши.
К примеру у нас есть новости на сайте: Они выводятся в новостях (список новостей с потраничной навигации) сама новость новость в карте сайта блок последних новостей на главной странице блок новости в слайдере на всех страницах... кроме того, может быть в sitemap... Мы можем по определенным тэгам сбросить все это при изменении/добавлении новости - и нет необходимости сбрасывать кэш всего сайта - но это очень актуально на больших и посещяемых проектах... Хотя все таки думаю - что даже это все дело потянет хороший хостинг... Подобную матрешку - пробовал реализовать на файлах... Но, к сожалению, очень не гибко в сравнении с Файлами. 2) С точки зрения записи файлов на кэшах - не знаю почему - но мне показалось что это работает по скорость также как и на БД, а вот с позции манипуляций кэшем на файлах - как-то дольше - в т.ч. удаление. ![]() А с точки зрения минусов - есть один минус, который по прежнему к сожалению вижу... Таблицы кэширования лучше всего переводить в отдельную БД... Т.е. специально для кэшей держать отдельную БД... А то при бэкапах хостинга обычно он бэкапит все в одну кучу... А так было бы 1. Дамп Контента 2. Дамп Кэша (только структура) 3. FTP |
![]() |
![]() |
![]() |
#6 |
Senior Member
|
![]()
Так вы не внимательно читаете, что я предлагаю выше.
Да, работать с тэгами в БД удобней всего. В файловом кэше их попросту не сделать. В memcached и т.п. вариациях тоже нет встроенных средств для работы с тэгами, надо все равно делать свою логику. Но! Писать BLOB данные в MySQL в большом количестве - это самый плохой вариант использования БД. Никаких преимуществ, одни недостатки. Поэтому, ИМХО, самый лучший вариант - хранить сами данные по ключу в файлах, memcached, redis (кому что нравиться и на что хватает ОЗУ). А вот связь тэги-ключ хранить в БД. Так как именно для этого реляционные БД предназначены - SELECT key FROM key_tags WHERE tag = "abc" и т.п. Плюс табличка key_tags компактна, длинна строк у нее фиксированная и можно заранее просчитать ее максимальный размер. Что позволяет делать ее типа MEMORY. А значит по скорости она будет близка к скорости memcached. Конечно это чуть более сложная логика в PHP. Но все равно проще варианта, когда организуют хранение тэгов в memcached (http://dklab.ru/lib/Dklab_Cache/, http://www.smira.ru/posts/20081029we...mcached-5.html) |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
|
![]() Цитата:
Здесь нужно "собирать опыт" ![]() Только одно - memcached - для меня не удобно... |
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Cлишком сложно показалось? | carlos | Вопросы выбора CMS | 5 | 04.07.2007 16:37 |