SORU
20 NİSAN 2010, Salı


Dağıtılmış sıra numarası nesil?

Genellikle uygulanan ettiksıra numarası nesilgeçmişte kullanarak veritabanı dizileri.

örneğin Kullanarak PostgreSQL SERİ yazın http://neilconway.org/docs/sequences/

Veritabanı yok, büyük dağıtılmış sistemlerde sıra numaraları oluşturmak için sanki merak ediyorum. Kimseye herhangi bir deneyim ya da bir sıra numarası nesil elde etmek için iyi bir uygulama öneriniz var mıiş parçacığı güvenlibirden fazla müşteri için bir şekilde?

CEVAP
16 NİSAN 2011, CUMARTESİ


TAMAM, bu ilk şimdi görüyorum ki çok eski bir soru.

Arasında ayrım yapmak gerekirsıra numaralarıvebenzersiz Kimlikler(isteğe bağlı olarak) gevşek belirli bir ölçüt (genellikle kuşak time) sıralanabilir. Doğru sıra numaraları tüm diğer işçiler ne yapmış bilgisi ima olarak paylaşılan durum gerektirir. Yüksek ölçekli dağıtılmış bir şekilde bunu yapmanın kolay bir yolu yok. Her bir işçi için ağ yayınları, pencereli sıradağlar gibi şeyler içine bakmak olabilir, ve distributed hash tables for unique worker IDs, ama bir sürü iş var.

Benzersiz Kimlikleri ayrı konu, merkezi olmayan bir şekilde benzersiz Kimlikleri üreten birkaç iyi yolu vardır:

a) Twitter's Snowflake ID network service kullanabilirsiniz.Kar tanesi

  • Yani ağa bağlı hizmet benzersiz bir KİMLİĞİ almak için şebeke arama yapın;
  • nesli tarafından sipariş edilen 64 bit benzersiz Kimlikleri üreten;
  • ve hizmeti yüksek ölçekli ve (potansiyel olarak) çok kullanılabilir; her örnek saniyede kaç bin Kimliklerini oluşturmak ve LAN/WAN birden çok örneğini çalıştırabilirsiniz
  • Scala yazılmış, JVM üzerinde çalışır.

b) müşteriler kendilerini benzersiz Kimlikleri, bir kullanarak üretebiliryaklaşım how UUIDs kar Tanesi kimliğini türetilen yapılır.Birden çok seçenek, ama hat boyunca bir şey vardır:

  • En önemli 40 ya da öylesine bit:Bir zaman damgası;KİMLİĞİNİ oluşturma zamanı. (Zaman damgası için en önemli bit Kimlikleri sıralamak mümkün nesil zaman yapmak için kullanıyoruz.)

  • Sonraki 14 veya bit:Her jeneratör, sayaç,her yeni KİMLİK için ayrı ayrı jeneratör aralıklarla meydana getiren. Bu Kimlikleri (aynı zaman) aynı anda oluşturulan bir örtüşme sağlar.

  • Son 10 biti:Her bir jeneratör için benzersiz bir değer.Bu kullanarak, tüm jeneratörler örtüşmeyen bu değer nedeniyle Kimlikleri üreten jeneratörler arasında herhangi bir senkronizasyon son derece zor olan bir şey yapmamıza gerek yok.

c) müşterileri Kimlikleri, sadece bir kullanarak üretebilirve değeri, zaman damgası ve rastgele.Bu jeneratörler biliyor, ve her bir jeneratör benzersiz bir değer atamak zorunda önler. Kapak tarafında, bu Kimlikleri değildirgarantiligenel benzersiz olmak, sadece onlarbüyük ihtimalle çokbenzersiz olmak. (Çarpıştığında, bir veya daha fazla jeneratör aynı anda aynı rasgele değer yaratmak gerekir.) Şuna benzer bir şey:

  • En önemli 32 bit:Zaman damgasıKİMLİĞİNİ oluşturma zamanı.
  • En az önemli 32 bit:32-bit rastgelelik,yeniden her KİMLİĞİ için oluşturulan.

d) kolay yoldan, use UUIDs / GUIDs.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Best Quality Cartoons

    Best Quality

    10 ŞUBAT 2014
  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006