Yazılımların ve üretilen çözümlerin karmaşıklaşmasının bir sonucu olarak veritabanları yazılımların vazgeçilmez yapıları haline geldi. Başta ORACLE, MsSql gibi veritabanları yazılımların performanslarını optimize edebilmek adına yoğun bir rekabet içerisindeler ve sunucular üzerinde kurulu bu araçlar artık günümüzün olmazsa olmazı.
Lakin özellikle masaüstü uygulamalarda, geliştirilen ürünün bir MsSql gerektirmesi pek de anlamlı değil ve hatta kullanıcı için büyük bir sorun. Teknik mevzularda pek de geçerli bilgisi olmayan bir son kullanıcının sisteminde veritabanı kullanmak adeta intihar. Buna en yaygın çözüm ise XML. Gerek platform bağımsız olması gerekse hem java hem de .net framework tarafından kabullenilmiş ve hatta desteklenen (çeşitli parser fonksiyonları ile) bir standart olması sebebiyle çoğu kez XML tek tercih durumunda.
XML karşısında açık kaynaklı kod felsefesi ile yola çıkan ve bir araç olmaktan öteye geçip tek bir kullanıcı üzerinden en performanslı veritabanı olmak iddiasına kavuşan bir çözüm çoğu zaman göz ardı ediliyor: SQLite
SQLite temel olarak dosya tabanlı olarak çalışıyor. Projenizin içerisine bu kütüphaneyi eklediğinizde kullanıcının belki de haberi bile olmadan bir veritabanı kurabiliyor ve bu veritabanında SQL-92 standardında sorgular çalıştırabiliyorsunuz. 3. versiyonu kullanımda olan bu kütüphane aslen C temelli olmasına rağmen çok sayıda .NET ve JAVA ara sınıfları internet ortamlarında mevcut.
SQLite'ın XML'e üstün olduğu alanlardan bir tanesi de veritabanı formatında olması aslında. Sonuçta bir veritabanı kullanmakta iseniz her zaman aşina olduğunuz bir yapı ve tasarım mevcut. Peki performans açısından bu iki aracın durumları nelerdir?
Test sonuçlarına bakılacak olursa az sayıdaki veri için XML kullanmak son derece mantıklı fakat çok sayıda tekrar eden veriniz olacak ise SQLite performans artırıcı bir etki yaratabilir. Ayrıca yaratılan dosyadaki bilgilerin XML içerisinde son derece okunabilir olması da XML için bir dezavantaj. XML daha kullanıcı dostu ve standart bir yapıda olmasına rağmen SQLite'ın kullanıcıya performans artırıcı tüm özellikleri sunması (indeksleme gibi) da XML için bir dezavantaj. Tabii ki XML’in artık neredeyse temel bir standart olmasından kaynaklanan avantajlarını da göz ardı etmemek gerekir. Zira SQLite için dökümantasyon, yardım dosyaları ve kullanıcı arayüzü gibi konular hala tam olarak standarda ulaşmamış denemelerden ibaret.
Son olarak LINQ to XML de göz ardı edilmemeli. Özellikle .NET Framework 3.5 tabanında kod geliştirenler için her zaman araştırılması gereken bir nokta. Tercih ise yazılım alanındaki her konuda olduğu gibi işe, sürece, platforma, geçmiş tecrübelere bağlı olarak değişir.
iphone'dan firefox'a kadar pek cok programin caktirmadan kullandigi sql veritabani kutuphanesi. dosya tabanli veritabani tutar, yazarken sadece bir surec/is parcacigi yazabilir, digerleri yazma isini bitene kadar bekler. diger taraftan okumada dosya kitlemesi olmadigindan paralel okuma ile performans artirilabilir. yaklasik 40 kb buyuklugundedir, o yuzden embedded islerde cok populerdir. ayrica server/client mimarisini kullanmaz, sonundaki lite obegi ise muhtemelen buradan gelmektedir.
güncel sürümler için key-value store olarak calisabilmesi, dynamic-typing kullanmasi kesinlikle çok daha iyi. default storage engine'i bir log-structured merge database olacakmış söylentilere göre ve dahası leveldb'den daha hizli olacağı soylentiler arasında. onceden reel bir primary key bulunmazken artik primary key mevcut üstelik kayitlar pk'e gore sıralı olarak saklanacakmış. yine tabii c ile sistemlenen bir platform ancak keşke golang ya da daha üst bir dil ile yazılsaymış izlenimi uyandırmıyor değil.
Windows server 2008 gibi sıkıntılı bir işletim sistemine sahipseniz ayrıca mysql server kurması,ayarlaması bir dert diyorsanız ve izinler,konfigürasyon v.b. işlerle vakit kaybetmeyeyim diyorsanız sqlite biçilmiş kaftandır.
Sqlite:
Kurulum,konfigürasyon gerektirmiyor.
Dosya tabanlı olduğu için istediğiniz an veritabanını flasha v.s. atabiliyorsunuz.
Server/client uygulama yapmak istiyorsanız da bağlantı cümlesine eklenen ufak bir sorguyla uzak pc ler arasında sorunsuz çalıştığı tarafımca test edilmiştir.
Gelelim eksilere:
Dosya tabanlı olduğu için ağ üzerinde biri klasör siler gibi veritabanınızı silebilir ancak bu avantajlarının yanında ve alınacak güvenlik önlemlerinin yanında sorun bile değil.
Sunucu istemci(server,client)tarzı uygulama yapacaklar görecekler ki sqlite kullandıklarında 2.pc uygulamanıza girdiği an sqlite kendini kapatacak ve "database is locked" yani veritabanı kilitlendi hatası verecektir.Bunuda ufak bir kodla "önbelleklemeyi" kapatarak çözebiliyorsunuz.
Bunun nedeni sqlitein başlangıçta safe mod olarak başlayıp yalnızca bir bağlantıya izin vermesi.Bunuda aşağıda yazdığım kod cümlesi ile çözebilirsiniz.
Yardımcı olması açısından server/client uygulama yapacak sözlükteki kardeşlerime sqlite kullandığınızda bunuda bağlantı cümlenize ekleyin sonra database is locked alıp dumur olmayın.Zira bu hatayı bir kez aldığınız da o veritabanına tekrar veri kaydetme,silme v.s. işlem yapamazsınız.Şayet aldıysanız eski veritabanını kopyala yapıştır yapın yenisi ile devam ediniz.
SQLiteConnection baglanti = new SQLiteConnection("Data Source=C:\\yolunuz\\veritabaniniz.db;Count Changes=off;Journal Mode=off;Pooling=true;Cache Size=10000;Page Size=4096;Synchronous=off");
Count dan başlayıp sona kadarki kısmı yolunuza eklemeniz gerek.
Sonuç olarak yazdığım crm için kullanıyorum sqlite ı ve takır takır çalışıyor.
SQLite, dünyada en çok dağıtılan ve tavsiye edilen kaynak kodları halka açık, tamamen C/C++ programlama dilleriyle geliştirilmiş sunucu yazılımı ve konfigurasyon gereksinimi olmayan, işlemsel ve ilişkisel bir SQL veritabanı motorudur. SQLite, onlarca programlama dili içerisinde rahatlıkla kullanılabilir.
Şu an geliştirmekte olduğum mobil uygulamada ihtiyaç duyduğum ve kullanmaya başladığım veritabanı kütüphanesi.
Mobil uygulamarın kahramanı olarak adlandırılan bu veritabanı kütüphanesi, yerel veritabanı olarak kullanışlı olmasına karşın uzak sunucuya kurulup büyük projelerde kullanılması tavsiye edilmez. Kısaca yerel veritabanı için en iyisi diyebiliriz.