joomla templates Data Warehouse Türkiye

Sun08072011

Last update07:32:32 PM GMT

Back Yusuf Arslan
Yusuf Arslan

Yusuf Arslan

Oracle Open Source

Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Turkcell  İş Zekası Test Uzmanı olarak devam etmekteyim. 

Website bağlantısı: http://arslanyusuf.blogspot.com/

Pazartesi, 30 Mayıs 2011 06:49

Yazılım Test Tekniklerinde Gri Kutu Testi

Test sistemlerinde genel bir anlayış olan Kara Kutu ve Saydam Kutu testleri günümüz test sistemlerinde ayrı ayrı düşünüldüğünde birçok eksikliğinin olduğu düşünülerek birleştirilmiş ve Gri Kutu testi adını almıştır. Gri kutu testinin ne olduğunu anlamak için öncelikle Kara kutu ve Saydam kutu testlerinin ne anlama geldiğini, avantajlarını ve dezavantajlarını kısaca gözden geçirmemiz gerekiyor.

Test edilecek yazılım veya sistemin iç işleyişi dikkate alınmaksızın gerçekleştirilen testlere Kara Kutu testleri denir. Test edilecek yazılım veya sistemin sonucu bilinir ve bu sonuca göre girdi çıktı değerlerleri karşılaştırılır. Bu sistemin Kara Kutu ismini almasının nedeni; testin iç dinamikleriyle kesinlikle ilgilenilmemesidir.

Kara Kutu testinde testçi yazılımın girdi ve çıktılarını bilir. Fakat bu çıktıya nasıl ulaşacağımız bilgisini bilmez. Yazılımın iç işleyişiyle ilgilenilmez. Yazılımdaki hataların bulunması için etkin bir test sistemidir. Testçi, sistem hakkında teknik ayrıntıları bilmesine gerek yoktur bu yüzden yazılım ekibiyle beraber çalışmasına gerek yoktur. Yazılıma kullanıcı gözüyle bakıldığı için pek çok hatanın ve eksikliklerin görülmesini sağlayacaktır. Fakat Kara Kutu testinde yazılımın genel işleyişi ve genel çıktısı incelendiğinden birçok hata tespit edilmeden kalır. Ayrıca sadece belli bir sayıda girdi ve çıktı incelendiği için birçok girdi ve çıktıda test edilmeden kalır.

Saydam Kutu testinde ise yazılım veya sistemin içyapısı bilinerek test edilir. Bundan dolayı test edecek kişinin yazılımın veya sistemin içyapısını bilmesi gerekir. Yazılımın içyapısındaki hatalar araştırılarak sistemdeki genel hataların düzeltilmesi amaçlanır.

Saydam Kutu testinde dinamik ve statik analizler yapılır. Oluşturulan birim testlerle bilgi akışı, kodlama ve veri kontrolü ayrıntılı bir şekilde gerçekleştirilebilir. Kod içerisindeki yazılım hataları ve kodun çalıştırıldıktan sonraki çıktısı ayrıntısıyla analiz edilir. Kod içerisindeki her bir ifade ayrıca çalıştırılır. Kodun yan etkileri ve etkilediği sistemler araştırılır. Kod içerisindeki gereksiz veya ölü parçalar bulunarak ayıklanır. Testçi, yazılımcının kodunu destekleyerek sistemin veya yazılımın daha güçlü olmasını sağlar. Saydam Kutu testinin bu kadar faydasının yanı sıra bazı zararları da vardır. Yazılımı test eden kişi yazılımın ayrıntılarını bilmesi gerektiğinden maliyet artar. Yazılımın iç dinamikleriyle ilgilenildiğinden tüm resme bakma ve genel hataları görmek zorlaşır.

İşte bu noktada Gri kutu testi, kara kutu ve saydam kutu testinin dezavantajlarını manipüle ederek kendine özgü temelde kullandığımız test sistemini oluşturur. Gri kutu testi, yazılımın temel dinamiklerini ve işleyişini bilerek ona göre davranır. Gri kutu testinde sistem girdi ve çıktılarıyla analiz edilerek her bir kod parçacığının; performans, etkilediği  sistemler veya hataları tespit edilir.

Çarşamba, 13 Nisan 2011 07:45

Datawarehouse Sistemlerinde Test Aşamaları

Datawarehouse sistemlerinde  ETL yaşam döngüsünde test aşamasının önemi bir hayli fazladır.Yazılım hataları veya ETL döngüsünde oluşan bir hata bize katlanarak geliyor.

Bundan dolayı ETL aşamalarında bazı test metodlarının iyi bilinmesi ve bu aşamlardan güvenli bir şekilde geçilmesi gerektiğini düşünüyorum.

Dünya da çeşitli test aşamaları vardır.Bunları kısaca gözden geçirelim;

1-Veri Bütünlüğü Testi :

Veri bütünlüğü, bir tabloda veri güncelleme, silme veya ekleme gibi işlemler
yapılırken diğer tablo ya da tablolardaki verilerin birbirleriyle uyum içinde olması, dolayısıyla veri tutarlılığının kaybolmamasının garanti altına alınması demektir.Tanımlanabilir ve Programsal veri bütünlüğü olarak ayırabiliriz.

ETL sürecimizde, gerekli tüm verilerin yüklendiğinden emin olmalıyız.Bozuk ,tutarsız verilerin girişi veya mevcut verilerin üzerinde değişiklik yaparken verilerin  bozulmasını engellemeliyiz.Source ve target karşılaştırılmaları yapılarak veri ambarında gereksiz veya fazla veriler veri bütünlüğünü bozacağını düşünerek testlerimizi yapmalıyız.Kaynak sistemlere veriler yüklenirken gerekli ilişkisel keylerin doğru olup olmadığını kontrol etmemiz ve modellememizin buna göre oluşup oluşmadığına bakmamız gerekir.

Yanlış, tutarsız ve çelişkili verilerle elde edilen bilgiler şirketleri yanlış alınan kararlara, risklere, yükselen maliyetlere, kaybolan müşterilere ve kaybedilen işlere maruz bırakmaktadır. Temiz, nitelikli ve bütünsel veriler karar vericilerin işleriyle ilgili daha doğru karar vermesine yardımcı olur ve potansiyel risklerden kurtarır.

2-Veri Dönüşümü  Testi:

Tüm veriler,iş kuralları ve/veya tasarım özelliklerine göre doğru bir dönüşüm uygulanması gerekmektedir.Bir çok veri dönüşüm algoritması vardır(logaritmik,karekökü,1/y..vb).Bu dönüşümlerin birçoğu embedded  olarak gelir ve bizim yapacağımız tek şey kullanılacak veri dönüşüm toolunun ayarlarıyla oynaktırJ Kendi mimarimize özgü veri dönüşüm algoritmaları yazmak istiyorsak bu konuda matematik ve algoritma bilgimizin hayli yüksek olması gerekmektedir.

Veri dönüşümünde null kayıtların veya istenmeyen formattaki dataların kullanımı gruplar arası verilerin yaygınlığını ve dağılımını olumsuz etkileyecektir.Test yaparken bunların target tablolarımıza nasıl gideceğini bilmeli ve source sistemimizden load aşamasında bu adımlara dikkat etmeliyiz.Yapılacak veya unutulacak küçük bir veri dönüşümü kaybı bizi olası bilgiyi bulmamızı engeller ve eksik istatistik oluşturmamıza neden olur.

3- Veri Kalitesi Testi :

Büyük kapasitelerde arşiv bilgisine sahip olan,koplex yapıya sahip çok sayıda müşteriye sahip olan olan şirketler için veri kalitesinin önemi büyüktür.Veri kalitesinin alt başlıkları ;Veri Doğrulama (Data Validation), Veri Madenciliği (Data Mining), Veri Temizleme (Data Cleansing), Veri Optimizasyonu (Data Optimization)  ve son olarak Kontrollerin  İzlenmesi/Takibi (Monitoring Controls) dir.Bunlar ayrı ayrı veya projeye göre birlikte de kullanılabilir.

Kurumların yapacakları planlama,pazarlama ve performans ölçümü gibi iş zekası aktivitelerini arttırmak için veri kalitesinin önemi hayli büyüktür.Çok boyutlu analizler yapılarak sorunlu kısımlarda iyi bir data cleaning yapılması gerekmektedir.Bunun ETL sürecine dahil edilip edilmemesi gerektiği  tamamen o anlık iş tanımına göre olabiliyor.O anlık datanın kalitesi arttırılabilip sonuca odaklı çözümde geliştirilebilir fakat bu aktivitelerin seviyesi bi hayli düşük olacaktır.Bu yüzden Veri kalitesi testi bizim normal sürecimizde olması gereken bir case olarak düşünüp buna göre testlerimizi oluşturmalıyız.

4- Performans ve Ölçeklenebilirlik Testi:

Ölçeklenebilirlik işlerimizde zaman kazandıran en önemli etkenlerden biridir.Bu performansı olumlu veya olumsuz yönden etkileyecektir.Veri miktarı veya kullanıcı sayısı arttıkça uygulamalar daha karmaşık hale gelir.Bu yüzden kullanılabilirlik ve güvenlik hassasiyeti artar.İşte bu noktada  performans ve ölçeklenebilirliğin faydalarını görmeye başlarız.Sistemimizdeki dataların aktarımı,kalitesinin arttırılması,dönüşümlerinin yapılması ne kadar önemliyse performansı ve ölçeklenebilirliği o derecede önemlidir.Ölçekleyemediğimiz datanın önemi yoktur!  Ve ölçekleyemediğimiz datanın performansınıda bilemeyiz.Bundan dolayı yazılan bir kodun veya çalıştığımız sistemin performans testlerinin büyük bir titizlikle yapılması gerekmektedir.Datanın az olduğu durumlar da performansı iyi gibi gözüken sistemler,ilerde bizi çok zorlayabilir.

5- Entegrasyon Testi :

İşletim sistemi, dosya sistemi, birimler arasındaki arayüz işlemleri ve donanım gibi değişik parçalar arasındaki etkileşimi test eder.Bu evrede Sistem için gerekli test araçları testerlar tarafından oluşturulur.Test tanımlarının dökümantasyonlarının sürece uygunluğu kontrol edilir.

6- Kullanıcı Kabul Testleri :

Kullanıcıların mevcut beklentilerini karşılamalıdır.Sistemin bir bölümüne veya tamamına güven tesis edilmelidir.Defect tespit edilmesi kabul testinin asıl ana amacı değildir.Burada sistemin sürüm ve kullanım için hazır olduğunun değerlendirilmesini bekleriz.Aynı zamanda sistem yöneticileri tarafından sistem kabulu olmalıdır.Bu kabuller için yedekleme,geri yükleme,bakım,periyodik kontroller,sözleşme..vb konularında mutabık kalınmak zorundayız

7- Regresyon Testi :

Sistemde yapılan değişikliklerin bozulmalara neden olup olmadığı test edilir.Bunun için sistemin altyapısının herzaman hazır olması gerekmektedir. Örneğin Test öncesi gerekli bilgi bankası silinerek, test için gerekli veriler tekrar yüklenebilir.

Pazartesi, 11 Nisan 2011 19:43

Veri Madenciliği Gelişim Süreci ve Teknikleri

Veri Madenciliği Nedir

Veri madenciliği en basit şekilde büyük miktarda veri içerisinden gelecekle ilgili tahmin yapmamızı sağlayacak modellerin veya bağlantıların oluşturulmasıdır.

Bu bağlantılar oluştuktan sonra aradığımız veriler mevcutsa bu verilerden çıkarabileceğimiz sonuçları anlamak için kullanırız.Örneğin ;

Riski az olan tüm kredi kartı başvurularını bul(sınıflandırma)

Harcama alışkanlığı benzer olan kredi kartı sahiplerini bul(demetleme)

DVD birlikte sıkça satın alınan ürünü bul (ilişkilendirme kuralları)

Belli bir ürünü alan insanların ortak özellikleri nelerdir ?

Müşterinin bundan sonra isteyeceği ürünler neler olabilir ?

Hangi müşterilermiz sadık hangisi hangi durumlarda uçup gidiyor ?

..vb bir çok sonuç odaklı sorularımıza cevap bulabiliriz

Ham veriden  bu bilgilere ulaşmanın bir çok yolu var.Gerekli olan bilgiye ulaşmada ilk önce, uygulama alanımızı doğru belirlememiz gerekiyor.Bu uygulama alanının amacına uygun veri kümesi oluşturmalı ve veriyi ayıklama ve önişlemlerden geçirmeliyiz.Sistemimizde kullanacağımız yapıya göre verilerin dönüşümünü ve azaltılmasını gerçekleştirebiliriz.Veri dönüşümünde gerekli boyutları seçebilir boyutlar arası ilişkileri belirleyebilir veya boyutu azaltabiliriz. Bu aşamadan sonra gerekli olacak olan veri madenciliği tekniklerinden birtanesi seçebiliriz. Şimdi bu teknikleri inceleyelim

1- Classification:

En popüler veri madenciliği görevlerinden biridir.Yeni bir nesnenin niteliklerini inceleme ve bu nesneyi önceden tanımlanmış bir sınıfa atamaktatır.Burada önemli olan bir sınıfın özelliklerinin önceden net bir şekilde belirtilmiş olması gerektiğidir. Bir malın özellikleriyle müşteri özelliklerini eşleştirebiliriz.Böylece bir müşteri için ideal ürün veya bir ürün için ideal müşteri profili çıkarılabilir.

“Genç kadınlar küçük araba satın alır, yaşlı, zengin erkekler büyük, lüks araba satın alır.” Sınıflama tekniğine örnek olarak verebiliriz

2-Clustering

Belli bir grubun kümelenmesi şeklinde  düşünebiliriz.Belli bir yapı içindeki geçen terimlere-datalara-özelliklere..vb göre gruplar oluşur.Bu gruplar da en çok geçen datalardan yararlanılarak bir benzerlik ölçütü geliştirilir ve buna göre demetleme yapılır.Örneğin genç –orta ve yaşlı erkeklerin aldığı kontor  miktarı ayrı ayrı cluster oluşturmaktadır.

Bir cluster algoritması sayısız döngü kullanıp model yakınsayınca durarak modeli oluşturur.Yani oluşan segmentlerin sınırları stabil hale gelir. Mevcut halde bir çok clustering algoritması ve yapısı vardır.Örneğin Hierarchical clustering, Partitional clustering,, Spectral clustering..vb Bunlar kendi içinlerinde k-means,fuzzy-c-means ,QT algoritması..vb algoritmaları kullanır.Bunları ilerleyen günlerde belki açıklayabiliriz ama şuan için böyle çeşitlerinin olduğu bilgisi yeterli olacaktır.

3-Association

Popüler veri madenciliği görevlerinden biridir.Bir nesnenin varlığı ile diğer bir nesnenin varlığı arasında tahmin yürütülerek ilişki kurulur.Örneğin bir markette,çocuk bezi alan birisinin hemen hemen herzaman süt aldığı testpit edildikten sonra  market sahibi çocuk bezi ve süt raflarının arasındaki mesafeyi kısaltabilir.Böylece müşteriye unutulan birşeyin hatırlatılması dolayısıyla kazanç sağlanmış olur.Bunun örneklerini günlük hayatımızda bir hayli görüyoruz.


 

4-Regsession  

Amaç bir ya da daha çok değişkenin başka değişkenler cinsinden tahmin edilmesini olanaklı kılan ilişkiler bulmaktır.Örneğin bilgisayar mühendisi olan 40 yaşını aşmamış evi ve arabası olan yakışıklı erkeklerJ bir regsessiondur.

 

5-Forecasting 

Adından da anlaşılacağı gibi bizlere tahminler sunan veri ambarı tekniğidir.Örneğin 5 sene sonra barajlardaki doluluk oranları ne olacak ? gençler en çok hangi meslekleri seçecek? X şirketinin 2012 kar marjı ne olacak? Bu tip sorulara cevap bulan bir yapıdır.Burada ki en büyük yardımcımız zaman ve datanın geçmiş yıllarda zamanın içindeki dağılımıdır. 

  

Veri Madenciliğinin Gelişim Süreci

Veri madenciliğinin kökeni hiç  şüphesiz ilk sayısal bilgisayar olan ENIAC (Electrical  Numerical  Integrator  And  Calculator)’a kadar dayanmaktadır. 1946 yılında geliştirilen ve bugün kullandığımız kişisel bilgisayarların atası olan ENIAC, ABD’li bilimadamları John Mauchly ve J. Presper Eckert tarafından, II. Dünya Savaşı  sırasında ABD ordusu için geliştirildi. 30 tonluk ağırlığıyla 170 m2lik bir alanı kaplayan bu “ilk” bilgisayarın 60 sene içerisinde geçirmiş olduğu evrimin nihai boyutlarını şu anda masa üstünüzdeki bilgisayara bakarak anlamanız mümkündür.

Bu evrim tabii ki belli bir süreç ve  şartlar altında gerçekleşti. Donanımsal olarak hazırlanan ilgisayarların, yazılımlar vasıtasıyla hayat bulması ve kullanıcılara ulaştırılması, bilgisayar evrim döngüsünün anahtarıdır. Bilgisayar ve yazılım uzmanlarının geliştirdikleri ürünler, kullanıcıların istekleri doğrultusunda zamanla  şekillenerek bugünkü halini almış durumdadır. Döngü, donanımın geliştirilmesinin ardından yazılımın bu donanıma entegre edilerek kullanıcıya ulaştırılmasıyla başlar. Kullanıcı ihtiyaçları doğrultusunda yazılımda bulunan eksiklikleri belirler. Yazılım uzmanları bu eksiklikleri göz önünde bulundurarak yeni yazılımlar geliştirirler. Bu yazılımların çalışabilmesi için gerekli donanım güncellenmesinin yapılması için donanım uzmanları uyarılır. Güncellenen bilgisayarlar tekrar kullanıcılara ulaştırılır ve döngü bu şekilde devam eder. Dikkat edilirse döngünün anahtar elemanı kullanıcıdır. Kullancıların ihtiyaçları, isteklerini belirler. Dolayısıyla bu istekler mevzu bahis sektörü doğrudan etkiler ve gelişmenin kapıları açılır.

Bilgisayarların efektif kullanımı verilerin depolanması ile başlamaktadır. İlk haliyle karmaşık esaplamaları yapmaya yönelik geliştirlen bilgisayarlar, kullanıcı ihtiyaçları doğrultusunda veri depolama işlemleri için de kullanılmaya başlandı. Bu sayede veri tabanları ortaya çıktı. Veri tabanlarının genişleme trendi içinde olması donanımsal olarak bu verilerin tutulacakları ortamların da genişlemesini gerektirdi. Veri ambarı kavramının ortaya çıkışı bu dönemlere rastlamaktadır. Kaybedilmek istemeyen veriler, bir ambar misali  fiziksel sürücülerde tekrar kullanılmak üzeresaklanmaktaydı. Gittikçe büyüyen veri tabanlarının organizasyonu, düzenlenmesi ve yönetimi de buna paralel olarak güç bir hal almaya başladı. Bu safhada veri modelleme kavramı ortaya çıktı.

İlk olarak basit veri modelleri olan Hiyerarşik ve  Şebeke veri modelleri geliştirildi. Hiyerarşik veri modelleri, ağaç yapısına sahip, temelinde bir kök olan ve bu kök vasıtasıyla üstünde her daim bir, altında ise n sayıda düğüm bulunan veri modelleriydi.  Şebeke veri modelleri ise kayıt tipi ve bağlantıların olduğu, kayıt tiplerinin varlık, bağlantılarınsa ilişki tiplerini belirlediği bir veri modeliydi.  Şebeke veri modelinde herhangi bir eleman bir diğeri ile ilişki içerisine girebiliyordu. Ancak çoklu ilişki kurmak söz konusu değildi. Hiyerarşik veri modellerinde ise bu daha da kısıtlıydı. Dolayısıyla kullanıcıların ihtiyaçlarını tam olarak karşılayamadılar. Bu ihtiyaçlar doğrultusunda Geliştirilmiş Veri Modelleri geliştirildi. Bunlar Varlık – İlişki, İlişkisel ve Nesne – Yönelimli veri modelleri olarak bilinmektedirler. Günümüzde en sık kullanılanı İlişkisel veri modelidir. Nesne – Yönelimli veri modelleri ise hala gelişim süreci içerisindedir.

İhtiyaçlar doğrultusunda şekillenen veri tabanları ve veri modelleme çeşitleri  hızla yaygınlaşırken, donanımlar da bu sürece ayak uydurdular. Günümüzde milyarlarca bit veriyi ufacık belleklerde tutmak mümkün hale gelmiştir.  İhtiyaçlar her ne kadar teknolojiyi ciddi anlamda  şekillendirse de yanında sorunları daim olarak getirmektedir. Verileri saklanması, düzenlenmesi, organize edilmesi her ne kadar bir sorun gibi görünmese de bu kadar çok veri ile istenilen sonuca ulaşmak başlı başına bir sorun halini almıştır.

Veri madenciliği, kavramsal olarak 1960lı  yıllarda, bilgisayaların veri analiz problemlerini çözmek için kullanılmaya başlamasıyla ortaya çıktı. O dönemlerde, bilgisayar yardımıyla, yeterince uzun bir tarama yapıldığında, istenilen verilere ulaşmanın mümkün olacağı gerçeği kabullenildi. Bu işleme veri madenciliği yerine önceleri veri taraması (data dredging), veri yakalanması (data fishing) gibi isimler verildi

1990lı  yıllara gelindiğinde veri madenciliği ismi, bilgisayar mühendisleri tarafından ortaya atıldı. Bu camianın amacı, geleneksel istatistiksel yöntemler yerine, veri analizinin algoritmik bilgisayar modülleri tarafından değerlendirmesini vurgulamaktı. Bu noktadan sonra bilimadamları veri madenciliğine çeşitli yaklaşımlar getirmeye başladılar. Bu yaklaşımların kökeninde istatistik, makine öğrenimi (machine learning), veritabanları, otomasyon, pazarlama, araştırma gibi disiplinler ve kavramlar yatmaktaydı.

İstatistik, süre gelen zaman içerisinde verilerin değerlendirilmesi ve analizleri konusunda hizmet veren bir yöntemler topluluğuydu. Bilgisayarların veri analizi için kullanılmaya başlamasıyla istatistiksel çalışmalar hız kazandı. Hatta bilgisayarın varlığı daha önce yapılması mümkün olmayan istatistiksel araştırmaları mümkün kıldı. 1990lardan sonra istatistik, veri madenciliği ile ortak bir platforma taşındı. Verinin, yığınlar içerisinden çekip çıkarılması ve analizinin yapılarak kullanıma hazırlanması sürecinde veri madenciliği ve istatistik sıkı bir çalışma birlikteliği içine girmiş bulundular.Bunun yanısıra veri madenciliği, veri tabanları ve makine öğrenimi disipliniyle birlikte yol aldı. Günümüzdeki Yapay Zeka çalışmalarının temelini oluşturan makine öğrenimi kavramı, bilgisayarların bazı  işlemlerden çıkarsamalar yaparak yeni işlemler üretmesidir. Önceleri makineler, insan öğrenimine benzer bir yapıda inşa edilmeye çalışıldı.

Ancak 1980lerden sonra bu konuda yaklaşım değişti ve makineler daha spesifik konularda kestirim algoritmaları üretmeye yönelik inşa edildi. Bu durum ister istemez uygulamalı istatistik ile makine öğrenim kavramlarını, veri madenciliği altında bir araya getirdi.

Kaynaklar;

Rud, O.P., Data Mining Cookbook, Wiley Pub., 2001

Smyth, P., Data Mining Data Analysis on a Grand Scale, UC, 2000

Sertacogut.com/blog/wp-content/uploads/2009/03/sertac_ogut_-_veri_madenciligi_kavrami_ve_gelisim_sureci.pdf


Salı, 29 Mart 2011 08:50

SQLite

SQLite

Hamza henüz yazarlar kısmında yer almadığı için yazısını Yusuf Arslan altında yayınlıyoruz.En kısa zamanda Hamza adına yayınlayacağız

 

Bu yazı daha önce saltokunur.org e-dergide yayınlanmıştır. 

Şu senaryodaki durum masaüstü uygulamalar geliştiren çaylak-tecrübeli tüm geliştiricilerin başına gelebilir. Benim başına geldi oradan biliyorum J

Programcının Çilesi

Hikâyemizde geliştiricimiz güzel bir program fikri bulur. Fikri gerçekleştirmek için platform, uygulama çatısı (Framework), programın yazılacağı dil... vb hazırdır. Geliştiricimiz programın işleyeceği verileri bir veri tabanında tutup, ilişkisel veri tabanlarının nimetlerinden faydalanmak istemektedir. İşte sorun da tam burada baş gösterir. Veri tabanı sunucusuna nasıl erişecektir? Uygulama masaüstü uygulama olduğu için çalışması için internet bağımlılığının olmaması gerekmektedir. Günümüz Türkiye şartlarında programı kullanan bütün bilgisayarların internete bağlı olamayacağı, olanların da zırt pırt kesilen bağlantı yüzünden programı adam gibi kullanamayacağı açıktır. Hem programcımız bu riski göze alıp, programı sürekli çevrimiçi olan veri tabanı (VT) sunucusuna bağlarsa, ücretsiz dağıttığı bir uygulama için bir VT sunucusu kiralamak zorunda kalacak, gelecekte belki programın kullanıcı kitlesi genişlediğinde o kadar veriyi tutacak VT sunucusu (VTS) bile bulamayabilecektir. Burada bir çözüm VTS'yi localhost'a kurup verileri bu şekilde işlemek olabilir. Ama şöyle bir gerçek var ki son kullanıcıların hepsi bir VT Yöneticisi değil. Düşünün bir kere dünyanın en çok kullanılan (bu yazıdan sonra aslında 2. olduğunu anlayacağınız :) MySQL'i uygulamanızla birlikte dağıttığınızı. Bugün en güncel MySQL 5.1 sürümü 104 MB, bir önceki 5.0 sürümü 22 MB [1]. Bu boyutta bir programı uygulama ile birlikte dağıtmak, kurulum dosyasını şişirmeye yarar, başka bir şeye değil. Hem MySQL'i kurduğumuzu düşünelim, kurmakla bitmiyor ki, root şifresi ayarlanacak, programın kullanacağı VT uygun karakter-kodlamayla oluşturulacak, MySQL hata verdiği zaman takip edilip düzeltilecek, dahası Windows güvenlik duvarı çalışmasına izin vermeyecek, gerekli olan port kullanımda olacak ve MySQL servisi başlatılamayacak. Biraz abartı gelebilir ama bu sorunlarım hepsi Windows üzerinde MySQL çalıştırılmak istenirken çok sık karşılaşılan sorunlar. Son kullanıcı bu sorunların hiçbiriyle baş edemez, onun için sadece "Next" vardır. "Next-Next-Next-(Bazen de Install :)"

Çözüm

Bu sorunun bir çözümü şu olabilir. Tecrübeli programcıların bile "Benden-Uzak-Allah'a-Yakın-Olsun" dediği, verileri bir dosyaya kaydetmek. Evet, çözüm basit gibi gözükse de programın işleyeceği verilerin yapısı karmaşıklaştıkça (bir VT'deki foreign key, trigger, function gibi yapıların getirdiği kolaylıkları düşünün) bunları bir dosya yapısına dökmek çoğu zaman geliştiricileri projelerinden soğutuyor. İşte bu ahval ve şerait içinde şöyle dediğinizi duyar gibiyim: "Keşke şöyle ne internete, ne sunucuya ne de ayara ihtiyaç duyan bir küçük program-kütüphane (library) olsa da, verileri VT biçiminde bir dosyaya kaydetse..."

Aslında yukarıda tırnak içinde yaptığım tanım SQLite için en basit ve anlaşılır tanım oldu. SQLite sunucu olmadan çalışan, hafif, küçük (tek bir dosya ve 500 KB den az), hiçbir ayara ihtiyaç duymayan, hızlı, SQL komutları kullanarak veri alış-verişi yapabilen bir ANSI-C kütüphanesidir. Kullanımı ise çok basittir. SQLite'ın kütüphane dosyasına (sqlite3.dll) SQL komutları gönderirsiniz, o da bu komutları işler ve bir VT dosyasına kaydeder. İstediğiniz zaman da SELECT sorguları çekerek bu dosyadan verilerinizi alabilirsiniz. Bu işlemler için ne bir ayar ne de bir kurulum gereklidir.

SQLite

SQLite, ilk olarak D. Richard Hipp tarafından geliştirilmeye başlandı ve 17 Ağustos 2000 tarihinde ilk sürümü yayınlandı. [2] İlk yayınlandığından bugüne kadar ki geçen zaman içinde temel VT işlemlerinin neredeyse tamamını gerçekleştirebilecek şekilde geliştirildi. Bu yazı yazıldığında en güncel sürümü 3.6.17 idi.

SQLite sadece bir C Kütüphanesi olduğu için, taşınabilirliği çok yüksektir. Günümüzün bilinen tüm platformlarında çalışabilir. Windows, Mac OS X, Linux, BSD, Solaris, UNIX, AmigaOS, Symbian, z/OS 1. [2]Gelecekte başka bir Veri Tabanı Yönetim Sistemi (VTYS)'ne geçilmek istendiğinde basit bir SQL sorgusuyla tüm veri alınıp rahatça diğer bir VTYS’ye geçilebilir.

Lisanslama

SQLite "Halka Açık" bir yazılımdır. Dağıtımı “Public Domain[3] altında yapılmaktadır. Kaynak kodu açıktır. Yani SQLite'i istediğiniz gibi kullanabilir, kodunu değiştirebilir (uygulamanızın kullanmayacağı özellikleri kaldırıp yeni özellikler ekleyebilir), ücretsiz-ticari, açık-kapalı kaynak bütün uygulamalarda hiçbir kısıtlama altına girmeksizin kullanabilir, SQLite ile geliştirdiğiniz bir uygulamadan gelir de elde edebilirsiniz.

Teknik Özellikler [2]

Teknik özelliklerinden bahsetmek gerekirse SQLite için boyundan büyük işler başarıyor diyebiliriz.

  • En Fazla VT dosyası boyutu: 32 TB
  • Bir Tablodaki En Fazla Sütun Sayısı: 32767
  • En Fazla Metin (String-Char) Veri Boyutu: 1 GB
  • En Fazla Blob (Binary) Veri Boyutu: 1 GB
  • En Fazla Number (Int-Double) Veri Boyutu: 64 bit

SQLite’in bir güzel özelliği de tam Unicode desteği sağlamasıdır. UTF-8 ve UTF-16 kodlamayı destekler.

SQLite transactional (işlemsel) bir VT kütüphanesidir. Sık kullanılan birçok ilişkisel SQL cümleciğini destekler. Bunlar: Union, Intersect, Except, Inner join, Outer join, Inner select, Merge join. Ayrıca VT içinde Trigger tanımlamaya da izin verir.

Tarih (date) veri tipini ve data domain, cursor, function, procedure gibi işlemleri desteklememesi SQLite’in şu anki sürümü itibariyle eksik yönleri.

SQLite'in en geniş dağıtıma ulaşmış VT motoru olduğu tahmin ediliyor. Bugün birçok program, işletim sistemi, cep telefonu, PDA hatta Mp3 oynatıcılar bile gömülü olarak SQLite kullanıyor. SQLite siz farkına bile varmadan çoktan bilgisayarınıza girmiş olabilir. Örnek vermek gerekirse, Firefox (120 milyon kopya) internet geçmişinizi tutmak için bir SQLite VT'si kullanıyor. Eğer Windows ortamında Firefox kullanıyorsanız "C:\Program Files\Mozilla Firefox" dizini altında "sqlite3.dll" dosyasını bulabilirsiniz. Ya da bir müzik oynatıcı olan AIMP2 şarkı listelerini yine SQLite VT'sinde tutuyor. Bunun Linux dünyasındaki karşılığı ise KDE kullanıcılarının çok iyi bildiği amorak. Yine amorak playlist'lerini SQLite VT'sinde saklıyor. Örnekler çoğaltılabilir, bugün PHP5 (20 milyon kopya) varsayılan olarak SQLite desteğiyle geliyor. Solaris (10 milyon kopya) sistemi boot ekmek için,  Philips mp3 çalarlar yine playlist'leri saklamak için, Skype (100 milyon kopya), iPhone da SMS’leri saklamak için hep gömülü olarak SQLite kullanıyor. Tüm bu dağıtımların toplamının yaklaşık 300 milyon olduğu tahmin ediliyor. Bu da SQLite’i dünyanın en geniş dağıtımlı SQL motoru yapıyor. [4]

Kullanımı

SQLite harici uygulama olarak çalıştırılacaksa Linux'ta konsoldan ya da Windows'ta komut satırından "SQLite3 vt_dosyasi_adi" komutuyla çalıştırılır. vt_dosyasi_adi dosyası yoksa SQLite kendi oluşturur. Bundan sonra (;) ile biten SQL komutlarını programa girerek normal bir VT sunusu gibi kullanılır.

SQLite’in VT hakkında bilgi veren ve üzerinde çeşitli işlemler yapan, komut satırından çalıştırılan bazı özel komutları da vardır. [8]

  • · Veritabanındaki tabloları görmek: sqlite> .tables
  • · Veritabanı konsolundan çıkmak: sqlite> .exit
  • · Kolon adlarını almak: sqlite> pragma table_info()
  • · Yardım: sqlite> .help
  • · Select çıktısına format vermek:
  • · Otomatik artan kolonun son değerini ele almak: sqlite> select last_insert_rowid();
  • · Veritabanını dışa aktarmak: sqlite> .dump
  • · Veritabanını sql scriptine aktarır:
  • · Konsolda veritabanını kopyalamak:
  • · SQL script ile veritabanında tablolar oluşturmak:

SQLite kütüphanesi bir program içinde gömülü olarak kullanılacaksa "#include " ile SQLite'in başlık dosyası kaynak koda eklenir. sqlite3_open() ile VT dosyası açılır, sqlite3_exec() ile SQL komutu işletilir ve sqlite3_close() ile VT bağlantısı kapatılır. [5]

SQLite'i gömülü olarak kullanmak için ille de C bilmeniz gerekmiyor. SQLite'in bilinen programlama dillerinin neredeyse tamamı için (C#, D, Delphi, Fortran, Java, Perl, PHP, Python, Ruby, Smalltalk…) sarıcı (wrapper) API’leri bulunuyor.[6] Böylece istediğiniz dilde uygulama geliştirirken SQLite’i kullanabiliyorsunuz.

Hız Karşılaştırmaları [7]

SQLite diğer VTYS'lerle karşılaştırıldığında INSERT sorgularında biraz geride kalıyor ama SELECT sorgularında çok daha hızlı sonuçlar veriyor.

Aşağıda SQLite 2.7.6, PostgreSQL 7.1.3 ve MySQL 3.23.41 kullanılarak yapılan hız testlerinin sonuçları yer alıyor. Süreler saniye cinsindendir. SQLite’in Nosync değerleri thread senkronlaması kapatılarak alınmıştır.

25000 INSERT Bir sorguda

100 SELECT indeksiz

1000 UPDATE indeksiz

SELECT’ten INSERT

DELETE indeksli

5000 SELECT indexli

PostgreSQL

4.900

3.629

1.739

61.364

1.316

4.614

MySQL

2.184

2.760

8.410

1.537

2.262

1.270

SQLite

0.914

2.494

0.637

2.787

2.068

1.121

SQLite (nosync)

0.757

2.526

0.638

1.599

0.752

1.162

SQLite üzerinde daha geniş araştırma yapmak isteyenler www.sqlite.org daki wiki'de kullanım, yönetim, bakım hakkında çok yararlı makaleler bulabilirler.

Kaynaklar

[1] www.mysql.com

[2] http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

[3] http://en.wikipedia.org/wiki/Public_Domain

[4] http://sqlite.org/mostdeployed.html

[5] M. Ali Vardar, Linux ve UNIX Sistemler İçin Açık Kaynak Kodlu Yazılım Geliştirme, Temmuz 2008

[6] http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

[7] http://www.sqlite.org/speed.html

[8] http://gurcanyavuz.wordpress.com/2009/04/15/sqlite-veritabani/

Hamza Apaydın

Brisa, kalite yaklaşımı ve sahip olduğu Üretim Yönetimi Sistemi doğrultusunda ortaya çıkan raporlama ihtiyaçları için Oracle Busines Intelligence Enterprise Edition Plus çözümünü tercih etti.

Pazartesi, 24 Ocak 2011 09:14

Erkan Oğur destekli Pardus 2011 yayında

 

Açık kaynak dünyasının merakla beklediği sürümün, yeni özellikler, esneklik, hız ve güvenli yapısıyla özgür yazılım tercih edenlerin ilgisini çekeceği belirtiliyor. Pardus 2011 tanıtım etkinliğine katılan Pardus Proje Yöneticisi Erkan Tekman, yeni sürümün tüm kullanıcıların beklemesine değecek özelliklerle geldiğine dikkat çekerek şunları söyledi:
Pazartesi, 24 Ocak 2011 08:30

Oracle Bulut Bilişim Zirvesi

http://www.bilgicozumleri.com/Etkinlikler/oracle-bulut-bilisim-zirvesi

EtkinlikTarihi:
09.02.2011 / Çarşamba
EtkinlikYeri:
Ritz Carlton, Balo Salonu, Süzer Plaza, Askerocağı Cad. No: 15, Elmadağ,

Doğru Strateji ve Yol Haritası Ne Olmalı?

Değerli Davetlimiz,

Oracle Data Integrator kurulduktan sonra master ve work repositoryleri oluşturulması hakkında makalemizi  paylaşıyor olacağım.Bu makaleyi link vermeden veya sitemizin ismi geçmeden paylaşabilirsiniz.Önemli olan bu yazıyı okurken bizim sizlere küçükte olsa bi katkı sağlayabilmemizdir.

Master Repository : Şirketin IT kaynaklarının yapısını , güvenlik bilgilerini , proje ve veri kaynaklarıyla ilgili bilgilerin tutulduğu repository’dir.Sadece bir tane master repository gereklidir.

Perşembe, 20 Ocak 2011 11:42

Her Yönüyle Oracle Data Integrator

Datawarehouse sistemleriyle ilgili araştırmalarımda çok güzel bir yazıyla karşılaştım

http://www.iszekasi.com/joomla155/index.php/tr/blog/23-oracledb/202-oracle-data-integrator.html sitesinde de göreceğiniz gibi ODI kullanımı ve çözümlerine yönelik dökümanı inceleyelim

Data Cleansing, data martlarımızı oluşturmadan önce mutlaka ayarlanması gereken ve ilerde ETL süreçlerimizde bizi sıkıntıya sokacak türden verilen kullanımını engeller ve aynı formata girmesini sağlar.Örneğin tarih alanlarımızda a,d,56,!..vb gibi karakterler görüyorsak bunları null,sysdate veya bizim belirlediğimiz herhangi bir alanda istediğimiz şekilde o veriyi tutmamız gerekecektir.

İşte bu yüzden işzekası nda bulunan bu güzel yazıyı paylaşıyorum

Sayfa 1 / 7