3. Event Sourcing ile Veri Yönetimi

01 Mart 2025

Serinin 2. Yazısı : 2. CQRS (Command Query Responsibility Segregation) Mimarisi

Serinin 4. Yazısı : 4. Hexagonal Architecture (Onion / Ports and Adapters)

Event Sourcing Nedir?

Event Sourcing, geleneksel veritabanı işlemlerinden farklı olarak, verilerin doğrudan saklanması yerine, tüm olayların (event’lerin) sıralı bir şekilde kaydedilmesini temel alan bir mimari yaklaşımdır. Geleneksel CRUD operasyonlarında, bir veri tablosunda sadece en güncel hali saklanırken, Event Sourcing her değişikliği bir olay (event) olarak saklar ve bu olaylar sistemin geçmişine erişmeyi mümkün kılar.

Geleneksel Veri Yönetimi vs. Event Sourcing

Özellik

Geleneksel Veri Yönetimi

Event Sourcing

Veri Saklama

Sadece son hali tutulur

Tüm olaylar kayıt edilir

Geçmişe Erişim

Veri geçmişi kaybolabilir

Tüm değişiklikler geri alınabilir

Performans

Büyük tablolar yavaşlayabilir

Olay bazlı indeksleme sağlar

Karmaşıklık

Daha basit bir yapıdır

Ekstra veri işleme gerektirir

 

Event Sourcing’in Avantajları

  •  Gerçek Zamanlı Veri Takibi: Sistem geçmişi geriye dönük analiz edilebilir.
  •  Audit Log (Denetim Kaydı): Tüm işlemler kaydedildiği için geçmiş değişiklikler incelenebilir.
  •  Dağıtık Sistemlerle Uyumlu: Mikroservisler arasında veri tutarlılığı sağlar.
  •  Geri Alma (Rollback): Her olay geri alınarak sistemin eski haline döndürülmesi mümkün olur.

.NET Core ile Event Sourcing Uygulaması

Event Sourcing'i bir CQRS tabanlı sistemle entegre ederek nasıl kullanabileceğimizi inceleyelim.

Event Tanımlama

public class ProductCreatedEvent
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public DateTime CreatedAt { get; set; }
}

 

Event Store Kaydı

public class EventStore
{
    private readonly List<ProductCreatedEvent> _events = new List<ProductCreatedEvent>();

    public void Save(ProductCreatedEvent @event)
    {
        _events.Add(@event);
    }

    public IEnumerable<ProductCreatedEvent> GetEvents()
    {
        return _events;
    }
}

 

Event’in İşlenmesi

public class ProductService
{
    private readonly EventStore _eventStore;

    public ProductService(EventStore eventStore)
    {
        _eventStore = eventStore;
    }

    public void CreateProduct(string name, decimal price)
    {
        var productEvent = new ProductCreatedEvent
        {
            Id = Guid.NewGuid(),
            Name = name,
            Price = price,
            CreatedAt = DateTime.UtcNow
        };
        _eventStore.Save(productEvent);
    }

    public IEnumerable<ProductCreatedEvent> GetProductHistory()
    {
        return _eventStore.GetEvents();
    }
}

 

Event Sourcing, özellikle yüksek güvenilirlik gerektiren finans, sağlık ve e-ticaret gibi alanlarda büyük avantajlar sağlar. CQRS ile birlikte kullanıldığında, sistem performansını artırırken veri güvenliğini de sağlamlaştırır.

 

Serinin 2. Yazısı : 2. CQRS (Command Query Responsibility Segregation) Mimarisi

Serinin 4. Yazısı : 4. Hexagonal Architecture (Onion / Ports and Adapters)

Yorumlar
Ferdane aşkın - 5.03.2025 22:22:15
Güzel