MongoDB ObjectID Oluşturucu - Benzersiz BSON Tanımlayıcıları Oluşturma
Ücretsiz çevrimiçi aracımızla anında benzersiz MongoDB ObjectID'leri oluşturun. Test, geliştirme ve veritabanı işlemleri için geçerli 12 baytlık BSON tanımlayıcıları oluşturun. Kurulum gerektirmez.
MongoDB ObjectID Oluşturucu
Belgeler
MongoDB ObjectID nedir?
MongoDB ObjectID, MongoDB'nin her belgenin _id alanına varsayılan olarak atadığı 12 baytlık bir değerdir. 24 küçük harfli onaltılık karakter olarak yazılır; örneğin 507f1f77bcf86cd799439011. Bu araç, veritabanı bağlantısı gerektirmeden doğrudan tarayıcıda bir seferde 1 ile 100 arasında geçerli ObjectID üretir.
MongoDB ObjectID yapısı
Bir ObjectID, art arda yerleştirilen üç bölümden oluşur:
- Zaman damgası (4 bayt). 1 Ocak 1970 tarihinden (Unix başlangıç zamanı) bu yana geçen saniye sayısıdır ve işaretsiz, büyük endian biçiminde saklanır. ObjectID'nin ne zaman oluşturulduğunu kaydeder. Dört bayt 0 ile 4.294.967.295 arasındaki değerleri tutar; bu nedenle alan, 06:28:15 UTC'de 7 Şubat 2106 tarihinden sonra 0 değerine döner.
- Rastgele değer (5 bayt). Bir program başlatıldığında bir kez rastgele seçilen sayıdır. Bu programın daha sonra oluşturduğu her ObjectID aynı rastgele değeri yeniden kullanır; bu nedenle farklı bilgisayarların koordinasyon kurması gerekmez.
- Sayaç (3 bayt). 0 ile 16.777.215 arasında rastgele bir noktadan başlayan ve her yeni ObjectID için 1 artan sayıdır. 16.777.215 değerini aşarsa 0 değerine döner.
Uç uca yerleştirildiğinde bölümler şöyle görünür:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Daha eski MongoDB sürücüleri orta bölümü rastgele sayı yerine makine tanımlayıcısı ve işlem kimliğinden oluşturuyordu. Bu aracın arkasındaki mantık da dahil olmak üzere güncel sürücüler, işlem başına tek bir rastgele 5 baytlık değer kullanır.
MongoDB ObjectID biçimi ve formülü
Yüzde veya faiz hesaplamasının aksine, bir ObjectID'nin arkasında aritmetik bir formül yoktur. Üç sayının onaltılık metne dönüştürülmesi ve uç uca birleştirilmesiyle oluşturulur:
- Unix başlangıç zamanından bu yana geçen saniye cinsinden geçerli zamanı alın ve dört bayta sığması için 0 ile 4.294.967.295 aralığına sarın. Bunu 8 basamaklı bir onaltılık sayı olarak yazın.
- İşlemin sabit rastgele değerini, 0 ile 2^40 − 1 arasındaki bir sayıyı alın. Bunu 10 basamaklı bir onaltılık sayı olarak yazın.
- Sayacın 0 ile 16.777.215 arasındaki geçerli değerini alın. Bunu 6 basamaklı bir onaltılık sayı olarak yazın, ardından sonraki kimlik için sayacı 1 artırın.
- Üç onaltılık dizeyi bu sırayla birleştirerek tek bir 24 karakterlik dize oluşturun.
Çözümlü örnek
Bir programın Unix zamanında 1.700.000.000 saniyede, yani UTC'de 14 Kasım 2023, 22:13:20 tarihinde başladığını varsayalım. Program 3f2a91c8d4 rastgele değerini seçer ve sayacını 12.345 değerinden başlatır.
- Onaltılık biçimde zaman damgası:
6553f100 - Onaltılık biçimde rastgele değer:
3f2a91c8d4 - Onaltılık biçimde sayaç:
003039
Bunlar birleştirildiğinde ilk ObjectID elde edilir:
6553f1003f2a91c8d4003039
Program aynı saniye içinde ikinci bir ObjectID üretirse zaman damgası ve rastgele değer aynı kalır, ancak sayaç 12.346 (00303a) değerine yükselir:
6553f1003f2a91c8d400303a
Bir ObjectID'yi okumak da ters yönde çalışır. 507f1f77bcf86cd799439011 verildiğinde, ilk 8 karakteri olan 507f1f77, başlangıç zamanından bu yana geçen 1.350.508.407 saniyeye karşılık gelir; bu da UTC'de 17 Ekim 2012, 21:13:27 tarihidir.
MongoDB ObjectID'lerinin yaygın kullanım alanları
- Birincil anahtarlar. Farklı bir değer sağlanmadıkça MongoDB, bir belgenin
_idalanına otomatik olarak bir ObjectID yerleştirir. - Oluşturulma zamanına göre arama. Zaman damgası gömülü olduğundan program, ayrı bir tarih alanına gerek kalmadan belgenin yaklaşık oluşturulma zamanını okuyabilir.
- Ekleme sırasına göre sıralama. Belgelerin
_iddeğerine göre sıralanması, zaman damgası değerin başında yer aldığı için belgeleri yaklaşık olarak oluşturulma zamanına göre sıralar. - Test ve sahte veriler. Geliştiriciler, veritabanı çalıştırmadan örnek belgeler veya otomatik testler oluşturmak için üretilmiş ObjectID'leri kullanır.
MongoDB ObjectID ile UUID karşılaştırması
UUID (Evrensel Benzersiz Tanımlayıcı), ObjectID'den dört bayt daha büyük, 16 baytlık bir değerdir. Standart bir UUID genellikle baştan sona rastgeledir; bu nedenle oluşturulma zamanını ortaya çıkarmaz ve oluşturulma sırasına göre sıralanmaz. ObjectID daha kısadır ve yaklaşık olarak zaman sıralıdır; MongoDB'nin varsayılan olarak onu kullanmasının nedenlerinden biri budur. Ancak düzgün oluşturulmuş bir UUID'nin sağladığı aynı biçimsel benzersizlik garantisini taşımaz.
Sık sorulan sorular
MongoDB ObjectID ne için kullanılır?
MongoDB'nin bir belgenin _id alanına yerleştirdiği varsayılan değerdir; böylece her belge, ek kurulum gerektirmeden benzersiz bir anahtar alır.
MongoDB ObjectID'lerinin benzersiz olduğu garanti edilir mi? Biçimsel ve matematiksel anlamda hayır; ancak çakışma olasılığı son derece düşüktür. İki ObjectID'nin aynı saniye içinde aynı rastgele değere ve aynı sayaç konumuna sahip olması gerekir; bu durum normalde yalnızca tek bir işlem içinde gerçekleşir.
Oluşturulma tarihi bir ObjectID'den okunabilir mi? Evet. İlk 8 onaltılık karakter, yani 4 bayt, Unix başlangıç zamanından bu yana geçen saniye sayısını tutar. Bu sayının tarihe dönüştürülmesi yaklaşık oluşturulma zamanını verir.
Bu oluşturucu aynı anda kaç ObjectID üretebilir? Toplu işlem başına 1 ile 100 arasında. Bir toplu işlemdeki her kimlik işlem genelindeki aynı rastgele değeri paylaşır ve her birinin sayacı bir öncekinden daha yüksektir.
MongoDB ObjectID'leri MongoDB dışında kullanılabilir mi? Evet. Onaltılık metin olarak kodlanmış yalnızca 12 baytlık değerler oldukları için diğer sistemlerde de benzersiz kimlikler olarak çalışırlar; ancak bir veritabanının kendi kimlik şeması ihtiyaçlarına daha uygun olabilir.
Bu oluşturucu gerçek bir MongoDB veritabanına bağlı mı? Hayır. Tamamen tarayıcıda çalışır ve herhangi bir veritabanından okuma yapmaz veya veritabanına yazmaz.
Kaynaklar
- "ObjectId." MongoDB Kılavuzu, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON Spesifikasyonları, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON Spesifikasyonu, https://bsonspec.org/spec.html.