Het probleem waar ik mee zit is het volgende. Ik hou op mijn website (die ik vooral voor hobbyprojecten gebruik) een hoop top 100 lijsten bij, en dat gaat op dit moment allemaal vlot met over de 5 miljoen records in de database, dus ik vermoed dat ik qua indexen en tabelstructuur en caching goed zit. Alleen wil ik vermijden dat de performantie gaat inzakken (om de 3 maanden komt er miljoen records bij). Hoe is de situatie momenteel:
3 verschillende tabellen (laten we ze voor gemak A,B, en C noemen) die de eigenlijke data bevatten, er zijn dan nog wat gerelateerde tabellen maar die zijn kleiner en bevatten redundante data die voornamelijk 's nachts berekent worden (als een nummer 20000 keer voorkomt wil je niet bij elke hit gaan berekenen hoeveel keer dat nummer in elk land in de top 100, top10 en nummer 1 stond), dus alle zware berekeningen worden 's nachts uitgevoerd wanneer het rustigs is op de server (ik zit op shared hosting, kost me niks en geen onderhoud).
Maar van die 3 tabellen is de koppeltabel 'B' het grootst, die bevat de links tussen de lijsten en de nummers, in vereenvoudigde vorm:
Bij grote tabellen wordt aangeraden om te gaan partitioneren, alleen weet ik niet goed hoe ik mijn situatie de koppeltabel ( B ) kan gaan splitsen, aangezien de voorwaarden die gebruikt worden om te selecteren meestal gebeurt op basis van filters op kolommen van tabel A of tabel C, dus hoe ik de koppeltabel ook partitioneer, alle delen van die tabel zullen steeds overlopen moeten worden.
Alleen kan ik mij niet inbeelden dat ik de enigste die met zo een probleem zit. Zijn er nog andere manieren om te zorgen dat bij queries niet de volledige koppeltabel geladen/overlopen moet worden (kort door de bocht natuurlijk, aangezien via indexen gelukkig al een deel van de tabel overgeslagen wordt).
3 verschillende tabellen (laten we ze voor gemak A,B, en C noemen) die de eigenlijke data bevatten, er zijn dan nog wat gerelateerde tabellen maar die zijn kleiner en bevatten redundante data die voornamelijk 's nachts berekent worden (als een nummer 20000 keer voorkomt wil je niet bij elke hit gaan berekenen hoeveel keer dat nummer in elk land in de top 100, top10 en nummer 1 stond), dus alle zware berekeningen worden 's nachts uitgevoerd wanneer het rustigs is op de server (ik zit op shared hosting, kost me niks en geen onderhoud).
Maar van die 3 tabellen is de koppeltabel 'B' het grootst, die bevat de links tussen de lijsten en de nummers, in vereenvoudigde vorm:
| Tabel A | Tabel B | Tabel C |
| ID | A.ID | ID |
| waardeA1 | C.ID | WaardeC1 |
| WaardeA2 | WaardeB1 | WaardeC2 |
Bij grote tabellen wordt aangeraden om te gaan partitioneren, alleen weet ik niet goed hoe ik mijn situatie de koppeltabel ( B ) kan gaan splitsen, aangezien de voorwaarden die gebruikt worden om te selecteren meestal gebeurt op basis van filters op kolommen van tabel A of tabel C, dus hoe ik de koppeltabel ook partitioneer, alle delen van die tabel zullen steeds overlopen moeten worden.
Alleen kan ik mij niet inbeelden dat ik de enigste die met zo een probleem zit. Zijn er nog andere manieren om te zorgen dat bij queries niet de volledige koppeltabel geladen/overlopen moet worden (kort door de bocht natuurlijk, aangezien via indexen gelukkig al een deel van de tabel overgeslagen wordt).
[ Voor 0% gewijzigd door ieperlingetje op 17-01-2014 18:34 . Reden: typo ]