Hallo!
Om een website met een groot aantal bezoekers wat sneller te laten draaien heb ik een caching systeem gemaakt dat het resultaat van MySQL in een cache opslaat.
Als locatie voor de data gebruik ik een andere MySQL tabel. Het is nu zo dat de objecten die de query zelf als resultaat heeft wordt "geserialized" met PHP en vervolgens in de cache-tabel alszodanig wordt opgeslagen. Ik zie nu dat de cache-tabel snel enorme proporties aanneemt.
Als table layout gebruik ik nu het volgende:
De query_hash is daarin een hash van de query die gecached wordt, zodat iedere unieke query tot zijn eigen cache leidt.
Zoals te zien gebruik ik nu voor de opslag van de (serialized) data een "mediumtext" veld. Is dat met het oog op de snelheid van de tabel handig? Of kan ik beter voor een BLOB-variant kiezen? De overweging om het als TEXT op te slaan is dat ik me kan herinneren dat de lengte van TEXT-velden in de tabel als variabel opslagen wordt, zodat niet voor iedere row een gefixeerde lengte wordt gereserveerd.
Overigens hoef ik dus NIET te zoeken op de inhoud van het veld.
De vraag is dus:
1. Is deze manier van cachen überhaupt raadzaam, of zijn hier slimmere/snellere oplossingen voor
2. Als het niet de slechtst denkbare optie is, is er dan een handiger veld-type om te kiezen voor de daadwerkelijke data?
Alvast veel dank voor het meedenken.
Om een website met een groot aantal bezoekers wat sneller te laten draaien heb ik een caching systeem gemaakt dat het resultaat van MySQL in een cache opslaat.
Als locatie voor de data gebruik ik een andere MySQL tabel. Het is nu zo dat de objecten die de query zelf als resultaat heeft wordt "geserialized" met PHP en vervolgens in de cache-tabel alszodanig wordt opgeslagen. Ik zie nu dat de cache-tabel snel enorme proporties aanneemt.
Als table layout gebruik ik nu het volgende:
MySQL:
1
2
3
4
5
6
7
| CREATE TABLE query_cache ( query_hash varchar(35) NOT NULL default '', query_data mediumtext NOT NULL, query_tstamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (query_hash), KEY query_tstamp (query_tstamp) ) |
De query_hash is daarin een hash van de query die gecached wordt, zodat iedere unieke query tot zijn eigen cache leidt.
Zoals te zien gebruik ik nu voor de opslag van de (serialized) data een "mediumtext" veld. Is dat met het oog op de snelheid van de tabel handig? Of kan ik beter voor een BLOB-variant kiezen? De overweging om het als TEXT op te slaan is dat ik me kan herinneren dat de lengte van TEXT-velden in de tabel als variabel opslagen wordt, zodat niet voor iedere row een gefixeerde lengte wordt gereserveerd.
Overigens hoef ik dus NIET te zoeken op de inhoud van het veld.
De vraag is dus:
1. Is deze manier van cachen überhaupt raadzaam, of zijn hier slimmere/snellere oplossingen voor
2. Als het niet de slechtst denkbare optie is, is er dan een handiger veld-type om te kiezen voor de daadwerkelijke data?
Alvast veel dank voor het meedenken.