Merhaba arkadaşlar,
Bugün sizlerle acayip, acayip olduğu kadar da zor bir konuyu paylaşacağum. Son bir haftadır çalıştığım firmada ‘Şişirme Veri Girişi’ (Bulk Data Creation) ile uğraşmaktayım. Uzun bir süre değil mi ? evet uzun :) ama yapacak birşey yok uzun sürüyor işte :)
Aklınızda hemen, bu konu neden Önemli, üzerinde neden çalışıyoruz şeklinde sorular oluşabilir, oluşmalıdır da :) bu nedenle sizlere Öncelikle müşterilerin şişirme veri girişini neden istediklerini izah etmeye çalışayım;
– İlk Örneğimiz Microsoft’un Windows işletim sisteminden; işletim sistemine çok fazla program ekleyip kaldırdığımızda sistemin yavaşladığını Registery dosyasının şişmesine bağlarız. Zamanında Microsoft’da çalışan arkadaşlar, bu durumu test etmemiş veya test etmiş fakat sonuçlarını dikkate almamışlar ki biz halen ‘Windows’u nasıl hızlı kurarım’ gibi işlerle uğraşıyoruz.
– 3~5 yıldır kullanılan yazılımlarınızda, çok uyduruk işlemlerin bile artık çok fazla zaman aldığına şahit olabilirsiniz. Bunun nedeni başlangıç verinin çok küçük olacağını düşünüp, veri tabanında uygun indeksleri kullanmamız veya yazdığımız algoritmaların p = n^2 (buradaki ‘n’ veri adedi, ‘p’ performans) veya buna benzer bir şekilde çalışması olabilir. Örnek vermek gerekir ise; n = 1 ise, p = 1, n = 2 ise p = 4, n = 3 ise p = 9, n = 4 ise p = 16 olur… bu durumda 3~5 sene sonra n = 100 olduğunda p = 10.000 olur ki… sistem artık çalışmıyor demektir. Elbetteki Örnekler daha da arttırılabilir.
Akıllı yazılım müşterilerinin artık bu soruyu sormaya başlamalarının nedeni işte bunun gibi nedenler arkadaşlar. Peki biz yazılımcılar bu durumda neler yapabiliriz. Aklınıza ‘Veri boyutu 2 katına çıkarsa sistemin bunu işleme süresi de 2 katına çıkar.’ gibi bir yaklaşım gelebilir. Bu yanlıştır, bu şekilde olmamalıdır. Günümüzdeki veri tabanı uygulamalarını akılcı kullanmak ve eğer bu da yetmiyor ise, yazılıma arvişleme yeteneği eklemek gerekir.
Veri tabanı performansı günümüzde çok büyük problemler teşkil etmemektedir. Asıl problem, programın yazıldığı algoritmanın ve yapılan dizaynın getirdiği kısıtlamalardır. İşte bu tür kısıtlamaları ve bunlara bağlı performans düşüşlerini daha rahat yakalamak için uzun vadeli çalışacak olan sistemlerde şişirme veri girişi(bulk data creation) işlemi ile beraber performans sınaması gerçekleştirilmelidir.
Evet tanımı yaptıktan sonra aklınızda oluşan bazı karışıklıkları gidermek gerekir. Öncelikle Örnek Veri Girişi ile Şişirme Veri Girişi arasındaki farkı sizlere tarif etmem gerekiyor. Örnek veri girişi; sistemin olanaklarını çok zorlamayacak şekilde, Örnek teşkil edecek çoklukta veri girmektir. En fazla sistemde oluşabilecek bir aylık verinin oluşturulmasıdır. Şişirme Veri Girişi ise; Sistemde stres test yapmak ve data boyutlarının hangi sevilere doğru çıktığını, en kÖtü koşullarda veri tabanı üzerinde yapılacak işlemlerin veya yazılmış algoritmaların ne kadar süreceklerini gÖrebilmek için yapılan işlemdir. Tahmini 2 veya 3 seneden daha az olmamak kaydı ile veri giriş yapılmalıdır. Diğer bir deyişle Örnek Veri Girişinin 30 veya 40 katı kadar veri girilmesi gerekir. Girilen bilgiler en az Örnek veri girişinde olduğu kadar mantıklı ve kendi içerisinde tutarlı olmalıdır.
Bu aşamadan sonra sizlere nasıl hızlı ve mantıklı şişirme veya Örnek veri girişi nasıl yaparsınız onları tarif etmeye çalışacağım. Bu işlem için elbetteki Ruby’yi :) kullanacağız(.NET veya Java’yı da kullanabilirdik ama henüz onlarda bu işlemler kolaylaşmadı.).
Bu işlemi Microsoft SQL Server için gerçekleştireceğiz. BÖylece Microsoft SQL Server için ActiveRecord bağlantısını da incele fırsatı bulmuş oluruz. Öncelikle sizlere neden ActiveRecord kullandığımızı açıklamam gerekir, daha Önceki ODBC yazılarımda (1,2,3,4) belirtiğim kütüphane ile değilde, neden ActiveRecord ile gerçekleştiriyoruz. Çünkü ODBC düşük seviyeli bir bağlantı prokolüdür. Fakat ActiveRecord yüksek seviyeli bir veri tabanı ile Ruby arasında bir eşleme kütüphanesidir. Yani ActiveRecord’da veri tabanında bulunan tablolardan Ruby sınıfları oluşturulabilir, bu sınıflar üzerinde ‘Insert’, ‘Delete’, ‘Update’ ve ‘Select’ gibi SQL işlemleri birkaç küçük hareket ile gerçekleştirilebiliriz. Fakat ODBC bize bu şekilde bir yardımda bulunmaz, aynı işlemleri ODBC kullanarak bizlerde gerçekleştirebiliriz, ama bunun için kod yazmamız gerekir ki :) tembel adamın istiyeceği en son şeydir :). Hazırı var işte ActiveRecord :). Eğer ActiveRecord üzerinde hoşumuza gitmeyen bÖlümler olursa Ruby’nin esnekliğinden faydalanarak bunları değiştirebiliriz. Ayrıca ActiveRecord, ODBC gibi bir bağlantı kütüphanesi değildir, tek başına herhangi bir veri tabanına bağlanamaz fakat ODBC, ADO, DBI, OCI gibi birçok bağlantı kütüphanesini kullanabilir.
Continue reading…