Voordat ik mijn vraag stel even een inleiding. Ik werk bij een klein bedrijf (4 man), we hebben een bedrijf dat voor autobedrijven auto's online Europees aanbied. We hebben onze eigen website (niet schrikken): *snip* spam die we aan het vernieuwen zijn: *snip* spam
Maar we hebben ook een koppeling met *snip* spam, de grootste en bekendste occasion website in Europa. We hebben vooral bestaansrecht door deze koppeling en ons service niveau. We leveren ook per autobedrijf een 'Europese website' waarin een iframe draait met de voorraad van het autobedrijf.
Onze database bevat 120000 (47000) actieve auto's. We krijgen de auto's van onze klanten binnen via 4 koppelingen die we hebben met voorraadbeheer systemen.
De auto's worden in xml formaat aangeleverd. Per dag verwerken we tussen de 3000 en 5000 xml bestanden. Dit zijn dus nieuwe auto's, gewijzigde auto's of auto's die verwijderd moeten worden.
Nu is het zo dat het systeem de bestanden niet snel genoeg meer kan verwerken (door groei klanten) en er wachtrijen ontstaan. De database heeft het zo druk dat we de laatste tijd ook vaak problemen hebben met het gebruik van onze back end, maar ook de front end is traag. We zijn inmiddels op het punt aangekomen dat het niet verder kan zo. Het ontwikkelen van de website en systeem word gedaan door ontwikkelaars uit India (of dit de juiste keus is, is een andere discussie).
Ik probeer zo goed en kwaad als ik kan deze mannen aan te sturen en taken te geven. De site is ontwikkeld al voordat ik er 3 jaar geleden kwam werken. Het is hard werken om het bedrijf gaande te houden, qua ontwikkelingen moeten we ook constant afwegen of we de boel gaan verbeteren of nieuwe functionaliteit gaan ontwikkelen. We zijn helaas niet in de positie om beide tegelijk te kunnen doen.
Bepaalde tabellen in de database worden door verschillende processen bewerkt waardoor vertraging ontstaat. Alle signalen lijken erop te wijzen dat de huidige database structuur niet meer geschikt is en zal dus anders moeten.
Ik zal kort de huidige structuur beschrijven en daarna vertellen hoe ik denk dat het beter kan/moet. Ik hoop dat jullie mij wellicht op of aanmerkingen kunnen geven. Of wellicht heb je er een totaal ander idee over hoe het zou moeten.
Op dit moment hebben we 3 "grote" tabellen (de 3 tabellen bevatten bij elkaar de gegevens van alle auto's). 1 tabel met algemene informatie over de auto's, zoals technische specificaties en prijzen, deze tabel bevat 120000 records en bestaat uit 155 kolommen. 1 tabel die overige informatie bevat zoals accessoires en opties. Deze bevat ook 120000 records en bevat 83 kolommen. En als laatste een tabel die informatie over de bijbehorende foto's bevat. Deze bevat 1700000 records en 11 kolommen.
Daarnaast hebben we nog een aantal tabellen zoals een tabel die onze klant informatie bevat.
Ik denk dat we per klant 3 tabellen moeten hebben, en niet 3 tabellen met alle auto's van onze klanten. Op dit moment hebben we 1160 actieve klant_ids. Dat zou betekenen dat de database ongeveer 3500 tabellen krijgt. Is dit raar? Hiermee voorkom je toch dat er constant in dezelfde tabellen gewerkt wordt?
Daarnaast denk ik dat er 2 tabellen bij moeten komen, 1 tabel die gebruikt kan worden om te bepalen of de klant waarvan we de auto binnen krijgen bestaat en actief is.
En een tabel die alleen de unieke gegevens bevat van alle auto's om te bepalen of de te verwerken auto al in onze database bestaat (en dus gewijzigd moet worden) of niet, en dus aangemaakt moet worden.
Na deze checks worden dan de tabellen aangesproken van de klant waarin een auto gewijzigd of aangemaakt moet worden. En worden de andere tabellen dus ongemoeid gelaten.
Het voordeel van losse tabellen per klant is dat de iframe's die we gebruiken voor de website integratie ook sneller kunnen werken omdat hij dan puur de tabel aanspreekt die alleen auto's van die klant bevat.
Zou deze structuur nadelig zijn voor onze moedersite, waar we dus alle auto's van onze klanten tonen?
Hierbij nog even de specs van onze server:
2 keer xeon 2630
32gb ram
200gb raid 0 ssds waarop database en os draait.
1tb raid10 waarop de foto's en overige data opgeslagen worden.
Daarnaast hebben we nog een virtuele server waarop de batches draaien die de xmls verwerken
Graag advies/commentaar
Maar we hebben ook een koppeling met *snip* spam, de grootste en bekendste occasion website in Europa. We hebben vooral bestaansrecht door deze koppeling en ons service niveau. We leveren ook per autobedrijf een 'Europese website' waarin een iframe draait met de voorraad van het autobedrijf.
Onze database bevat 120000 (47000) actieve auto's. We krijgen de auto's van onze klanten binnen via 4 koppelingen die we hebben met voorraadbeheer systemen.
De auto's worden in xml formaat aangeleverd. Per dag verwerken we tussen de 3000 en 5000 xml bestanden. Dit zijn dus nieuwe auto's, gewijzigde auto's of auto's die verwijderd moeten worden.
Nu is het zo dat het systeem de bestanden niet snel genoeg meer kan verwerken (door groei klanten) en er wachtrijen ontstaan. De database heeft het zo druk dat we de laatste tijd ook vaak problemen hebben met het gebruik van onze back end, maar ook de front end is traag. We zijn inmiddels op het punt aangekomen dat het niet verder kan zo. Het ontwikkelen van de website en systeem word gedaan door ontwikkelaars uit India (of dit de juiste keus is, is een andere discussie).
Ik probeer zo goed en kwaad als ik kan deze mannen aan te sturen en taken te geven. De site is ontwikkeld al voordat ik er 3 jaar geleden kwam werken. Het is hard werken om het bedrijf gaande te houden, qua ontwikkelingen moeten we ook constant afwegen of we de boel gaan verbeteren of nieuwe functionaliteit gaan ontwikkelen. We zijn helaas niet in de positie om beide tegelijk te kunnen doen.
Bepaalde tabellen in de database worden door verschillende processen bewerkt waardoor vertraging ontstaat. Alle signalen lijken erop te wijzen dat de huidige database structuur niet meer geschikt is en zal dus anders moeten.
Ik zal kort de huidige structuur beschrijven en daarna vertellen hoe ik denk dat het beter kan/moet. Ik hoop dat jullie mij wellicht op of aanmerkingen kunnen geven. Of wellicht heb je er een totaal ander idee over hoe het zou moeten.
Op dit moment hebben we 3 "grote" tabellen (de 3 tabellen bevatten bij elkaar de gegevens van alle auto's). 1 tabel met algemene informatie over de auto's, zoals technische specificaties en prijzen, deze tabel bevat 120000 records en bestaat uit 155 kolommen. 1 tabel die overige informatie bevat zoals accessoires en opties. Deze bevat ook 120000 records en bevat 83 kolommen. En als laatste een tabel die informatie over de bijbehorende foto's bevat. Deze bevat 1700000 records en 11 kolommen.
Daarnaast hebben we nog een aantal tabellen zoals een tabel die onze klant informatie bevat.
Ik denk dat we per klant 3 tabellen moeten hebben, en niet 3 tabellen met alle auto's van onze klanten. Op dit moment hebben we 1160 actieve klant_ids. Dat zou betekenen dat de database ongeveer 3500 tabellen krijgt. Is dit raar? Hiermee voorkom je toch dat er constant in dezelfde tabellen gewerkt wordt?
Daarnaast denk ik dat er 2 tabellen bij moeten komen, 1 tabel die gebruikt kan worden om te bepalen of de klant waarvan we de auto binnen krijgen bestaat en actief is.
En een tabel die alleen de unieke gegevens bevat van alle auto's om te bepalen of de te verwerken auto al in onze database bestaat (en dus gewijzigd moet worden) of niet, en dus aangemaakt moet worden.
Na deze checks worden dan de tabellen aangesproken van de klant waarin een auto gewijzigd of aangemaakt moet worden. En worden de andere tabellen dus ongemoeid gelaten.
Het voordeel van losse tabellen per klant is dat de iframe's die we gebruiken voor de website integratie ook sneller kunnen werken omdat hij dan puur de tabel aanspreekt die alleen auto's van die klant bevat.
Zou deze structuur nadelig zijn voor onze moedersite, waar we dus alle auto's van onze klanten tonen?
Hierbij nog even de specs van onze server:
2 keer xeon 2630
32gb ram
200gb raid 0 ssds waarop database en os draait.
1tb raid10 waarop de foto's en overige data opgeslagen worden.
Daarnaast hebben we nog een virtuele server waarop de batches draaien die de xmls verwerken
Graag advies/commentaar
[ Voor 1% gewijzigd door RobIII op 13-11-2013 21:38 ]