Oğuzhan Eren

my blog bounded context


RavenDB : Client API ve Document Store

Tuesday, July 31, 2012

Merhabalar,

Daha önceki yazımda RavenDB’ye bir giriş yapmıştım. Bu yazımda ise RavenDB Client API’daki en önemli nesnelerden biri olan IDocumentStore’u anlatmaya çalışacağım. (Diğeri ise IDocumentSession, onu bir sonraki yazımda inceleyeceğim)

RavenDB Client API

İndirme

RavenDB Client API’ı en kolay NuGet üzerinden http://nuget.org/packages/RavenDB.Client paketini ekleyerek kullanabilirsiniz veya RavenDB’yi indirdikten sonra “Client” klasöründeki Assembly dosyalarını reference olarak ekleyebilirsiniz.

Nedir?

RavenDB Client API, herhangi bir .Net dilinden RavenDB Server ile bağlantı kurmanızı veya gömülü olarak veritabanı çalıştırmanızı sağlayan kütüphanedir. Client-Server ileşimini sağlar. Veritabanı üzerine birşeyler kayıt edip, sorgular yapmanıza,Index oluşturmanıza olanak verir ayrıca Caching,Batch Process gibi işlemleride destekler.

RavenDB Client API’da bilmemiz gereken iki önemli nesne bulunmaktadır.IDocumentSession ve IDocumentStore

Document Store

RavenDB Server ile iletişim kuran ve bu iletişim için gerekli ayarları barındıran aynı zamanda IDocumentSession üreten bir nesnedir. Thread-safe dir ve bir uygulamada sadece bir tane olmalıdır.

RavenDB’yi kullanmak için ilk yapılması gereken bir adet IDocumentStore oluşturmaktır. IDocumentStore dedim çünkü birden fazla IDocumentStore implementasyonu vardır. Gelin bunların neler olduğuna bakalım.

DocumentStore

Varolan bir RavenDB Server ile iletişime geçebilmek için kullanılır.

var documentStore = new DocumentStore 
    { 
        Url = "http://localhost:8080/"
    };
documentStore.Initialize();

Url yerine ConnectionStringName kullanarak da konfigürasyon dosyanızdaki bağlantı şeklini kullanabilirsiniz.

var documentStore = new DocumentStore 
    { 
        ConnectionStringName = "SecureConn"
    };
documentStore.Initialize();

Konfigürasyon dosyasındaki bağlantı şekilleri aşağıda örneklenmiştir:

<connectionStrings>
  <add name="LocalConn" connectionString="DataDir = C:\RavenDb_Data\"/> <!-- Sadece EmbeddableDocumentStore için geçerlidir -->
  <add name="UnSecureConn" connectionString="Url = http://localhost:8080;Database=DummyDb"/>
  <add name="SecureConn" connectionString="Url = http://localhost:8080;user=root;password=ravendb;Database=DummyDb"/>
</connectionStrings>

EmbeddableDocumentStore

Eğer RavenDB’yi projeniz ile gömülü olarak kullanmak istiyorsanız (her hangi bir RavenDB Server’a bağlanmadan, uygulamanın kendi serverını host edeceği şekilde) EmbeddableDocumentStore kullanarak IDocumentStore kullanmanız gerekmektir.

EmbeddableDocumentStore farklı bir Assembly altında dağıtılmıştır. Kullanabilmek için en kolay yol için NuGet’den http://nuget.org/packages/RavenDB.Embedded paketini kurmaktır.

Aşağıdaki kod RavenDb’yi gömülü olarak çalıştıracak ve verileri “C:\RavenDb_Data” klasörü altında saklayacaktır.

var documentStore = new EmbeddableDocumentStore 
    { 
        DataDirectory = "C:\RavenDb_Data\"
    };
documentStore.Initialize();

RunInMemory

İsterseniz gömülü veritabanını Ram üzerinde çalıştırabilirsiniz. Bu kullanım senaryosu test yaparken çok işinize yarayabilir. Veritabanı ram üzerinde tutulacağından testler hızlı olacaktır aynı zamanda da veritabanı test sırasındaki datalardan dolayı büyümeyecektir.

var documentStore = new EmbeddableDocumentStore 
    { 
        RunInMemory = true
    };
documentStore.Initialize();

UseEmbeddedHttpServer

Gömülü veritabanı çalıştırırken başka bir uygulama üzerinden o veritabanına erişemeyiz aynı zamanda da RavenDB Management Studio yada erişemeyiz. Eğer UseEmbeddedHttpServer özelliğini kullanırsak RavenDB kendini HttpServer üzerinden host edecektir. Bu şekilde veritabanına ve Management Studio ya http üzerinden ulaşabiliriz.

var documentStore = new EmbeddableDocumentStore 
    { 
        DataDirectory = "C:\RavenDb_Data\",
        UseEmbeddedHttpServer = true
    };
documentStore.Initialize();

Bu yazdımda IDocumentStore ve implementasyonlarını anlatmaya çalıştım. Bir sonraki yazımda ise IDocumentSession üzerinde duracağım. Takip etmeye devam edin,

Hepinize iyi günler diliyorum


RavenDB : Giriş

Tuesday, March 27, 2012

Merhaba arkadaşlar,

Blogumda aktif bir yazı dizisi hazırlamak istedim ve konu olarak döküman veritabanlarından olan açık kaynak kodlu (C#) RavenDB yi uygun gördüm. Bu konuda bildiklerimi sizinle ayrıntılı bir şekilde paylaşacağım.

Yazı içeriği başlık ve altında ayrıntılı açıklaması şeklinde ilerleyecektir.

Document Database nedir?

Döküman veritabanı sistemleri kayıtlarınızı ilişkisel tablolar yerine döküman olarak saklayan sistemlerdir. Bu sistem NoSQL mimarisine dayalıdır. NoSQL hakkında ayrıntılı bilgi için: http://en.wikipedia.org/wiki/NoSQL

İlişkisel bir datayı birden çok dağıtık tabloda tutmak yerine tek bir döküman nesnesi olarak tutar. Bu şekilde daha önceden şeması belli olmayan kayıtlar bu sistemde saklanabilir ve sorgulanabilir. Bu dökümanları saklamak ve kolay sorgulamak için genelde JSON formatı kullanılır. Bu sistemlerde her hangi bir döküman aşağıdakine benzer formatta gözükür.

Daha ayrıntılı bilgi için Wikipedia sayfasına göz atabilirsiniz: http://en.wikipedia.org/wiki/Document-oriented_database

RavenDB nedir?

RavenDB .Net ortamında C# dili kullanarak geliştirilmiş açık kaynak kodlu bir döküman veritabanıdır. Kişisel kullanım ve açık kaynak kodlu projeler için ücretsiz, ticari kullanımlar için ücretlidir. Ayrıntılı bilgi için (http://ravendb.net/licensing)

RavenDB üzerinde diğer bir çok döküman veritabanı sistemindeki gibi şema tanımlamanız gerekmez. Her hangi bir nesneyi direkt saklayabilir ve sorgulayabilirsiniz. Bu şekilde geliştirme zamanından tasarruf edebilir ve şemalarla uğraşmadığınızdan sadece uygulama sürecine odaklanabilirsiniz.

RavenDB kullanımına giriş

RavenDB web sitesinden (http://ravendb.net/download) RavenDB nin son release versiyonunu indirip zip dosyasını açtığınızda aşağıdaki gibi bir yapı göreceksiniz.

Bu klasör yapısında RavenDB server ve ClientAPI dosyaları yer alır. RavenDB yi aşağıdaki şekillerde çalıştırabilirsiniz:

1.Konsol uygulamasına çift tıklayarak çalıştırılabilir, genelde geliştirme ve debugging sırasında kullanılır.

2.Server klasörü altında bulunan Raven.Server.exe yi /install parametersi ile çalıştırarak server ın Windows Servisi olarak çalışmasını sağlayabilirsiniz. (Raven.Server.exe /install)

3.RavenDB yi client uygulamalarınızın içinde çalıştırabilirsiniz (Embedded Mode)

RavenDB dataları Server klasörünün içindeki Data klasöründe saklar. Eğer bu klasör silinirse tüm verileriniz silinecektir. Data klasörünün yolunu Raven.Server.exe.config dosyasından değiştirebilirsiniz.

Start.cmd dosyasını çalıştırdığınız aşağıdaki şekilde bir ekranla bizi karşılayacaktır ayrıca tarayıcımızda RavenDB Management Studio çalışacaktır. (RavenDB Management Console için bilgisayarımız Silverlight kurulu olmalıdır) RavenDB varsayılan olarak 8080 port numarasını kullanır.

RavenDB Server Console

RavenDB Management Studio

Management Studio ilk açıldığında içinde data bulunmuyor. Create sample data butonuna tıklayarak örnek dataları oluşturabiliriz. Datalar oluştuktan sonra aşağıdaki şekilde bir ekran belirecektir.

Document nedir?

Bir döküman her hangi bir JSON nesnesidir. İlişkisel veritabanı ile karşılaştırdığımızda tablodaki bir satır olarak düşünebilirsiniz ama sütun sayısı ve içeriği belli değildir, tam olarak C# tarafındaki nesnenin (Entity) JSON olarak serileştirilmiş halidir.

Buradan her hangi bir Albums e tıkladığımızda aşağıdakine benzer bir formatla karşılaşacağız. Şimdi bu kavramları açıklayalım.

Data alanı nesnenin JSON formatında serileştirilmiş halidir. Metadata kısmında bu nesnenin hangi .Net Assembly içerisinde yer aldığını bilgileri tutulur. Metadata ClientAPI tarafından otomatik oluşturulur.

albums/393 alanı ise dökümanı diğer dökümanlardan olarak ayıran benzersiz anahtardır.

Collections nedir?

Raven-Entity-Name alanı aynı olan tüm dökümanları ortak bir şekilde gruplayan koleksiyondur. Bizim örnek veritabanımızda iki çeşit döküman olduğundan iki çeşit koleksiyon bulunmaktadır.

Bu yazımda RavenDB yi gözatma biçiminde inceledik ve bazı önemli kavramlar hakkında bilgi edinmiş olduk. Bir sonraki yazımda RavenDB üzerinde yeni bir veritabanı oluşturarak örnek data eklemeyi ve sorgulamayı öğreneceğiz.

Geri dönüşleriniz ve önerileriniz benim için önemlidir.

Tekrar görüşmek üzere, iyi günler.


Hakkımda

Friday, December 15, 1989

Merhaba,

Ben Oğuzhan Eren. İstanbul'da yaşıyorum. Freelance olarak çalışmakta ve danışmanlık yapmaktayım.

İlgi duyduğum ve çalıştığım konular:

  • Software Architecture / Design
  • DDD / CQRS / Event Sourcing
  • Distributed System / Service Bus
  • Parallel Programming
  • Business Domain Modeling

Her türlü konuda benimle iletişime geçebilirsiniz.

İletişim