In juni hadden we Mathias Verraes drie dagen bij ons op bezoek voor een DDD-training. Daardoor zijn we nog meer fan geworden van UUID's, in plaats van de traditionele (auto-incrementing) integers.
Het belangrijkste voordeel is dat je in code een UUID kunt genereren, en niet afhankelijk bent van een externe autoriteit, zoals de database die ID's genereert. Direct bij het maken van een Event, Command of Entity weet je z'n ID. Ook als het opslaan asynchroon of later gebeurt.
Daarnaast hebben integer ID's als groot nadeel dat verdelen over meerdere database servers heel lastig is. Er moet dan worden voorkomen dat dubbele ID's worden uitgegeven. Bij UUID's is die kans extreem klein. We hebben hier afgesproken dat we een feestje gaan geven als we ooit een dubbele UUID tegenkomen ;-).
Als UUID's in MySQL (of in ons geval MariaDB) worden opgeslagen, dan ligt een binary(16) voor de hand. Het nadeel is dat een SELECT uuid FROM table
in de cli een rommeltje wordt.
En daar hebben we nu een oplossing voor! Sinds versie 1.5 herkent MyCLI automatisch binary-kolommen en zet de inhoud bij SELECT-en om naar het hexadecimale equivalent.
Vanaf nu is er dus geen enkele belemmering meer om UUID's te gebruiken!