SORU
15 AĞUSTOS 2011, PAZARTESİ


Olay depolama kaynak olarak bir VERİTABANI kullanarak

Eğer bir VERİTABANI (örneğin SQL Server) veri kaynak olay depolamak için kullanıyor olsaydım, şema neye benziyor acaba?

Bir kaç varyasyon hakkında konuştuk soyut bir anlamda gördüm ama somut bir şey yok.

Örneğin, bir "Ürün" varlık ve ürün şeklinde gelebilir değişiklikleri: Maliyet ve Fiyat Açıklama. Bir var ki İstiyorum olup olmadığı hakkında kafam karıştı:

  1. Bir "ProductEvent" tablo, sahip olduğu tüm alanlar için bir ürün, her değişim demek yeni bir rekor bu tablo, ayrıca "kim, ne, nerede, neden, ne zaman ve nasıl" gibi uygun. Maliyet, fiyat veya açıklama değiştirildiğinde, yepyeni bir satır olarak Ürün göstermek için eklendi.
  2. Ayrı tabloları bir yabancı anahtar ilişkisi ile Ürün alanına tablo ürün Maliyet, Fiyat ve Açıklama saklayın. Bu özellikleri değişiklik olduğunda, uygun olarak WWWWWH ile yeni bir satır yaz.
  3. Mağaza WWWWWH, artı bir serialised nesne temsil eden olay, bir "ProductEvent" tablosu, yani olayın kendisi olmalı yüklü, de-serialised ve yeniden oynadı benim uygulama kodu için yeniden inşa uygulama devlet için verilen bir Ürün.

Özellikle seçenek 2 yukarıda endişeleniyorum. Alınan aşırı, ürün tablo neredeyse bir masa başına mülkiyet, nereye yük Uygulama Durumu için verilen bir ürün gerektirecek yükleme tüm olaylar için bu ürün her ürün olay tablo. Bu patlama masa kokuyor bana yanlış.

Eminim "duruma göre değişir", ve tek var iken, "doğru cevap" kabul edilebilir ne için bir fikir almak için çalışıyorum, ve ne olduğunu tamamen kabul edilemez. Ben de farkında olan NoSQL yardımcı olabilir burada, burada olaylar olabilir saklanmış bir toplu kök, anlam yalnızca bir tek isteği veritabanına almak olayları yeniden nesneden, ama değiliz kullanarak bir NoSQL db şu anda öyle hissediyorum etrafında alternatifleri.

Şimdiden çok teşekkürler.

CEVAP
15 AĞUSTOS 2011, PAZARTESİ


Olay deposu olayların belirli alanları veya özellikleri hakkında bilmek gerekmez. Modelinizin aksi takdirde her değişiklik veritabanınızın iyi eski moda dayalı bir devlet dayanıklılık gibi) göç etmek zorunda kalmasına neden olur. Bu nedenle seçenek 1 ve 2 hiç tavsiye etmem.

Aşağıda Ncqrs kullanılan şema. "Olay" bir CLOB (yani JSON veya XML) ve ilgili verileri saklar. tabloda gördüğünüz gibi Bu seçenek 3 "ProductEvents sadece "" tablo. Olaylar bir jenerik lazım çünkü" tablo yok (Sadece karşılık gelir Ncqrs Toplama Kökleri için eşleme "" her gerçek bir Toplama Kök karşılık EventSource. nereye tablo) EventSources ile olur

Table Events:
    Id [uniqueidentifier] NOT NULL,
    TimeStamp [datetime] NOT NULL,

    Name [varchar](max) NOT NULL,
    Version [varchar](max) NOT NULL,

    EventSourceId [uniqueidentifier] NOT NULL,
    Sequence [bigint], 

    Data [nvarchar](max) NOT NULL

Table EventSources:
    Id [uniqueidentifier] NOT NULL, 
    Type [nvarchar](255) NOT NULL, 
    Version [int] NOT NULL

Jonathan Oliver's Event Store implementation SQL kalıcılık mekanizması temelde bir tablo denir "" BLOB bir alan ile"". Yük Tamamlar Bu ikili biçimde, örneğin, şifreleme desteği ekler) olayın özelliklerini sıralar sadece oldukça Ncqrs içinde aynıdır.

Greg Young, benzer bir yaklaşım, extensively documented on Greg's website olarak önerir.

Onun proto şema "Olaylar" okur: tablo

Table Events
    AggregateId [Guid],
    Data [Blob],
    SequenceNumber [Long],
    Version [Int]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • Ludique

    Ludique

    21 NİSAN 2009
  • RealPapaPit

    RealPapaPit

    16 Mart 2009