PFZ.nl - PHP Community: Versiebeheer van teksten - hoe verwerken in de database? - Databases - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 02-02-2012 08:42
Hi Iedereen,

Binnen ons CMS loop ik tegen een puntje aan m.b.t. de database structuur.
Ik heb binnen een website allerlei modules gemaakt en per module wil ik alle versie bewaren van teksten e.d. Op dit moment heb ik deze functionaliteit gemaakt met de volgende structuur:

- Id: int(11)
- Lang: char(2)
- Versie: datetime()
- Versie_end: datetime()
- Title: varchar(255)

Aan de hand van Versie_end kon je de laatste versie opvragen, want deze versie had NULL bij de betreffende kolom. Nu heb ik gemerkt dat deze werkwijze bij grote klanten ervoor zorgt dat de database flink groeit.

Doordat de database-tabellen flink groeien heb ik het idee dat de website ook traag wordt. Nu ben ik een groot gedeelte van het CMS aan het verbouwen en wil dit punt (m.b.t. traagheid) ook oppakken.

Mijn vraag is eigenlijk hoe ik het beste om kan gaan met versies binnen een tabel. Toch werken met versie_end of een tabel maken (history_*) waarin oude versies worden opgeslagen?

Ik hoor graag van jullie.

#2 02-02-2012 09:23

Quote

Mijn vraag is eigenlijk hoe ik het beste om kan gaan met versies binnen een tabel. Toch werken met versie_end of een tabel maken (history_*) waarin oude versies worden opgeslagen?
Ga niet nadenken over een oplossing voor een probleem als je nog niet weet wat het probleem is.

Ga eerst na waarom het traag wordt. De afmeting van een tabel heeft in principe weinig invloed op hoe snel je er data uit kunt halen, omdat alle oude versies niet door je queries gebruikt worden.

Meet eerst op welke queries traag zijn en zoek uit waarom ze traag zijn. Dikke kans dat je een paar indexes mist op b.v. Versie_end, of versie_end in combinatie met het id (omdat je die altijd samen selecteert)

Bedenk ook dat je een limiet kunt stellen op hoeveel revisies van een tekst je bewaart. Het is eenvoudig om een query te maken die b.v. alle versies ouder dan tien revisies geleden weghaalt, of alles ouder dan X maanden (zodat je altijd een zinnige historie overhoudt).

Maar, eerst meten, want meten is weten.
DELETE FROM world WHERE dbms='mysql';
http://www.yapf.net - http://yapf.blogspot.com/

#3 02-02-2012 09:34
Bedankt voor je snelle reactie; erg fijn!

Misschien een domme vraag, maar kan ik ook makkelijk queries monitoren? Je geeft in jouw reactie aan "Meet eerst op welke queries traag zijn en zoek uit waarom ze traag zijn"; is er een makkelijke manier om deze (trage) queries te vinden?

Bedankt alvast!

#4 02-02-2012 09:43
MySQL heeft een "slow query log" waarin je queries kunt laten loggen die langer dan X milliseconden duurden.

Maar als je je code een beetje handig hebt opgezet dan heb je vast wel een PHP routine die queries voor je uitvoert en daarin kun je dan gewoon met microtime() meten hoelang het duurde.

$iStartTime = microtime(true);
mysql_query(...);
$iTimeTaken = microtime(true) - $oStartTime;
DELETE FROM world WHERE dbms='mysql';
http://www.yapf.net - http://yapf.blogspot.com/


Inloggen wachtwoord vergeten? Aanmelden