Ik ben bezig met een hobbyproject om daarin vooral meer te leren over grote webapplicaties die server scaling vereisen. Niet voor productie, puur zelfeducatie.
Lang verhaal kort. Stel ik heb een app waar mensen een online shop kunnen beginnen (SaaS) en waarin dus orders worden geplaatst. Elke ordertabel heeft natuurlijk een autoincrement voor order.ID. Stel dat er meerdere shops draaien, dan moet elke shop order ook zijn eigen order.number hebben. Incrementeel per order.shop_id dus. Zodat shop A ordernummers 1.2.3.4 etc. heeft, maar shop B ook deze 1,2,3,4,5.. waardes.
Nu kun je bij het maken van een nieuwe order normaliter gewoon de laatste shop order ophalen, daar +1 bij optellen, en de waarde in order.number van de nieuwe record zetten.
Maarr, in een master-slave geval zit er natuurlijk lag tussen de write en read server. Stel dat er via een API tientallen orders tegelijkertijd worden aangemaakt (bijv. wanneer iemand een import draait). Hoe zou je dit dan op kunnen lossen? Rekening houdend met dat er tijdens de import ook orders door klanten kunnen worden geplaatst.
Standaard leeglaten van order.number en via een cron/task achteraf invullen lijkt me ook niet sjiek, en weinig haalbaar aangezien orders bijvoorbeeld direct gemailt moeten worden naar de klant, en daarin ook het nummer aanwezig moet zijn.
Je zou die query om het laatste ordernummer op te halen kunnen uitvoeren op de master server, mja dan ga je misschien tientallen queries per seconde uitvoeren op die server terwijl die daar eigenlijk niet voor bedoeld is.
Suggesties?
Lang verhaal kort. Stel ik heb een app waar mensen een online shop kunnen beginnen (SaaS) en waarin dus orders worden geplaatst. Elke ordertabel heeft natuurlijk een autoincrement voor order.ID. Stel dat er meerdere shops draaien, dan moet elke shop order ook zijn eigen order.number hebben. Incrementeel per order.shop_id dus. Zodat shop A ordernummers 1.2.3.4 etc. heeft, maar shop B ook deze 1,2,3,4,5.. waardes.
Nu kun je bij het maken van een nieuwe order normaliter gewoon de laatste shop order ophalen, daar +1 bij optellen, en de waarde in order.number van de nieuwe record zetten.
Maarr, in een master-slave geval zit er natuurlijk lag tussen de write en read server. Stel dat er via een API tientallen orders tegelijkertijd worden aangemaakt (bijv. wanneer iemand een import draait). Hoe zou je dit dan op kunnen lossen? Rekening houdend met dat er tijdens de import ook orders door klanten kunnen worden geplaatst.
Standaard leeglaten van order.number en via een cron/task achteraf invullen lijkt me ook niet sjiek, en weinig haalbaar aangezien orders bijvoorbeeld direct gemailt moeten worden naar de klant, en daarin ook het nummer aanwezig moet zijn.
Je zou die query om het laatste ordernummer op te halen kunnen uitvoeren op de master server, mja dan ga je misschien tientallen queries per seconde uitvoeren op die server terwijl die daar eigenlijk niet voor bedoeld is.
Suggesties?