2009-11-06 19 views

cevap

11

Sürüm numarası daha iyi çünkü kullandığınız zaman biçimi ne olursa olsun, sunucu saatinin yanlış olması veya zaman içinde yanlış hale gelmesi durumunda yine de atılabilir.

Kabul etmeliyim, birçok veritabanında zaman damgası kullandım çünkü verilerin son değiştirilme zamanı için eşzamanlılık denetimi ve okunabilirlik gibi ikili bir amaca hizmet edebilir. Ancak, bir sürüm numarası kullanmak gerçekten daha iyi bir yoldur.

+0

Evet, idd, zaten bir ModifiedOn sütunum var ve bunu kullanmayı düşünüyordum, ancak fazladan bir sütun önerirsiniz? –

+0

Evet. Tabloda çok fazla sütuna sahip olmaktan nefret ettiğim kadarıyla, daha kurşun geçirmez bir çözüm. – NYSystemsAnalyst

+0

Eh, Jim'in cevabı yüzünden biraz kafam karıştı. TimeStamp, satırı değiştirirken otomatik olarak değişirse, bu oldukça kullanışlıdır. 'Hala atılabilir' ile ne demek istiyorsun? thx –

3

Sürüm numarası. Veya zaman damgası kullanıyorum, UTC olduğundan emin olacağım - bu yüzden saat dilimi ile karışıklık yoktur.

3

Bir sürüm numarası kullanıyorum, özellikle kaynak zaman damgalarınızın çözünürlüğünden daha fazla güncelleştirilebiliyorsa (ör. Zaman damgalarını saniyeler içinde saklıyorsanız, tek bir saniyede birden çok güncelleştirmeniz varsa) , sürümünüz bozulacak).

4

Lieven,

Sana SQL Server belirtmedi biliyorum, ama SQL Server bahsediyoruz EĞER sonra veri türü TimeStamp kullanmak en iyi yöntem olacaktır. Açıklamasına rağmen, tarihi ve saati yapmak için hiçbir şey yapmıyor. Aslında, sadece satırın her değiştirildiği zaman değişen ikili bir sayıdır. Böylece, eğer satırda herhangi bir değişiklik yapılırsa, zaman damgası sütununun değişeceğini biliyorsunuz demektir. Bu, sürüm numaralarına göre avantajlıdır, çünkü programcı, sürüm numarasını "korumak" zorunda değilsiniz. Gerçek Tarih/Zaman zaman damgalarının daha önce - zaman farkları vs. için atıfta bulunulan başka bir posterin daha dikkatli kullanılması gerekir.

+0

Ve hangi tipte C# zaman damgasını eşlemem gerekiyor? Çünkü bir güncelleme veya silme işleminden önce eşzamanlılık sorunlarını kontrol etmek istiyorum. (Ben gerçekten sql server ile çalışıyorum. Flex-WebORB-.NET-SQLServer). DOT'u Flex'e gönderiyoruz. Bu dtoda zaman damgasını koymam gerekecek. Dto kaydedileceği zaman, dtodaki zaman damgası veritabanındaki zaman damgasına karşılık gelirse, chack yapmam gerekecek. Teşekkürler. –

+0

İşte bu konuda bir sohbet: http://social.msdn.microsoft.com/Forums/tr-TR/adodotnetdataproviders/thread/0ad05e31-c3b2-44fb-99f5-32e80754e37a/ Ancak, sunucunun sürümleri işlemesine izin vermeyi düşündünüz mü? İyimser kilitleme kullanıyorsanız, bir sorunu algılayacak ve istisnayı atacak bir sql eklentiniz olacaktır. – BIDeveloper

+0

Bunu yapmak için sql eklentisinin sorunu tespit etmesine izin verecektim. Ancak zaman damgasını istemciye göndermeniz gerekmiyor mu? Ekliyorsanız, db'de zaman damgasını nesnenin zaman damgasıyla karşılaştırmanız gerekir. Yoksa burada bir şey mi özlüyorum? –

0

Windows kullanıyorsanız, sürüm tanımlayıcısı olarak genel olarak benzersiz bir tanımlayıcı (GUID) kullanmanızı öneririz.

Saat, kullanıcı tarafından ayarlanmışsa bir zaman damgası (UTC olsa bile) sorun çıkarabilir. Sunucu uygulaması yeniden başlatılırsa veya taşarsa (yalnızca 16 bit veya 32 bit tam sayıysa) artan bir sayı (bellekte tutulursa) sorun çıkarabilir.

-1

Sürüm numarası. DateTime bazı nedenlerden dolayı benzersiz değildir, örneğin 'Yaz saati uygulaması' - iki '2 AM' saat olabilir. (Ambiguous Time).

Sanırım yeterince imzasız 32 bit tam sayıdan fazla, çünkü pratik olarak 4,294,967,295 işlem kaydedilirken SIFIR olasılığı vardır.