Geleneksel bir N sunucusu <-> 1 RDBMS stil sisteminde, veritabanı bu tür tutarsızlıkları önlemeye yardımcı olan merkezi bir senkronizasyon noktası olarak kullanılır.
Olay kaynaklı sistemlerde, "olay deposu" aynı rolü üstlenir. Etkinlik kaynaklı bir nesne için, yazmanız yeni etkinliklerinizin etkinlik akışının belirli bir sürümüne eklenmesi anlamına gelir. Böylece, eşzamanlı programlamada olduğu gibi, komutu işlerken bu geçmiş üzerinde bir kilit elde edebilirsiniz. Olay kaynaklı sistemlerin daha iyimser bir yaklaşım benimsemesi daha yaygındır - önceki geçmişi yükleyin, yeni geçmişi hesaplayın, sonra karşılaştırın ve değiştirin. Bu akışa başka bir komut daha yazdıysa, karşılaştırma ve takas başarısız olur. Oradan, ya emrinizi tekrar çalıştırırsınız ya da emrinizden vazgeçersiniz, hatta sonuçlarınızı geçmişle birleştirebilirsiniz.
M komutlarına sahip tüm N sunucuları tek bir akışa yazmaya çalışıyorsa, devam etmek büyük bir sorun haline gelir. Buradaki genel cevap, modelinizdeki her olay kaynaklı varlığa bir geçmiş tahsis etmektir. Yani Kullanıcı (Bob) Kullanıcıdan (Alice) farklı bir geçmişe sahip olur ve birine yazmak, diğerine yazmayı engellemez.
Benim sorum: Olay kaynaklı sistemler tipik olarak bu soruna nasıl yaklaşıyor? Her komutu sırayla işler mi?
Set Doğrulaması için Greg Young
İş mantığını hizmet katmanına taşımadan etki alanı nesne özniteliklerindeki benzersiz çelişkileri kontrol etmenin zarif bir yolu var mı?
Kısa cevap, birçok durumda, bu gereksinimin daha derinlemesine araştırılması, ya (a) başka bir gereklilik için iyi anlaşılmamış bir vekil olduğunu ya da (b) "kural" ihlallerinin tespit edilebilirse kabul edilebilir olduğunu ortaya koymaktadır (istisna raporu) , belirli bir zaman aralığında hafifletilir veya düşük frekanslıdır (örneğin: istemciler, kullanmak üzere bir komut göndermeden önce bir adın kullanılabilir olup olmadığını kontrol edebilir).
Olay deponuzun ayar doğrulamasında iyi olduğu bazı durumlarda (yani, ilişkisel bir veritabanı), gereksinimi, olaylara devam eden aynı işlemde "benzersiz adlar" tablosuna yazarak gereksinimi uygularsınız.
Bazı durumlarda, yalnızca tüm kullanıcı adlarının aynı akışta yayınlanmasını sağlayarak gereksinimi uygulayabilirsiniz (bu, alan adı modelinizin bir parçası olarak bellekteki ad kümesini değerlendirmenize olanak tanır). - Bu durumda, iki işlem "" geçmişini güncelleme girişimini güncelleyecek, ancak karşılaştırma ve takas işlemlerinden biri başarısız olacak ve bu komutun yeniden denenmesi çakışmayı algılayabilecektir.