Alat pembangun · UUID penjana
ULID, Snowflake, KSUID dan UUIDv7: ID Boleh Isih Dibandingkan
· Latar belakang
uuid kriptografi pelayar-apis
UUID rawak tidak mengisih mengikut masa penciptaan, jadi beberapa format meletakkan cap masa dahulu. Siaran ini membandingkan ULID, Snowflake, KSUID dan UUIDv7 pada reka letak, saiz, monotoni dan keserasian.
ID rawak dan indeks yang membencinya — masalah yang diselesaikan oleh pengecam tersusun masa
UUID v4 rawak menyerakkan titik sisipan merentasi kunci utama B-tree apabila rekod baharu tiba, menyebabkan pemisahan halaman dan penyusunan semula. Sisipan pada kedudukan rawak merendahkan prestasi tulis dan meningkatkan pemecahan cakera dengan ketara. Pangkalan data pemprosesan tinggi bertolak ansur dengan kos ini—harga pengecam yang benar-benar bebas dan tidak diselaraskan—tetapi kosnya adalah nyata. Jika anda memerlukan UUID untuk mengisih mengikut masa penciptaan, anda boleh meningkatkan ciri indeks secara mendadak dengan menambahkan awalan cap masa. Beberapa format telah muncul: ULID, Snowflake, KSUID dan RFC 9562 v7. Setiap satu membuat tukar ganti yang berbeza dalam saiz (26 aksara kepada 128 bits), ketepatan cap masa (saat hingga nanosaat), keserasian UUID dan sama ada penyelarasan penjana ID memerlukan pemusatan. Penanda aras pangkalan data menunjukkan prestasi sisipan bertambah baik dengan ketara.
ULID — cap masa 48-bit milisaat ditambah 80 bit rawak dalam 26 aksara Crockford asas32, dengan pilihan monoton
ULID (Pengecam Boleh Susun Leksiografi Unik Sejagat) mengekod a 48-cap masa milisaat bit dan 80-bit muatan rawak masuk 26 watak Crockford base32. Perwakilan teks diisih dengan betul dalam susunan leksikografi, menjadikan ULID sesuai untuk sistem yang pesanan cap masa dan kebolehbacaan penting—pemprosesan log, pengesanan teragih, perkhidmatan mikro yang pengecam perlu mudah dibaca dalam output yang menghadap manusia. ULID menawarkan varian monotonik di mana berbilang pengecam yang dijana dalam satu milisaat yang sama menambah bahagian rawak dan bukannya berulang, memastikan letusan ID yang pantas mengekalkan susunan penjanaan yang ketat. Tradeoff adalah bahawa ULID bukan a UUID: ia tidak sesuai dengan standard 128-sedikit UUID lajur pangkalan data tanpa penukaran pengekodan. ULID ketepatan meliputi kira-kira 8925 tahun.
Kepingan salji — 64-bit ID daripada cap masa, ID pekerja dan jujukan serta penyelarasan yang diperlukan
Snowflake ialah pengecam 64-bit yang asalnya direka oleh Twitter, distrukturkan sebagai 41-bit milisaat cap waktu, ID pekerja 10-bit dan nombor jujukan 12-bit. Cap masa 41-bit meliputi kira-kira 69 tahun dan melimpah dalam 2106, memerlukan penyelarasan zaman dan perancangan migrasi. ID pekerja membezakan pengecam yang dijana oleh pelayan atau proses yang berbeza—setiap penjana Snowflake mesti mengetahui ID pekerja uniknya sendiri tanpa bercanggah dengan orang lain. Kepingan salji ialah 64 bits dan bukannya 128, menjadikannya separuh saiz UUID, lebih pantas untuk diindeks dan lebih cekap storan bagi setiap pengecam. Ia mengisih mengikut masa dan ID pekerja, berguna untuk penghalaan permintaan atau log mengikut sumber. Kelemahannya adalah beroperasi: setiap penjana mesti diberikan ID pekerja, jam mesti sentiasa disegerakkan.
KSUID — cap masa saat dengan muatan rawak yang besar, diisih sebagai bait
KSUID (K-Sortable Unique Identifier) ialah a 128-pengecam bit yang terdiri daripada a 32-bit Unix cap waktu kedua dan a 96-beban rawak bit, biasanya dikodkan sebagai 27 asas62 aksara. Format ini boleh diisih dalam susunan leksikografi, dan bahagian rawak adalah bunyi kriptografi untuk saiznya. KSUID kurang diterima pakai secara meluas berbanding ULID atau Snowflake tetapi menawarkan semantik yang berbeza: cap masa mudah dinyahkodkan kepada detik yang boleh dibaca manusia (berguna dalam log dan penyahpepijatan), dan 96-bahagian rawak bit cukup besar sehingga berbilang KSUID yang dijana dalam saat yang sama mempunyai kebarangkalian sifar pendua secara berkesan tanpa penyelarasan jujukan. Tidak seperti Snowflake, KSUID tidak memerlukan penyelarasan ID pekerja atau peruntukan pusat. KSUID beroperasi pada saat dan bukannya milisaat, jadi berbilang ID dalam satu saat diisih secara rawak melainkan anda melaksanakan logik tambahan.
UUIDv7 — jawapan runut piawai yang sesuai dengan lajur uuid dan perkakas sedia ada
RFC 9562 v7 ialah a 128-pengecam bit yang terdiri daripada a 48-bit Unix milisaat cap waktu, 12 bits ketepatan sub-milisaat (boleh digunakan sebagai pembilang jujukan), dan 62 bit rawak semuanya digabungkan. Ia disusun dengan betul sebagai rentetan leksikografi dan sebagai 128-bit bait dalam pangkalan data. Yang penting, ia adalah sah UUID—ia menetapkan versi nibble kepada 7 dan bit varian kepada RFC 9562 standard, menjadikannya serasi dengan setiap alat, lajur pangkalan data dan API yang mengendalikan UUID. Tiada penukaran pengekodan diperlukan dan sedia ada UUID infrastruktur tidak memerlukan pengubahsuaian. Jika berbilang pengecam v7 dijana dalam milisaat yang sama, RFC 9562 mengesyorkan menggunakan medan sub-milisaat sebagai pembilang monoton dan bukannya bit rawak. V7 mewakili pilihan pragmatik untuk dikekalkan UUID keserasian.
Kemonotonan dalam satu milisaat — cara setiap format mengendalikan letupan dan sebab ia penting untuk jaminan pesanan
Monotonik ialah sifat yang jika dua peristiwa berlaku dalam susunan yang boleh diperhatikan, ID mereka akan dibandingkan dalam susunan yang sama. Pada kebutiran peringkat milisaat pada perkakasan moden, berbilang peristiwa secara rutin berlaku dalam tanda jam yang sama, jadi mana-mana skema ID boleh diisih mesti mengendalikan pesanan sub-milisaat dengan betul. ULID menawarkan mod monotonik eksplisit di mana bahagian rawak bertambah dan bukannya rawak. Kepingan salji termasuk nombor jujukan 12-bit yang meningkat dalam masa satu milisaat. KSUID tidak mempunyai mekanisme terbina dalam, jadi peristiwa subsaat diisih secara rawak melainkan logik tambahan ditambahkan. RFC 9562 v7 mengesyorkan menggunakan medan sub-milisaat sebagai pembilang monotonik. Jika sistem anda menjana beribu-ribu UUID sesaat, monotonisitas dalam satu milisaat memberi kesan ketara pada susunan pertanyaan.
Perkara yang tidak dilindungi ini — penanda aras pemprosesan, yang bergantung pada perkakasan dan bahasa; jawatan itu kekal kualitatif
Penanda aras throughput dan data prestasi tidak disertakan kerana ia sangat bergantung pada seni bina perkakasan, pelaksanaan bahasa, enjin pangkalan data dan strategi caching. Ciri prestasi pangkalan data berbeza dengan ketara mengikut sama ada anda mengukur sisipan rawak, pertanyaan julat, overhed indeks atau jumlah daya pengeluaran di bawah beban pengeluaran yang realistik. Siaran itu kekal kualitatif, membandingkan format secara konsep berdasarkan reka bentuknya dan bukannya menyediakan nombor khusus persekitaran yang boleh mengelirukan. Penilaian prestasi dunia sebenar memerlukan ujian dalam persekitaran anda sendiri dengan beban kerja, asas kod dan kekangan operasi anda sendiri. Menanda aras format ID yang berbeza adalah latihan yang berharga.
Bawa pulang: keserasian sering menentukan — penjana ToolAcre menghasilkan UUID rawak; gunakan semakan yang dibentuk dengan baik untuk mengesahkan bahawa UUIDv7 daripada pustaka anda menghuraikan sebagai UUID
Keserasian selalunya menentukan format yang hendak dipilih. Jika skema pangkalan data anda sudah memerlukan UUID lajur, v7 ialah jawapan moden untuk kebolehurutan tanpa meninggalkan ekosistem UUID. Jika membina sistem baharu dengan jenis ID tersuai, ULID menawarkan perwakilan teks yang lebih kecil dan kelebihan ketepatan milisaat. Jika anda memerlukan storan 64-bit dan boleh mengurus penyelarasan ID pekerja melalui peruntukan terpusat, Snowflake ialah pilihan yang terbukti dalam sistem volum tinggi. Pertukaran asas adalah antara keserasian standard (pilih v7) dan sifat alternatif seperti saiz yang lebih kecil (Snowflake) atau kebolehbacaan asas32 (ULID). Buat pilihan berdasarkan kekangan sistem dan keputusan ekosistem.