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