2014-10-12 11 views
5

Bu sadece merak ettiğim rastgele bir fikir. İzleme geçmişini yerel olarak destekleyen ORM'ler veya veritabanları var mı? Her satırın bir Kimlik ve Sürüm ile birleşik bir birincil anahtarı olduğu düşünülen bir şeyi hayal ediyorum. Bir Güncelleme, aynı Kimlik ve bir sonraki kullanılabilir Sürüm numarasıyla yeni bir satır ekler. Normal bir seçim, benzersiz olarak tanımlanan bir satırın en son sürümünü döndürür, ancak "SelectHistory" tüm satırları döndürür. Sil, doğal olarak yumuşak bir silme olur. Bu yeni bir sorun olmadığını ve güneşin altında yeni bir şey olmadığını göz önüne aldığımızda, birisinin halihazırda bunun zor kısımlarını özetleyen zarif bir çözüm tasarlamasının yüksek bir olasılık olduğunu ve bunun mümkün olabileceğini gösterdi. veritabanı katmanı veya ORM katmanında yapılabilir.ORM veya Sürüm kontrolü ve parça geçmişi gibi çalışan veritabanı

Varlık Çerçevesi üzerine kurulu mevcut bir uygulamam var. Her yeni/değiştirilmiş varlık için bir CreateBy/CreatedDate/ModifiedBy/ModifiedDate özelliklerini ayarlamak için DbContext'in SaveChanges yöntemini geçersiz kılar. Müşteri yakın zamanda, tam geçmiş takibini eklemenin ne kadar işe yarayacağını sordu. Onlara benzer sistemlerdeki geçmiş deneyimlere dayanarak makul bir tahmin verdim. Tahminim, bu varlıkları doldurmak için modele ve iş katmanı mantığına ek varlıklar eklemeyi içeriyordu. Müşteri bu işi izlememeye karar verdi, ama daha iyi bir yol olup olmadığını merak etmemi sağladı. Entity Framework ile daha iyi bir çözüm var mı? Diğer mimarilerle daha iyi çözümler var mı?

+0

Bu konuda wordpress veritabanlarımızı güncellemek için farklı bir tack aldım. Yaptığım şey, bir gece mysqladmin'in bir sürümlü çalışma dizinine dökülmesiydi. Damper tamamlandıktan sonra, sadece değişiklikleri yapardım. – B2K

cevap

0

Tanımladığınız şey, multi-version concurrency control biçimidir. Tipik olarak MVCC, salt okunur işlemler sırasında kilitlenmekten kaçınmak için bir veritabanı uygulaması tarafından kapakların altında kullanılır, ancak önerdiğiniz gibi açık hale getirilebilir. this question'da açık MVCC'yi uygulamak için bazı farklı seçenekler hakkında bir tartışma var. Her sürüm için bir Oluşturma Tarihini de izliyorsanız, temporal database için ihtiyacınız olan her şeye sahip olursunuz.

İlgili konular