Etkinlik kaynağı ve kalıcılık


12

Etkinlik satın almayı okuyorum ve kalıcılıkla ilgili bir sorum var.

Hala tüm varlıkları olan bir DB alabilirim, değil mi? Veya uygulama bellekteki her bir varlığın en son sürümünü almak için her başlatıldığında olaylar yeniden oynatılmalı mıdır? Daha büyük sistemlerde (büyük miktarda veri gibi) atık gibi mi görünüyor?

Olay kaynak ile nokta gerekirse bir veri deposu doldurmak için olayları yeniden olabilir miyim? (veya verileri analiz edin)

Yanıtlar:


9

Sistem mimarinizi de değiştirmeye karar verdiğinizde etkinlik kaynaklarından en iyi şekilde yararlanacaksınız. DDD ile birleştirilmiş bir CQRS tarzı mimariye doğru gitmek, en azından benim görüşüme göre, bir olay kaynağının gerçek faydalarını getirecektir.

Büyük sistemlerde iyi davranan bir etkinlik mağazası oluşturmak aslında kolay bir iş değildir. Tüm verilerin tekrar oynatılması gerçekten pahalı olabilir, büyük ölçüde yeniden oynatılması gereken veri miktarına bağlıdır. Ancak bu konuda size yardımcı olabilecek teknikler var, bunlardan biri anlık görüntü kavramı. Yeniden oynatma yalnızca belirli bir noktadan itibaren yapılır. Bir etkinlik deposunun sisteminize getirdiği avantajlar paha biçilmezdir. Sisteminizde olan her şeyin tekrar oynatılabilmesini sağlamak, her andaki tüm veriler harika bir şeydir. Analiz, hata üretimi, istatistikler hakkında düşünün.

Çok sayıda büyük etkinlik mağazası var, sonuncusu dün Event Store'da piyasaya sürüldü ve gerçekten iyi bir mağaza gibi görünüyor.

Geleneksel veritabanı, DTO'ları istenen verilerle oluşturmak için sisteminizin sorgu kısmı için saklanabilir. Bu veritabanı, uygulamanızın ve istemcilerinizin sorgu ihtiyaçları göz önünde bulundurularak organize edilebilir ve optimize edilebilir.

Faydaların neler olduğu ve olay kaynağı ile birleştirilmiş bir CQRS mimarisinin nasıl göründüğü hakkında ayrıntılı bir makale yazdım. CQRS, Domain Events ve DDD incelemelerine göz atabilirsiniz .


1
CQRS ve DDD hakkında her şeyi biliyorum. Olay satın almanın faydalarını anlıyorum. Anlık görüntüler işlemi hızlandırmanın harika bir yoludur. Ancak bu sorunun bir parçası değildir. Ancak soru, yüklendikten sonra tüm modellerin / varlıkların nerede saklanacağıydı. Bellekte (daha büyük sistemlerde LOT bellek gerektirir) veya DB'de? En iyi uygulama nedir?
jgauffin

1
Belirli bir komutu gerçekleştirmek için bir toplamı yeniden oluştururken olaylar yeniden oynatılır ve toplam bellekte tutulur, işlemi gerçekleştirir, olayları oluşturur ve olayları olay deposunda saklar. Ancak evet, değer nesneleri ve varlıklarıyla birlikte toplam hafızada tutulur. Bunları başka bir veritabanında tutmanıza gerek yoktur. Komut yine de tamamlanana kadar bu kısa bir süre olurdu. Biraz farklı olan çoklu toplamalara yayılan komutlarınız varsa, sınırlı bağlamlarınızla ilgili bazı tasarım sorunlarına da işaret edebilir.
Vadim

9

Event Sourcing ile ana soru "kayıt defteriniz nedir".

Eğer kayıt defteriniz etkinlik akışınızsa, sorun yaşamazsınız. Eğer kayıt defteriniz "varlık modeliniz" ise, her yerde sorunlar yaşanmaya başlayacaktır. Bunun bir parçası, "Varlık modelimi kaybedersem olay akışımdan yeniden oluşturabilir miyim" diyebilirsiniz. Bu soruya olumlu bakıyorsanız, Olay Günlüğünüz kayıt defterinizdir.

Etkinlik kaynağı kullanan çoğu insanın okuma modeli kullandığını hatırlamak da önemlidir. Bu model veri sorgulamak için kullanılır. Bu bir 1nf modeli gibi bir şey 3nf varlık modelinden daha muhtemel görünmektedir. Yalnızca yazma işlemlerine izin verilip verilmeyeceğini belirlemek için toplu durumları geri almak için etkinlikleri tekrarlar.


Merhaba Greg, olay kaynak konusunda yeniyim ama gerçekten bu konuda ustalaşmak istiyorum, lütfen pratik örnekler ve açıklamalar için bazı kaynaklar önerebilir misiniz, CQRS, ES hakkında çok şey izledim ve okudum ama bir prototip başlatmak istediğimde onu kullanarak gerçekten nerede ne zaman anlayamıyorum :) Umarım benim için bir şey önerebilirim (Java tarafındayım). Zaman ayırdığınız için teşekkürler.
vach

1

Hala tüm varlıkları olan bir DB alabilirim, değil mi? Veya uygulama bellekteki her bir varlığın en son sürümünü almak için her başlatıldığında olaylar yeniden oynatılmalı mıdır?

Yanıt, uygulamanızın gereksinimlerine bağlıdır. Her iki şekilde de yapıldığını gördüm.

Küçük muhasebe firmaları için son derece başarılı bir yazılım paketi, başlangıçta her seferinde CQRS kaydını okur. Ham veri miktarı nispeten küçüktü, bu nedenle yavaş bilgisayarlarda bile başlatma süresi bir dakikanın altındaydı. Uygulama popüler hale gelmeden önce on yıldan fazla bir süredir CQRS yapıyorlar. Daha büyük sistemlerinde gördükleri sıkıntılarla karşılaşmadan müşteri verilerini tekrar tekrar yükseltebileceklerini anladıklarında iyi bir şey üzerinde olduklarını biliyorlardı.

Daha büyük hacimli veriye ve / veya sorgu tarafını uygulamak için RDBMS işlevselliğine dayanan sistemlerde, olay kaynaklı verilerin "geçerli görünümü" için bir veritabanınız vardır (bu tür birden çok görünüme bile sahip olabilirsiniz). Bu yaklaşımın avantajı, tanıdık teknolojileri kullanarak sorgu tarafını oluşturmanıza izin vermesidir.


Hangi muhasebe paketini yapıyor?
magnus

@ user1420752 Axys .
dasblinkenlight
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.