RavenDB ile Hello World
Popüler NoSQL ürünlerinden birisi olan RavenDB' yi incelemeye çalışıyoruz.
Kuzgun’ lar Kargagiller ailesinden gelen bir kuş çeşididir. Diğer karga cinslerine göre daha iridirler ve özellikle çok daha zeki oldukları söylenir. Yapılan araştırma ve deneyler sonrasında bu cins kargaların, sorunları çözmek için çevresel materyalleri kullanabilme(kullanmak için de öğrenebilme)becerisine sahip oldukları öne sürülmüştür. Hatta parlak, beyaz ve mavi renkli metallere karşı özel bir ilgileri olduğundan, hırsız olarak da ifade edilmektedirler.
RavenDb, açık kaynak NoSQL veritabanlarındandır. .Net ile yazılmıştır ve şemasız(Schema-less)JSON(Java Script Object Notation) veri tipini kullanmaktadır. Doküman tabanlı(Document Based) çalışmaktadır. JSON formatınının kullanılması ve .Net ile yazılmış olması, erişilebilirlik ve ölçeklenebilirlik anlamında da bazı avantajlar sunmaktadır. Bunların arasında LINQ(Language INtegrated Query) ile sorgulanabilme ve RESTful API ile ulaşılabilme sayılabilir. Bu veritabanı ayrıca Transactional’ dır. Bir başka deyişle ACID(Atomicity, Consistency, Isolation, Durability) prensiplerine destek vermektedir.
İşin güzel yanı, ürünün bir de web arayüzünün bulunmasıdır. Eğer makinenizde 8080 port’ u üzerinden yayın yapan bir başka uygulama var ise(ki benim sistemimde vardı) RavenDB, 8081numaralı port üzerinden hizmet vermeye çalışacaktır(Eğer 8081 de doluysa tahminlerime göre bir sonraki boş portu bulana kadar deneyecektir)
Buna göre http://localhost:8081/ adresine gidildiğindehttp://localhost:8081/raven/studio.html adresine yönlendirilip, web arayüzüne ulaşıldığı gözlemlenecektir.
Daha önceden Entity Framework veya LINQ to SQL ile çalıştıysanız eğer, kodlardaki yaklaşım oldukçta tanıdık gelecektir. İlk olarak genel bir Context tipine ihtiyacımız bulunmakta. Bunun içinDocumentStore tipinden yararlanılmaktadır.
DocumentStore örneklenirken ConnectionStringName özelliğine app.config dosyasında yer alan key değeri verilmiştir. Sonrasında gerçekleştirilen veri çekme, ekleme, silme ve güncelleştirme işlemlerinin tamamında ise OpenSession metoduna yapılan çağrı ile elde edilenIDocumentSession arayüzü türevli referans tipi kullanılmaktadır.
Veri çekme işlemlerinden de dikkat edileceği üzere LINQ metodlarından yararlanılmaktadır. Sorgulamalar için başlangıç noktası Query<T> metodudur. Bunun dışında bir veriyi Key değeri üzerinden elde etmek istersek(ki Product sınıfındaki string türünden Id özelliği bunun için eklenmiştir) Load<T> metodundan yararlanılabilinir. Veri ekleme için Store, silme işlemi içinseDelete fonksiyonları kullanılmıştır. Elbette yapılan tüm veri ekleme, silme ve güncelleştirme işlemlerinin, döküman içerisine yazılması SaveChanges metoduna yapılacak çağrı ile mümkün olmaktadır.
Uygulamayı çalıştırdığımzda, 3 adet Product örneğinin eklendiğini, bir tanesinin güncelleştirildiğini ve bir diğerinin de silindiğini analiz edebiliriz. Ayrıca tüm bu işlemler Web arayüzü üzerinden de anlık olarak takip edilebilirler. Örneği çalıştırdıktan sonra http://localhost:8081/raven/studio.htmladresine gidersek aşağıdaki ekran görüntüsü ile karşılaşırız.
Mutlaka sağ tarafta yer alan ETag değeri de dikkatinizi çekmiştir. Dilerseniz verilerinizi etag ile ilişkilendirebilirsiniz. Store metodunun aşırı yüklenmiş versiyonlarında GUID tipinden etagdeğerlerinin girilebilmesine de izin verilmektedir.
Eklenen bütün ürünler Product isimlidir ve RavenDb tarafından isim çoğullama yapılarak Productsadındaki koleksiyon içerisine dahil edilmişlerdir. Bu ve varsa diğer koleksiyonlara, Web arayüzündekiCollections kısmından ulaşılabilir.
Diğer yandan uygulama çalıştırılmadan önce, çalıştığı süre zarfı içinde ve sonrasında,RavenDb.Server.exe programının komut satırına bazı loglar attığına şahit oluruz. Aynen aşağıdaki ekran görüntüsünde yer aldığı gibi.
Dikkat edileceği üzere çeşitli HTTP metodları söz konusu olmuştur. Veri çekme işlemlerinde GET, ekleme işlemlerinde POST ve silme işlemlerinde de DELETE metodlarına ilişkin talepler(Request)oluşmuştur.
Bu arada 960 numaralı talebi dilerseniz URL den manuel olarak girmeyi deneyebilirsiniz.http://localhost:8081/docs/1 şeklinde bir talep gönderdiğimizde, indeks değeri 1 olan içeriğinJSON formatlı çıktısına ulaşırız.
Size tavsiyem söz konusu örnekte yer alan kodlardan yola çıkarak, örneği Web/Windowsplatformuna taşımanız olacaktır. Hatta hali hazırda kullanmakta olduğunuz minik ve veritabanı odaklı çalışan bir uygulamanız var ise, bunu RavenDB ile çalışacak şekilde yeniden kurgulamayı deneyebilirsiniz. Farklı NoSQL veritabanlarını inceledikçe kullanımlarını sizlerle paylaşmaya çalışıyor olacağım. Böylece geldik bir yazımızın daha sonuna. Tekrardan görüşünceye dek hepinize mutlu günler dilerim.