Mysql
 sql >> база данни >  >> RDS >> Mysql

Стратегия за кеширане, кога кеширането става безсмислено?

Използвайте вградения кеш на заявки на MySQL, вместо да се опитвате да го поддържате сами. Той автоматично ще изчисти кешираните заявки към таблици, когато са записани в тях. Освен това той работи в паметта, така че трябва да е много ефективен...

Също така, не само кеширайте заявки. Опитайте се да кеширате цели сегменти от приложението на различни етапи от цикъла на изобразяване. Така че можете да оставите MySQL да кешира заявките, след което да кеширате всеки отделен изглед (изобразен), всеки отделен блок и всяка страница. След това можете да изберете дали да изтеглите от кеша въз основа на заявката.

Например, потребител, който не е влязъл в системата, може да получи цялата страница директно от кеша. Но влезлият потребител може да не може (поради потребителско име и т.н.). Така че за него може да успеете да изобразите 1/2 изгледите на страницата от кеша (тъй като те не зависят от потребителския обект). Все още получавате предимствата на кеширането, но то ще бъде разпределено според нуждите.

Ако наистина очаквате много трафик, определено си струва да разгледате Memcached . Позволете на MySQL да съхранява вашите заявки вместо вас и след това да съхранява всички потребителски елементи от кеша в memcache...

Редактиране: За да отговорите на вашата редакция:

Файловите системи могат да станат бавни, ако една директория стане голяма. Докато сте "разпределение на имената" по директория (така че всяка директория има само малка част от кеш файлове), би трябвало да сте добре от тази гледна точка. Що се отнася до точния праг, той наистина ще зависи от вашия хардуер и файлова система повече от всичко друго. Знам, че EXT3 става доста бавен, ако има много файлове в една директория (имам директории с буквално стотици хиляди файлове и може да отнеме до половин секунда, за да просто stat() един от файловете, да не говорим за изброяване на директории)...

Но имайте предвид, че ако добавите друг сървър, или ще имате дублиране на кеша (което не е добре), или ще трябва да пренапишете целия си кеш слой. Има ли причина да не използвате Memcached още от самото начало?

Редактиране 2: За да отговорите на последната си редакция:

Все още е твърде трудно да се обадя. Имам приложение, което има база данни с около 1,5 милиарда реда (нараства с около 500k на ден). Въобще не използваме кеширане, защото нямаме проблеми с едновременността. И дори да го направим, би било по-добре да хвърлим повече MySQL сървъри към него, вместо да добавяме кеширане, тъй като всяка форма на кеш би имала толкова нисък процент на попадане, че не би си струвало времето за разработка, за да го добавите.

И това е причината да съм толкова категоричен да не кеширам скоростта. Винаги ще има обект, който не е в кеша. Така че, ако ударите страница с един от тези обекти, тя все още трябва да бъде бърза. Като правило се опитвам да кеширам всичко, което ще бъде достъпно отново през следващите няколко минути (все пак поддържам време за живот от около 5 минути в производството на други приложения). Така че, ако елементите не получават повече от няколко посещения през този период от време или процентът на попадане е много нисък (по-малко от 90%), не си правя труда да кешира този елемент...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Можете ли да използвате MySQL заявка, за да създадете напълно копие на базата данни

  2. Създаване на Pivot таблица за посещаемост с помощта на php и mysql

  3. SELECT LAST_INSERT_ID() връща 0 след използване на подготвен израз

  4. Стойност по подразбиране на MySQL въз основа на изглед

  5. Подготвени множество Insert mysqli