Merhabalar,
Hali hazırda 500 firmaya hizmet veren bulut tabanlı bir projemiz var. Bu projede MSSQL veritabanında birbiri ile ilişki bir çok tablo ve her geçen gün sayıları artmakta olan kayıtlar bulunmaktadır.
İlişkiler int kolonlar üzerinden sağlanmakta. Kayıt sayıları kısa sürede milyonları geçiyor ve verileri geçmiş veriler şeklinde tablolara aktarma yapmamız (ERP uygulamalarındaki devir gibi) gerekiyor.
Ayrıca int max değeri de bir gün bizi sıkıntıya sokacaktır. Taşıma işlemi içinde bizim daha farklı veri tipi kullanmamız gerekiyor.
Bu aşama uniqueidentifier kullanmak ne kadar doğru olur? Veri taşımak birleştirmek için gayet mantıklı bir tip olduğu biliyoruz fakat index konusunda bir sorun yaratır mı fikirlerinize danışmak istedim.
GUID kullanırsak da mutlaka SEQUENTIAL mı kullanmalıyız?
Birde verileri eski tablolara taşımak yerine SQL Server Partition Table kullanmak sizce nasıl olur?
Fikirlerinizi paylaşırsanız sevinirim.
İyi çalışmalar
--
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To unsubscribe from this group and stop receiving emails from it, send an email to altdotnetturkiye+unsubscribe@googlegroups.com.
To post to this group, send email to altdotnetturkiye@googlegroups.com.
Visit this group at https://groups.google.com/group/altdotnetturkiye.
For more options, visit https://groups.google.com/d/optout.
--
@Hasan
https://github.com/twitter/snowflake
yada
https://github.com/ccollie/snowflake-net
bir bakmani tavsiye ederim.
@Can
Merak ettim, siz o GUID leri sql server tarafinda mi urettiriyorsunuz ? Yamulmuyorsam Sql Server tarafinda bir kac durum soz konusuydu bu duplicate uretmelerle ilgili. Birde ID lerin database tarafindan uretilmesi konusuna oldum olasi karsiyim ama bu baska bir konu tabiki.
--
Merhabalar,
Öncelikle yanıtlarınız için çok teşekkürler.
@Can Hocam,
PartitionTable konusunu test edip detaylı araştıracağım, sadece şunu sormak istiyorum partition table olarak kullandığınız tablolardaki ortalama kayıt sayısı nedir acaba? Fikir yürütmem adına işime yarayacak o yüzden soruyorum.
SQL’in partition table özelliğinden ziyade GUID’a geçiş yapıp 1 yıl eskide kalmış tüm verileri aktif olmayan geçmiş tablosuna alalım diye düşünüyorduk bu durumda GUID olduğunda basit bir insert select le bile bunu yapabiliyoruz fakat int de bu maalesef mümkün değil.
Yapısal olarak bir çok Windows ve web servis ilgili tablolara update, select, insert atıyor bu da data çoğaldığında performans sorunu olarak bize dönüyor. Biz düz mantık guid ‘a çevirip geçmişte kalmış dataları farklı tabloya atıp aktif tabloda hep az kayıt tutalım sorun ortadan kalksın diye düşünüyorduk. Sql partition table da bu anlama mı geliyor?
4 Byte 16 byte konusuna gelince açıkçası buradaki veri falan disk anlamında bizi çok üzmez ama tabiki sql perfomansı anlamında etkileri konusunda emin değilim. Stack de veya diğer okuduğum makalelerde de durum farklı değil bazılar guid diyor bazıları int, buradaki önerilere bakıyorum bir tarafta guid var bir tarafta siz int tarafındasınız açıkçası arada kaldık 😊
Sorduklarım üzerine biraz daha detaylandırıp konuşabilir miyiz üzerine.
@Erhan,
Eğer guid konusunda karar verirsek paylaştığınız kütüphaneyi derinlemesine inceleyip kullanacağız. Performans analizlerine baktığımda çok başarılı görünüyor
Teşekkürler,
İyi akşamlar
To unsubscribe from this group and stop receiving emails from it, send an email to altdotnetturkiye+unsubscribe@googlegroups.com.
To post to this group, send email to altdotnetturkiye@googlegroups.com.
@Can Hocam Merhaba,
Öncelikle veri sayısını paylaşmanız bir çok konuda bize yol gösterici oldu, bunun için özellikle teşekkür ederim.
Gece yaptığım testlerde veritabanını klonladım ve tarih üzerinden partition yaptım. Partition yapılmış/yapılmamış db ler aynı sorguyu attığımda Execute Plan’a baktığımda okuduğu data arasında inanılmaz farklar var yani tam bu manada sql partition bizim dediğimiz işi yapıyor zaten bunu net öğrendik yönlendirme için tekrar teşekkür ederim.
Şimdi soracağım şu, şuan ki veriler üzerinden 3 aylık bölümler şeklinde partition oluşturduk, daha sonra üzerine 6 aylık yeni data geldi diyelim her üç ayda bir yeniden partition yani sürekli bölümle nasıl yapılacak açıkçası modifie parttion gibi bir durum tam göremedim.
Bunun dışında ikinci bir durumsa bizde tablolarda 2 farklı tarih var birisi eklenme tarihi diğeri ise belge tarihi. UI tarafında ise opsiyonel olarak ister belge tarihinden isterse eklenme tarihi üzerinden sorgular atıyor. Bu durumda ben insertdate e göre bölsem fakat kullanıcı belge tarihine göre sorgu atsa durum nasıl şekilleniyor, yada 1 den fazla kolon üzerinden bölümle durumu söz konusu mu?
Ve Son olarak aynı tablolara tarih bazlı değil sadece guid bir değer üzerinden var mı yok mu sorgusu atılıyor atılması gerekiyor (Partition’a eklenmiş bir kolon değil).
Bu durumda sorguladığı veri aslında her zaman tabodaki tüm veri yani sizin adetinizle 900 milyon olmuyor mu? Burada bir öneriniz olur mu?
Not olarak şunu belirteyim, bütün müşterilerin verileri AccountID üzerinden ayrılıp aynı tablolarlar da tutuluyor.
Teşekkürler
İyi çalışmalar
To unsubscribe from this group and stop receiving emails from it, send an email to altdotnetturkiye+unsubscribe@googlegroups.com.
To post to this group, send email to altdotnetturkiye@googlegroups.com.
Şimdi soracağım şu, şuan ki veriler üzerinden 3 aylık bölümler şeklinde partition oluşturduk, daha sonra üzerine 6 aylık yeni data geldi diyelim her üç ayda bir yeniden partition yani sürekli bölümle nasıl yapılacak açıkçası modifie parttion gibi bir durum tam göremedim.
Bunun dışında ikinci bir durumsa bizde tablolarda 2 farklı tarih var birisi eklenme tarihi diğeri ise belge tarihi. UI tarafında ise opsiyonel olarak ister belge tarihinden isterse eklenme tarihi üzerinden sorgular atıyor. Bu durumda ben insertdate e göre bölsem fakat kullanıcı belge tarihine göre sorgu atsa durum nasıl şekilleniyor, yada 1 den fazla kolon üzerinden bölümle durumu söz konusu mu?