Adeus ba númeru sekuen, ola UUIDv7!

Photo of author

By naroman

Iha Buildkite, ami uza nia dadus ho duas id. Ami uza id primáriu sekuenxial ba index efisiente, no id sekundáriu UUID ba úzu eksternu. Padrãu UUIDv7 ne’ebe sei mai oferese oin-oin; id primáriu UUIDv7 ne’ebe ordena tiha ona tempu bele utiliza ba index no úzu eksternu. Artigu blog ida ne’e sei hakerek kona-ba jornada ne’ebe Buildkite halo tuir to’o hafoin ne’ebe mós adota UUIDv7 hanesan id primáriu ne’ebé eskoleta. Ita sei explora tradeoff sira iha index baze dadus; husi númeru sequencial, UUIDs ne’ebe hetan aleatoriedade, to’o identifikasaun bazeadu iha tempu. Se ida mak UUID? UUID (Universally Unique Identifiers) mak identifikadór úniku ne’ebé bele hetan independentemente tanpa autoridade sentrál ka koordenasaun ho parte seluk. Ho aplikasaun no sistema modernu ne’ebé boot iha natureza distribuídu, identifikadór sira iha forma UUID hetan popularidade hodi uza nu’udar id baze dadus. Kompara ho identifikadór númeru sekuenxial ne’ebé nesesita koordenasaun atu garante únikeza global iha baze dadus distribuídu, UUIDs halo povu hosi koordenasaun, ne’ebé fó vantajen sira kompara ho identifikadór númeru sekuenxial. Unprediktabilidade UUID nian permite sira nia úzu públiku tanpa halo dezvolta informasaun internu no estatístika. UUIDs mós difísil atu adivinha, fó protesaun liutan lian ho kontrolu asesu atu prevene vulnerabilidade Indirect Direct Object Reference. Natureza aleatóriu no númeru boot 128-bitu UUIDs ne’ebe fó probabilidade duplikasaun UUID ba zero, signifika katak ita bele konsidera UUIDs hanesan únike pratikamente. Maibé, natureza aleatóriu UUIDs ne’ebé la bazea ba tempu (hanesan v4) bele kria problema ba rendimentu baze dadus bainhira uza nu’udar id primáriu. Problema ida ne’e ofisialmente refere ba lokalidade index baze dadus nian ne’ebé la di’ak. Uza identifikadór duplu Hodi konsege id primáriu ne’ebé efisiente, iha tinan balun ami deside hodi estandardiza úzu id númeru sekuenxial ne’ebé nu’udar id primáriu, tanba problema rendimentu boot id ne’ebé la bazea ba tempu. Ami mós uza UUIDs nu’udar id sekundáriu iha tabela baze dadus. Query sira ne’ebé envolve join tabela uza foreign key id númeru sekuenxial––ne’ebé normalmente halo rendimentu di’ak kompara ho foreign key UUID aleatóriu. Ba buat sira ne’ebé eksternu no relasiona ho kliente, uza UUID ne’ebé la bazea ba tempu (liuliu iha API no URL). Abordajen identifikadór duplu ne’e estandardizadu iha tim sira hotu hodi ajuda enjeru sira hodi iha produtividade di’ak liutan. Kompriende lokalidade index la di’ak Valor UUIDs ne’ebé la bazea ba tempu ne’ebé hetan ho susesivu la’ós sekuenxial. Valor sira ne’ebé hetan ho aleatoriedade la bele grupu ba valor seluk iha index baze dadus, no entaun halo inserção ba aleatóriu. Inserção ne’e bele afeta rendimentu baze dadus komun nian, hanesan B-tree no variante sira. Natureza produtu Buildkite nian signifika data ruma ne’ebé foin hetan asesu iha tempu liu-liu, kompara ho data lama. Ho identifikadór la sekuenxial, data foin hetan sei hetan espalladu iha index no la’ós grupu. Komportamentu ne’e halo keixa ba hit ratio cache nian (kuandu kuantu rejistu cache bele hetan, kompara ho kuandu kuantu rejistu ne’ebé ita simu). Kompara ho úzu identifikadór sekuenxial, iha data foin hetan ne’ebe aranja liu-liu iha parte dreta index, halo data foin hetan ne’ebe halo ita nia cache di’ak liutan. Mellora kona-ba funsionamentu UUIDs Problema lokalidade index ne’e halo implementasaun sira iha tinan 10+ resin. Solusaun komun ne’ebé uza identifikadór úniku bazeadu iha tempu. Komponente primeiru (prefix) identifikadór ne’ebe hanesan tempu ne’ebé bele ordena sira ne’ebe bele halo sira bele halao iha ordena sekuenxial (no grupu) iha estrutura dadus index. Tanba identifikadór sira ne’ebe hetan iha sekuenxial, rendimentu halo inserção hanesan inserção ba númeru sekuenxial ne’ebé ida-idak. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | tempu | | aleatoriedade | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Dependente ba implementasaun ne’ebé uza, komponente seluk identifikadór nian bele geradu ho aleatoriedade kompletu, ka machine-sequenxial no kodifikadu ho númeru mákina/shard. Ezemplu implementasaun ne’e inklui ULID, ShardingID Instagram nian, Snowflake Twitter X nian no versaus modifikadu Mastodon nian. Eksperimenta ho UUIDv4 ne’ebé bazea ba tempu Iha 2022, standar proposta foun ba UUIDs ne’ebé bazea ba tempu hato’o ona atensaun, ho UUIDv7 hanesan eskritór internet RFC. Iha tempu ne’e Buildkite halo eksperimenta ho UUIDv4 ne’ebé bazea ba tempu. Ba parte primeiru 48-bit (liuliu aleatoriedade) hetan tempu. Versaun bit la’ós hanesan, ne’ebé fó posibilidade utiliza UUIDv4 bazea ba tempu hanesan regular UUIDv4. Manutensaun kompatibilidade v4 hanesan importante ba parte kustomer sira Buildkite nian. Durante eksperimentu ida ne’e, Buildkite tenta halo muda númeru versaun ba ‘7’ no hetan katak ida ne’e quebra sistema kustomer sira ne’ebé valida UUIDs maibé la hatene kona-ba UUIDv7 ona. Ho mudansa ne’e (hamutuk ho mudansa seluk sira iha periodu 6 semana), ita hetan redução 50% iha taxa WAL (Write Ahead Log) baze dadus primáriu. Redução ba IO leitura mós hetan. Redução ba taxa WAL ne’e fó posibilidade ba tim atu halo read replicas no halo tarefa migrasaun baze dadus seluk. Apresenta UUID Versaun 7 UUID Versaun 7 (UUIDv7) hanesan UUID ne’ebé bazea ba tempu ne’ebé kodifika tempu Unix ho presizaun millisecond iha 48 bit signifikante. Hanesan formatu UUID hotu, uza 6 bit atu indika versau UUID no variant. Resinente 74 bit hetan aleatoriedade. Tanba UUIDv7 bazea ba tempu, valor sira ne’ebé hetan hanesan sekuenxial, no entaun elimina problema lokalidade index nian. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | tempu_unix_ms | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | tempu_unix_ms | ver | aleatoriedade_a | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |var| aleatoriedade_b | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | aleatoriedade_b | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Natureza ordena tempu nian ba UUIDv7 hetan rendimentu DB di’ak liutan kompara ho UUIDv4 ho prefixo aleatóriu. Post husi blog quadrant 2 nian halo komparasaun UUIDs aleatóriu ho UUIDs sekuenxial no la’ós de’it hatudu rendimentu leitura ne’ebé di’ak liutan maibé mós hatudu rendimentu leitura ne’ebé di’ak liutan. UUIDv7 kontinua konforma ho formatu UUID standar, tanba perspetiva úzu prátiku, ita bele trata sira hanesan UUID seluk. Karaterístika kompatibilidade ne’e permite ita uza kolumna UUID Postgres existente no mudansa fasil

Tetun Translator

FREE
VIEW