Voor een hobby projectje ben ik aan het proberen om een (web based) stock exchange te maken. Vanwege ervaring heb ik gekozen om met PHP+MySQL aan de slag te gaan. De interface is vrij eenvoudig: je kan invoeren aandelen te willen kopen of verkopen, hoeveel, en tegen welke prijs.
Het script wat daarachter zit, bepaald bij elke invoer (er wordt ge-POST naar invoer.php) of er een ‘match’ is voor de ingevoerde gegevens. Dus als ik invoer dat ik 100 aandelen voor 30 euro per stuk wil kopen, kijkt het script of er iemand is die aandelen voor 30 euro per stuk of minder wil kopen. Zo ja, dan wisselen de aandelen van eigenaar.
Nu heeft dit hobby projectje mijn interesse gewekt over grotere systemen. Ik heb het idee dat deze oplossing niet echt schaalbaar is. Bij elke individuele POST naar invoer.php, worden de tabellen geLOCKed, vraag en aanbod aan elkaar gematched, en weer vrijgegeven voor een volgende invoer.
Stel dat er nu 10.000 mensen dit willen gaan gebruiken, met dus veel ‘invoeren’ tegelijkertijd, wordt iedereen telkens in de wachtrij gezet totdat het invoer.php script uitgevoerd is en de gebruiker aan de beurt is. Dat is natuurlijk ook maar een schijntje voor zoiets als een echte aandelenbeurs met factoren meer volumes en gebruikers.
Hoe zou zo’n script er beter uit kunnen zien? Invoer los van de verwerking? Of ‘gewoon’ heel veel capaciteit beschikbaar stellen zodat het script supersnel wordt uitgevoerd?
Het script wat daarachter zit, bepaald bij elke invoer (er wordt ge-POST naar invoer.php) of er een ‘match’ is voor de ingevoerde gegevens. Dus als ik invoer dat ik 100 aandelen voor 30 euro per stuk wil kopen, kijkt het script of er iemand is die aandelen voor 30 euro per stuk of minder wil kopen. Zo ja, dan wisselen de aandelen van eigenaar.
Nu heeft dit hobby projectje mijn interesse gewekt over grotere systemen. Ik heb het idee dat deze oplossing niet echt schaalbaar is. Bij elke individuele POST naar invoer.php, worden de tabellen geLOCKed, vraag en aanbod aan elkaar gematched, en weer vrijgegeven voor een volgende invoer.
Stel dat er nu 10.000 mensen dit willen gaan gebruiken, met dus veel ‘invoeren’ tegelijkertijd, wordt iedereen telkens in de wachtrij gezet totdat het invoer.php script uitgevoerd is en de gebruiker aan de beurt is. Dat is natuurlijk ook maar een schijntje voor zoiets als een echte aandelenbeurs met factoren meer volumes en gebruikers.
Hoe zou zo’n script er beter uit kunnen zien? Invoer los van de verwerking? Of ‘gewoon’ heel veel capaciteit beschikbaar stellen zodat het script supersnel wordt uitgevoerd?