Четене от файл или SQL заявка?

misho

Registered
Да речем, че в сайта имам категории или нещо подобно, които са записани в БД и при всяко зареждане на страница от сайта се прави SELECT заявка, за да взема името, id и евентуално някакво описание за всяка категория. Работата е там, че категориите винаги са си едни и същи и резултата от заявката винаги ще е един и същ. Дали не е по-добре да ги запиша във файл и да ги чета от там? Нещо като кеширане може би. :? Кое ще се изпълни по-бързо - заявката или четенето от файла?
 
Заявките също имат кеш :) А отварянето и затварянето на файла за бавни операции.
 
tedo96 каза:
И аз искам да попитам как става това прословуто кеширане?

Кеширането си работи по подразбиране, иначе има настройки в my.cnf, може да погледнете.
 
Как така резултатите са винаги еднакви? Щом има категории има някакви статии. Значи ако ще добавяш нови то и резултатите ще се променят.
Но мисля, че се сещам какво питаш. Ако искаш да намалиш заявките, просто си напиши id и описание като променливи в config файла примерно и от там ги взимай.
Ако питаш кое е по-добре mysql или файлове, мисля, че на платен хостинг няма да има разлика.
 
Има голяма разлика - пази се от всичко, което включва четене на файлове. Просто РАМ паметта е в пъти по-бърза от всеки един харддиск, просто защото е свързано с механични части. Това постоянно четене на файлове не толкова натоварва, колкото забавя скрипта/програмата.

Ако търсиш ефективен начин за кеширане (не говоря за категориите) мога да ти препоръчам memcached или APC. А кеширане на информация от mysql във файлове е най-тъпото нещо, за което мога да се сетя.

ПП. Самия mysql си кешира често използвани заявки. Ако нямаш супер-дупер сложен сайт или тежки заявки с много joinове или условия по-добре си остани така.

ПП2. За категории ако няма да се променят чрез админ панел и т.н. може и да си ги хардкоднеш (тоест в самия php код като масив) в кода. Така пестиш малко време за заявката, не че ще натовари mysql, просто има пренасяне на данни.

ПП3. Линуксите (за други ОС не знам) кешират често използвани файлове в паметта, но не бих разчитал на това за по-сериозни неща.
 
XML и подобните - са добра опция, но това зависи какво правиш, ако е нещо като чат система , да или нещо подобно , това е добър вариант.Става въпрос, да не селектираш определено нещо от файла а самият файл, от там вече информацията да си извлечеш, затова дадох пример с чата, но вече регистера при чата с някакъв тип заявка.
 
ArchangelS каза:
XML и подобните - са добра опция, но това зависи какво правиш, ако е нещо като чат система , да или нещо подобно , това е добър вариант.

XML, е пък още по тежък и бавен, и без това отваряш някакъв файл.Единственото му предимство е че предлага добра структура.А за уеб чат с XML не искам и да чувам.. това тотално ще пържи машината.
 
ArchangelS каза:
Не си ме разбрал.. не го препоръчвам за много неща, но за някои е добър.

ОО перфектно те разбрах.
Само прочетох че смяташ че XML е добър дата провайдър за уеб чат, това ми стига.
Уеб чата обикновенно изисква голяма маса от заявки за запазване на данните, и то в реално време.Мислиш ли че е по добре да отваряш 10МБ (xml) и да четеш пишеш в него, вместо да пишеш в базата, към която така или иначе има отворена връзка по всяко време.
 
@ArchangelS - силно НЕ ви го препоръчвам.

Заявките си имат вградена опция за кеширане SQL_CACHE което се слага направо в заявката. Аз си карам с него и MySQLi (което няма значение де, може да си го използвате и в обикновения MySQL), друг избор (добър) е Memcached (според мен - особено за информация, която не се обновява често).
 
Идеята ми дойде от тук.
Да обясня малко по-подробно. Публикациите в сайта ще бъдат разделени на категории, които са записани в таблица в БД. Идеята е с времето да се променят тези категории, като стане ясно на къде повече ще се развива страничката, но това означава промени веднъж-два или три пъти най-много за година. Практически без промяна. Не искам да е директно в PHP.
Значи варианта с файла отпада. А SQL_CACHE какво представлява и как се ползва?
 
SQL_CACHE както казах си е вградено в SQL което си кешира в негови си файлове и обновява веднага, ако види, че има нов резултат. Аз си предпочитам засега него.

Използва се в заявката преди select-ването на полетата.

За пример: SELECT SQL_CACHE * ... или SELECT SQL_CACHE field1, field2 и т.н.
 
Karcho каза:
SQL_CACHE както казах си е вградено в SQL което си кешира в негови си файлове и обновява веднага, ако види, че има нов резултат. Аз си предпочитам засега него.

Използва се в заявката преди select-ването на полетата.

За пример: SELECT SQL_CACHE * ... или SELECT SQL_CACHE field1, field2 и т.н.
Благодаря! Други варианти за SQL кеширане има ли?
А относно APC и Memcache - заедно ли се ползват?
И последно, че станаха много въпросите, какво ще кажете за това - GZIP?
 
misho каза:
Идеята ми дойде от тук.
Да обясня малко по-подробно. Публикациите в сайта ще бъдат разделени на категории, които са записани в таблица в БД. Идеята е с времето да се променят тези категории, като стане ясно на къде повече ще се развива страничката, но това означава промени веднъж-два или три пъти най-много за година. Практически без промяна. Не искам да е директно в PHP.
Значи варианта с файла отпада. А SQL_CACHE какво представлява и как се ползва?

Този урок не е лош, за съжаление страшно неприложим. Първото, което е, че целия сайт (HTML и т.н.) просто в 95% от случаите няма как да кешираш. Проблема е, че примерно ще искаш нещо много просто като часа и датата да изведеш, ама заради кеша тая информация ще е винаги остаряла.

За това се прави друго - кешираш части от страницата. Например масив с резултата от тежка заявка, която се изпълнява често. Кешираш я за някакъв интервал от време, какъвто сметнеш за добре, или пък гледаш при промяна на информацията да изтриеш съответния запис от кеша. Така снемаш натоварването от mysql и държиш всичко в паметта, от където е изключително бързо взимането. Тоест да се изразя с MVC :D - може да кешираш резултати от нещата в Моделите. Нека php си генерира htmlа всеки път. Това не е тежко или бавно.

Няма нужда от SQL_CACHE за всяка заявка, то по подразбиране си кешира заявки, а щом няма да има промени по таблицата (чести) още по-добре. Карай си така :) mysql въобще няма да усети тая заявка, колкото и често да я правиш. Още повече, че не работиш с някаква огромна таблица от стотици хиляди редове...
 
misho каза:
Karcho каза:
SQL_CACHE както казах си е вградено в SQL което си кешира в негови си файлове и обновява веднага, ако види, че има нов резултат. Аз си предпочитам засега него.

Използва се в заявката преди select-ването на полетата.

За пример: SELECT SQL_CACHE * ... или SELECT SQL_CACHE field1, field2 и т.н.
Благодаря! Други варианти за SQL кеширане има ли?
А относно APC и Memcache - заедно ли се ползват?
И последно, че станаха много въпросите, какво ще кажете за това - GZIP?

Много бързо поствате, не мога да ви смогна :D

APC и memcached са различни механизми. Могат да се ползват и заедно, могат и отделно. Обикновено APC се инсталира за да оптимизира (кешира) самите php скриптове. То си го прави това без да пипаш нищо по кода, просто помага на парсера и зареждането на php файлове, класове и т.н. става по-бързо. В APC също можеш да записваш и твои си променливи. Главната разлика между APC и memcached е, че memcached работи като отделен сървър. Отделна програма, към която се свързваш както например правиш връзка с mysql. Това позволява ако ти се разрастне приложението да кешираш на различни сървъри на различни места. Докато с APC можеш само на същия сървър, на който е phpто.

GZIP е хубаво нещо. Само, че не и направено с php. Това е да намалиш трафика за сметка на бързината на самия сайт, тоест за сметка на процесора. Всеки файл ще минава през php, ще се обработва всеки път и ще се праща и така отново и отново. Просто не е ефективно.
Най-добрия вариант е да накараш уеб сървъра ти да компресира автоматично. Това го има във всички уеб сървъри и не знам защо изобщо някои хора ползват PHP да върши мръсната работа. Сървъра ще го направи много по-бързо, няма да има натоварване за PHP и то може да си се заеме с по-важната част - сайта ти. Плюс това няма да ти се налага да пипаш абсолютно нищо по файловете ти.
 
StormBreaker, благодаря много за изчерпателните отговори! :?:
Странно ми е защо, щом „зареждането на php файлове, класове и т.н. става по-бързо“, не е направено по подразбиране да си работи. :lol:
 
misho каза:
StormBreaker, благодаря много за изчерпателните отговори! :?:
Странно ми е защо, щом „зареждането на php файлове, класове и т.н. става по-бързо“, не е направено по подразбиране да си работи. :lol:

На почти всички сървъри е пуснато :)
 
RegexSux Нито съм казал за коя част е уеб или софтуер, нито ми се спори.Щом това е твоето мнение ОК.
 
ArchangelS каза:
RegexSux Нито съм казал за коя част е уеб или софтуер, нито ми се спори.Щом това е твоето мнение ОК.

Както и да са частите, какъвто и да е софтуера няма значиние.

XML, никога няма да е добър дата провайдър за голям обем данни с много заявки към него.

XML, се ползва за да се оформи по добре информацията, и за да е добре структурирана и лесно четима, но никога няма да е удобен за маса данни.

И вземете си прочетете уроците, и разберете кое за какво служи, вместо да ми обяснявате колко съм крив в форума.

А и да те светна "уеб" също е софтуер :)

Без лоши чуства моля, просто е дразнещо това поведение.
 

Back
Горе