• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Apache Cassandra ve .Net

Open Source olarak sunulan popüler NoSQL veritabanlarından Apache Cassandra' nın .Net tarafındaki kullanımını incelemeye çalışıyoruz.

17.12.2012

Yazar: Burak Selim Şenyurt (Google+)

Kategori: .Net Framework

4922

Size bu günkü makale konumuzun yanda fotoğrafı görülen model(youtube modeli de diyebiliriz) Cassandra Bankson ile alakalı olduğunu söylemek isterdim ama yakınlarından bile geçmeyeceğiz. (Zaten araştırırsanız aslında makyaj bidonu ile bu hale geldiğini keşfedeceksiniz) Başlıktan da anlayacağınız üzere bu günkü yazımızın konusu .Netplaftormunda Apache Cassandra’ yı kullanmak.

Uzun zamandır gündemimde olan konulardan birisi deNoSQL veritabanı sistemleri. Internet şirketlerinin pek çoğu(Facebook, Twitter, Youtube, Netflix vb)  NotOnly SQL veritabanlarını kullanmakta ve hatta bir kısmının kendi geliştirdikleri NoSQL sistemleri bile var. Amazon, Google bu noktada öncüler diyebiliriz.

NoSQL veritabanlarının popüler olmalarının elbette bazı sebepleri var. Özellikle RDMS' lerin tipik özelliklerine ters gelen kabiliyetleri nedeni ile büyük veriler ile çalışılmasında, ölçeklemelerde, performans da öne çıkabilmektedirler. Tabi bu avantajlar, NoSQL yapısına uygun veri kümeleri için söz konusudur. Her veri yapısı veya modeli için NoSQL sistemleri uygun olmayabilir. (Yani RDMS' i terk eden bir dünyadan bahsedemeyiz Smile)

Ancak NoSQL sistemler çeşitlilikleri açısından da RDMS’ lere göre farklılaşmakta ve bu yüzden daha fazla tercih edilir olmaktadır. Bu çeşitler kısaca şunlardır;

  • Wide Column Store / Column Families (Cassandra bu kategoride gösterilmiştir)
  • Document Store
  • Key Value / Tuple Store
  • Graph Databases
  • Multimodel Databases
  • Object Databases
  • Grid & Cloud Databases
  • XML Databases
  • Multidimensional Databases
  • Multivalue Database

Aslında ortalıkta pek çok NoSQL sistemi var. Hatta çoooook uzun zaman önce Berkley üniversitesi tarafından üretilen Berkley_DB bu işin atasıdır diyebiliriz. Günümüzde ise MongoDb, Neo4j, db4o, bigtable, hadoop, Redis, MemcachedDB vb ürünler bulunmakta. (Tam ve güncel bir listeye bu adresten ulaşabilirsiniz) NoSQL sistemlerinin popüler olanlarından biriside ismini Yunan Mitolojisinden aldığını düşündüğüm Apache' nin Cassandra isimli ürünüdür. Bu yazımızdaCassandra’ yı .Net platformunda nasıl kullanabileceğimizi incelemeye çalışıyor olacağız.

Apache Cassandra' yı http://cassandra.apache.org/download/ adresinden indirebilirsiniz. Cassandra yı indirdiğinizde büyük ihtimalle tar.gz uzantılı bir dosya gelecektir. Dolayısıyla Windows tabanlı bir sistemde bunu açacak uygulamaya ihtiyacınız var. 7Zip bu konuda bana yardımcı oldu diyebilirim.

Cassandra' yı bir klasöre açtıktan sonra sisteme bazı çevresel değişkenlerin de ilave edilmesi gerekmektedir(Environment Variables). Bunlardan birisi JAVA_HOME dur ve sistem de kurulmuş olan Java klasörünü göstermektedir. Diğeri ise CASSANDRA_HOME olarak adlandırılmaktadır ve Cassandra' nın açıldığı klasörü işaret etmektedir. Kendi sistemimde bu değerleri şu şekilde ayarladım.

 

 

Kurulum işlemi için gerekli ayarları yaptıktan sonra bin klasörü altında yer alan cassandra.batdosyasını çalıştırabiliriz. Bu batch dosyası sunucuyu etkinleştirecektir. Cassandra verilerin loglarını tutmak için root klasördeki var isimli alt klasörü kullanır (Bu kuruluma göre d:\var altındadır ama istendiği takdirde conf klasörü içindeki cassandra.yaml' den konum değiştirilebilir)

Genel Özellikler

Cassandra' nın genel özelliklerine baktığımızda aşağıdakileri ifade edebiliriz.

  • Java ile geliştirilmiş bir veritabanı sistemidir ve bu nedenle kurulduğu makinede Java ortamının var olması gerekmektedir.
  • Bir NoSQL(Not Only SQL) sistemidir. Dolayısıyla SQL, Oracle gibi ilişkisel bir veritabanı modeli değildir.
  • Açık kaynaktır(Open Source)
  • Bir Oracle veya SQL Server olmasa da Youtube, Netflix gibi pek çok dünya markası tarafından çeşitli ürünlerde kullanılmaktadır.
  • Kolayca ölçeklenebilir(Scalable)
  • Hata tolerans yönetimi mevcuttur.
  • Sütun odaklı(Wide Column Store/Column Families) çalışan bir NoSQL tipidir.
  • Distribution tasarım modeli Amazon' un Dynamo ürünü esaslıdır.
  • Dağıtık modele destek verdiğinden veriyi n sayıda makine üzerinde genişletmek mümkündür. Bu anlamda RDMS(Relational Database Managament Systems) lerin tam aksine Ring düzenine göre çalışır. Bir başka deyişle dikey(Vertical) değil yatay(Horizontal) olarak ölçeklenir.
  • Terabyte' larca veriyi tutabilir Winking smile

Veri modeline üstten bakıldığında yapısı RDMS şemalarına benzetilebilir. Sütunlar veisimlendirilmiş değerler(Named Values) söz konusudur. Ancak pratikte hiç de böyle değildir.Cassandra bir şema yapısı kullanmamaktadır. Ya bizim aşina olduğumuz tipte bir şema kullanmamaktadır diyebiliriz. Veriyi sütunlar topluluğu halinde tutar. Aslında bu konuda çok fazla detaya girmeyeceğiz.

İlk Çalışma

Cassandra' yı kurup çalıştırdıktan sonra(cassandra.bat ile yapıyoruz) komut satırından hemen veri girişi işlemleri yaptırılabilir. Bunun için yine bin dizinindeki cassandra_cli.bat dosyasının çalıştırılması yeterlidir. Bu bir komut satırı istemcisidir ve cassandra sunucusuna bağlanacaktır. Aşağıdaki ekran görüntüsünde örnek bir kullanıma yer verilmiştir.

 

Buradaki komutlardan da anlaşılacağı üzere veritabanı aslında bir keyspace' dir. Bu keyspaceiçerisinde bir tablo oluşturmak aslında bir Column Family yaratmak anlamına gelmektedir.Column Family içerisine set edilen Row Key’ ler aslında bildiğimiz tablo satırlarına benzetilebilir.Row Key’ ler içerisinde ise key-value şeklinde kolonlar ve verileri bulunmaktadır. Her key-valuecolumn aslında bir Row Key ile ilintilidir.

Dikkat edileceği gibi kolonlarda key-value şeklinde bir tutuluş söz konusudur. Ortam tamamencase sensitive' dir ve ifadelerin çalışması için ; ile bitirilmesi gerekmektedir. Örnekte kullandığımız komutlar ise aşağıdaki gibidir.

İlk Komutlar

  • create keyspace ile BigFootMotorCompany isimli bir key space üretilmiştir.
  • create column family ile Car isimli bir Row Key üretilmiştir.
  • set ile Car içerisinde sütun(Column) ve key-value eklenmiştir.
  • get ile bir ModelX isimli column verisi çekilmiştir.

Yapılan bu üretim sonrasında klasör yapısıda aşağıdaki şekilde görüldüğü gibi oluşacaktır.

 

Veri binary formatta tutulmaktadır.

Gelelim .Net Framework tarafına

.Net tarafında Cassandra ile çalışabilmek için NuGet paketlerinden birisi olan FluentCassandraile çalışabiliriz. İlk olarak basit bir Console uygulaması açalım ve NuGet paket yöneticisini kullanarak internetten Fluent Cassandra paketini indirelim(Dilerseniz komut satırından da install edebilirsiniz. Install-Package FluentCassandra ifadesini çalıştırmanız yeterli olacaktır)

 

İlk Kodlar

İşte ilk deneme kodlarımız.

using FluentCassandra; 
using FluentCassandra.Connections; 
using System;

namespace HowTo_HelloApacheCassandra 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            // Sunucu ile bağlant kuralım. Varsayılan olarak localhost ismiyle bağlanabiliriz. 
            Server cassandraServer = new Server("localhost");

            // Komut satırından ürettiğimiz BigFootMotorCompany isimli key space ile çalışacağız 
           using (var database = new CassandraContext(keyspace: "BiGFootMotorCompany", server: cassandraServer)) 
            { 
                // sunucuya ve veritabanına bağlanıp bağlanamadığımız test etmek için bir kaç bilgi talep edelim. 
                Console.WriteLine("Server port : {0}, database verison : {1}" 
                    ,cassandraServer.Port 
                    , database.DescribeVersion() 
                    );

                #region Yeni bir Column Family oluşturmak

                CassandraColumnFamily newFamily = database.GetColumnFamily("ModelDesigner");

                // Cassandra Query Language kullanarak bir Column Family oluşturuyor ve içerisine bir kaç column ilave ediyoruz 
                // Sonraki denemelerde bu satırda hata vermemesi için bir null kontrolü yapmak da işe yarayabilir 
                if(newFamily==null) 
                    database.ExecuteQuery(@" 
                    create columnfamily 
                    ModelDesigner( 
                        ModelDesignerId ascii Primary Key 
                        ,Title text 
                       ,Nickname text 
                        ,Level int 
                        ,Outsource boolean);" 
                    );

                // Yeni bir satır oluşturalım 
                // dynamic tipin çalışma zamanında çözümlenmesine neden olacaktır. 
                dynamic burkinyus=newFamily.CreateRecord("burkinyus"); 
                // Key' lerin değerlerini atayalım 
                burkinyus.Title = "Mr."; 
                burkinyus.Nickname = "burkinyus"; 
                burkinyus.Level = 100; 
                burkinyus.Outsource = false;

                // Yeni oluşturlan satırları Context' e ekleyelim 
                database.Attach(burkinyus);

                // bir satır daha oluşturalım ve alanlarını set edelim 
                dynamic oktavyus = newFamily.CreateRecord("oktavyus"); 
                oktavyus.Title = "Mr."; 
                oktavyus.Nickname = "oktavyus"; 
                oktavyus.Level = 400; 
                oktavyus.Outsource = true; 
                
                database.Attach(oktavyus);

                // Değişiklikleri kayıt edelim 
                database.SaveChanges();

                // şimdi de verileri çekip gösterelim 
                var designers = database.ExecuteQuery("select * from ModelDesigner");

                foreach (dynamic designer in designers) 
                { 
                    Console.WriteLine("{0} {1}({2}) {3}" 
                        ,designer.Title 
                        ,designer.Nickname 
                        ,designer.Level 
                        ,designer.Outsource==true?"Outsource":"_" 
                        ); 
                } 
                #endregion 
            }            
        } 
    } 
}

ve çalışma zamanı çıktısı.

Uygulamanın başarılı bir şekilde çalışabilmesi için tahmin edeceğiniz üzere Cassandra sunucusunun da açık olması gerekir. Aksi durumda çalışma zamanında aşağıdakine benzer bir istisna(Exception) fırlatılacaktır.

Bu ilk örnekte BiGFootCompany key space’ ine bağlanıp ModelDesigner isimli yeni bir ColumnFamily oluşturmaktayız. Bu Column Family içerisinde de, Title, Nickname, Level ve Outsourcegibi kolonlar bulunmakta. Örnek olarak iki adet satır oluşturulmakta ve veritabanına ilave edilerek bir sonuç listesinin ekrana bastırılması sağlanmaktadır. Dikkat edileceği üzere SQL ifadelerine çok benzeyen bazı sorgular da kullandık. Bunlar CQL(Cassandra Query Language) olarak adlandırılmaktadır. Ayrıca işlerimizi biraz daha kolaylaştırmak adına dynamic anahtar kelimesinden faydalanmaya çalıştık. Bu sayede Row Key’ lerin kolonlarına, birer özellikmiş gibi erişebilmemiz mümkün oldu. Böylece geldik bir makalemizin daha sonuna. Bir sonraki yazımızda görüşünceye dek hepinize mutlu günler dilerim Winking smile

 

Yazar Hakkında

Burak Selim Şenyurt

Burak Selim Şenyurt

buraksenyurt.com

Yıldız Teknik Üniversitesi Matematik Mühendisliği mezunu olan Şenyurt, 1999 yılında profesyonel olarak adım attığı yazılım dünyasında, 2003 yılından beri Microsoft .Net teknolojileri ile ilgilenmektedir. Yazılım hayatına Assist Line isimli Call Center firmasında Delphi programcısı olarak başlayan Şenyurt sonrasında, sırasıyla Bizitek(Junior Developer), Netron(Master Trainer), Citibank(Outsource Senior Software Developer), Innova(Application Development Consultant), ve TCM(Software Architect) firmalarında görev almıştır. Su anda ING Bank bünyesinde Kıdemli Yazılım Danışmanı olarak görev yapmaktadir. 2006, 2007 yıllarında C#, 2008,2009,2010 yıllarında ise Connected System Developer kategorisinde Microsoft MVP seçilen Şenyurt, evli ve 1 çocuk babasıdır. C# diline olan düşkünlüğü, oğluna S(h)arp adının verilmesinde önemli bir etken olmustur.

Sosyal Medya

ORANLAR

  • 4922izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 122030
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 68134
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 49928
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ