2.5 miljoen objecten, verspreid over een netwerk van websites
Bert Clybouw op 31-12-2015
Auctions-In-Europe is een schoolvoorbeeld voor twee zaken: big data en een netwerk van websites. Deze blogpost beschrijft globaal hoe we te werk gingen.
Big Data
Met 2.5 miljoen objecten en nog meer foto's is er heel wat maatwerk nodig om zo'n systeem optimaal te laten werken. De bestaande websites hadden elk een aparte database met een andere structuur. Deze zijn allemaal omgezet naar een uniform formaat in éénzelfde database. Aan dit proces ging een uitgebreide analyse vooraf waarbij we begonnen met een volledige nieuwe structuur uit te tekenen die optimaal is voor het uiteindelijke project. Vervolgens werden voor alle bestaande datalocaties een migratie procedure uitgetekend die beschrijft waar de data terecht moet komen en of de data omgezet moet worden naar een nieuw formaat. Het effectief schrijven en uitvoeren van de query's die de data kopiëren is een zeer delicaat proces waarbij uiterste concentratie vereist is. Het is een lang proces waarbij elke fout voor een pak extra werk zorgt.
Wanneer de data overgezet is er heel wat optimalisatie nodig om de snelheid van het systeem te bevorderen aangezien bij elke actie een database van miljoenen lijnen data doorzocht wordt. Ten eerste worden er zorgvuldig gekozen indexen toegevoegd om de snelheid van het zoeken te bevorderen. Ten tweede moeten goed geschreven query's ervoor zorgen dat op een snelle manier al deze items doorzocht kunnen worden naar interesses en zoektermen. Belangrijk hierbij is dat zeker geen overbodige data opgehaald wordt en een query niet tweemaal uitgevoerd wordt in één sequentie van functies. Ten derde wordt een caching systeem op query's gebruikt. Zo worden bijvoorbeeld de objecten op de homepage slechts éénmaal per dag opgehaald met een query, die data wordt opgeslagen in de database als cache. Zo zullen alle andere bezoekers diezelfde data te zien krijgen uit de cache, zonder dat de query uitgevoerd moet worden. Om dit te bekomen raden wij Memcached en Redis aan.
De uiteindelijke database grootte bij lancering was 5 GB.
Netwerk van websites
Verschillende websites zijn verbonden aan dezelfde database. Dit heeft heel wat gevolgen voor de ontwikkeling. Alle items moeten heel zorgvuldig opgehaald en opgeslagen worden in verbinding met de juiste website, alsook moeten de rechten van gebruikers streng gecontroleerd worden. Een belangrijk aandachtspunt voor een goede programmeur is het vermijden van duplicate code. Dit houdt in dat code die identiek is voor verschillende websites maar éénmaal geschreven mag worden zodat bij aanpassingen aan het systeem de code slechts op één plaats aangepast moet worden.