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
Güzel