• 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

Graph Database DEX

NoSQL sistemlerinden birisi olan Graph tipindeki DEX ürününü incelemeye çalışıyoruz.

20.02.2013

Yazar: Burak Selim Şenyurt (Google+)

Kategori: .Net Framework

3236

dex_7Merhaba Arkadaslar,

Eminim pek çogunuzun hastasi/fanatigi oldugu yerli veya yabanci diziler vardir. Küçük bir çocukken çizgi filmlere olan düskünlügümüz kadar olmasa da, hemen her bölümünü heyecanla beklediklerimiz mutlaka vardir(Hatta ülkemizde geç yayinlaniyor diye ilgili dizileri internetten indirenlerimizde vardir)

Bilisim alaninda görev alanlarin agirlikla CNBC-E gibi kanallarda yer alan dizilere olan bagimliligi da aslinda su götürmez bir gerçektir. Örnegin benim fanatigi oldugum dizilerden birisi Dexter ve ne tesadüftür ki bu gün yazimizda ele alacagimiz ürünün adi da onun lakabi ile es: DEX Laughing out loud

Daha önceden hatirlayacaginiz üzere suradaki makalede Apache Cassandra’ yi, oradaki makalede ise RavedDB’ yi incelemeye çalismistik. Bu yazimizda ise yine NoSQL veritabani çesitlerinden birisi olup Graph teorisini baz alan DEX isimli ürünü incelemeye çalisiyor olacagiz.

Sparsity firmasinin bir ürünü olan DEX, Community kullaniminda 1milyon nesneye(Objects) kadar ücretsiz olarak yararlanilabilen bir veritabani sunmaktadir. Veritabaninin en önemli özelligi ise içerigi nesnel olarak Graph teorisine göre tutuyor olmasidir. (Graph teorisi hakkinda Wikipedia baglantisindan özet bir bilgi alabilirsiniz)

Kisaca özetlemek gerekirse Graph veritabanlarinda Node, Attribute ve Edge adi verilen nesneler söz konusudur. Her bir Node ve Edge nesnesinin attribute’ lar ile tanimlanabilen özellikleri mevcuttur. Graph veritabanlarinda, node’ lar arasi iliskiler Edge örnekleri ile tanimlanmaktadir. Facebook, Twitter, Linkedin gibi popüler sosyal aglarin veri ambarlarinin tasarlanmasi noktasinda son derece isabetli bir seçimdir. Nitekim node’ lar arasi en kisa yolu bulmak veya iliskileri ortaya çikarmak, Graph teorisi nedeniyle oldukça kolay, tutarli ve hizlidir. Bu sebepten sadece sosyal aglar da degil IMDB, Wikipedia tarzi olusumlarda, Lojistik, Telekom aglari gibi daha endüstüriyel çözümlerde de degerlendirilebilmektedir. (Aslina bakarsaniz Graph teorisini uygulayabileceginiz ne kadar veri bazli çözüm var ise DEX gibi sistemleri göz önüne alabilrsiniz)

DEX veritabani C++ ile yazilmistir. Java, .Net, C++, Blueprints Interface API destegi bulunmaktadir. Dolayisiyla pek çok farkli platform tarafindan da kullanilabilir bir üründür.

Åžimdi dilerseniz fazla vakit kaybetmeden basit bir Hello World uygulamasi gelistirmeye çalisalim. Tabi ilk olarak bir senaryoyu göz önüne almamiz gerekiyor. Senaryomuza ait basit Graph çizimimiz asagidaki gibidir.

dex_1

Bu sekli biraz inceleyelim Winking smile

Basketbol oyunculari, takim koçlari ve takimlarin yer aldigi bir sema görmekteyiz. Ayrica bu karakterlerin bazi özellikleri de bulunmaktadir. Örnegin isimler, ülkeler ve benzersiz olmalarini saglayan sayisal numaralar gibi. Ayrica bu karakterler arasinda belirli bir yöne dogru çizilmis iliskiler oldugu görülmektedir. Tüm bunlari birlestirdigimizde sekle bakarak asagidaki cümleleri ve benzerlerini sarf edebilmekteyiz.

  • Simone Pianigiani koç olarak Fenerbahçe Ülker’ i yönetmekte olup Montepaschi Siena’ yi da önceki bir dönemde çalistirmistir.
  • Gasper Vidmar su anda Beşiktaş takiminda oynamakta olup daha önceden Fenerbahçe Ülker’ de de oynamistir.
  • Semih Erden su anda Beşiktaş takiminda oynamakta olup, daha önceden de Fenerbahçe Ülker formasini giymistir.
  • Amerikali Power Forward Marcus Goree, daha önceden Erman Kunter’ in çalistirdigi Fransiz Cholet basketbol takiminin formasini giymektedir.

Örnekler çogaltilabilir. Aslinda Facebook’ de yer alan arkadaslarinizi, dahil oldugunuz gruplari, bu teori isiginda kagida dökmeyi deneyerek kendi örneginiz üzerinden de ilerleyebilirsiniz.

Peki bu cümleleri, bir baska deyisle sekilde görülen Graph unsurlarini bilgisayar ortaminda nasil saklayabiliriz? I don't know smile Bu amaçla indirdigimiz DEX ürününü kullaniyor olacagiz. Agiz aliskanligi nedeniyle bir veritabani olarak tanimladigimiz DEX aslinda asagida sekilde görülen bir kaç DLL ile birlikte gelmektedir. Yani daha önceden inceledigimiz RavenDb gibi bir Server uygulamasina veya arayüze sahip degildir. Yine de kavramsal olarak tuttugu içerik bir veri kümesini ifade etmektedir. Daha çok bir API oldugunu ifade edebiliriz. Veriyi disk üzerinde bir dosya seklinde tutmaktadir.

dex_2

Dexnet.dll bizim kullanacagimiz Wrapper’ dir. Yani projeye referans etmemiz gereken Assembly’ dir.

dex_3

Ancak bu yeterli degildir. Diger dll dosyalarinin, Dexnet.dll ve uygulamaya ait exe dosyasi ile ayni klasör altinda bulundurulmalari gerekmektedir. Yani dex.dll, dexnetwrap.dll ve stlport.dll dosyalarinin da exe çiktisinin oldugu klasöre kopyalanmasi gerekmektedir.

dex_4

Bu islem yapilmadigi takdirde çalisma zamaninda Platform Invoke ile iliskili bir istisna(Exception) alinacaktir.

dex_5

Bu hazirliklarin ardindan örnek kodlarimizi yazmaya baslayabiliriz. Ben uygulamayi bir Console projesi olarak gelistirecegim ve sadece ilk kullanimlarini göstermeye çalisacagim. Bir gerçek hayat senaryosunda sema(Schema) olusturulmasi gibi adimlarin tek seferde yapilmasini garanti etmeye çalismalisiniz. Hatta semalarin kolayca yapilmasini saglamak amaciyla ayri bir arabirim dahi gelistirilebilir(SQL Server Management Studio tarzi bir sey olmasa da ise yarar bir arayüz pekala çok isabetli bir tercih olabilir)

Ilk olarak veritabanini ve Graph nesnelerine ait semalari tanimlayacagimiz kodlari yazarak ise baslayabiliriz.

Database database = null;
DexConfig cfg = new DexConfig();
cfg.SetLogFile("Azon.log");
cfg.SetCacheMaxSize(1024);
//cfg.SetLicense("lisans numarasi");
Dex dexter = new Dex(cfg);
database = dexter.Create("AzonGraphDb.dex", "Azon");

Yukaridaki kod parçasinda bir veritabaninin olusturulma adimlari örneklenmektedir. Önemli olan noktalardan birisi Dex tipini örneklerken bazi konfigurasyon ayarlari için DexConfig sinifindan yararlanilmasidir. Örnegin ürünün lisansli olan bir sürümü alinirsa bunun SetLicence metodu ile bildirilmesi gerekecektir. Veritabani nesne örnegi olusturulduktan sonra Node, Attribute ve Edge tanimlalarini yaparak semayi da olusturabiliriz.

Session session= database.NewSession();
Graph g = session.GetGraph();

#endregion

#region Schema' nin Olusturulmasi

int teamType = g.NewNodeType("Takim");
int teamIdType = g.NewAttribute(teamType, "TakimId", DataType.Long, AttributeKind.Unique);
int teamNameType = g.NewAttribute(teamType, "Ad", DataType.String, AttributeKind.Indexed);
int teamCountryType = g.NewAttribute(teamType, "Ulke", DataType.String, AttributeKind.Indexed);

int staffType = g.NewNodeType("Eleman");
int staffIdType = g.NewAttribute(staffType, "ElemanId", DataType.Long, AttributeKind.Unique);
int staffNameType = g.NewAttribute(staffType, "Ad", DataType.String, AttributeKind.Indexed);
int staffTitleType = g.NewAttribute(staffType, "Unvan", DataType.String, AttributeKind.Indexed);
int staffCountryType = g.NewAttribute(staffType, "Ulke", DataType.String, AttributeKind.Indexed);

#endregion Schema' nin Olusturulmasi

#region Edge Tanimlamalari

// Bu senaryoda sadece Directed Edge kullanilmistir. Normalde hem Tail hem de Head rolü üstlenen bir node söz konusu ise UnDirected Edge kullanilmasi gerekir.
// Directed Edge' ler de bir Tail' den Head' e dogru giden bir iliski ifade edilir

int roleType = g.NewEdgeType("Rol", false, false);
int roleTitleType = g.NewAttribute(roleType, "Title", DataType.String, AttributeKind.Basic);

#endregion Edge Tanimlamalari

Åžema olusturma islemlerinde olayin kahramani Graph tipinden olan nesne örnegidir. Bir Graph nesnesini örneklemek için veritabanina ait oturumdan yararlanilmalidir. Bu sebepten bir Session örnegi olusturulmustur. Session açik oldugu süre zarfinda Graph örnegi üzerinden yapilan tüm islemler(sema olusturma, veri ekleme, güncelleme vb) bu oturuma ait olacak sekilde gerçeklesecektir.

Dikkat edilecegi üzere takimlar ve oyuncular ile antrenörleri ifade eden elemanlar için birer Node üretilmistir. Her Node’ un kendine has bir takim nitelikleri vardir. Örnegin her elemanin bir adi, uyrugu ve ünvani gibi. Bir Node üretilirken bir veri tipinin belirtildigine ve AttributeKind ile sekillendirildigine de dikkat edelim. Indexed olarak isaretlenenler sorgulanabilir olduklarini göstermektedir. Unique, tahmin edilecegi üzere ilgili niteligin degerinin benzersiz olmasini saglamaktadir. Hatta ElemanId ve TakimId bu anlamda Primary Key olmuslardir. AttributeKind ile belirtilebilecek bir diger deger de Basic’ tir. Basic tipindeki nitelikler sorgulamalarda(Query) kullanilamazlar.

Node tanimlalarinin ardindan dikkat edilecegi üzere bir Edge örnegi de üretilmis ve bu kendisine bir nitelik de eklenmistir. Bir tane Edge su andaki senaryomuz için yeterlidir. Bu Edge’ in ilgili niteliginden yararlanarak Oynuyor, Oynadi, Yönetti, Yönetiyor seklindeki iliskileri tesis edebiliriz. Pek tabiki bir gerçek hayat senaryosunda bu tip sabit degerleri bir Enum tipi içerisinde toplamak daha dogru bir yaklasim olabilir.

DEX, Edge tanimlamalarini iki sekilde degerlendirmektedir. Directed ve Undirected. Directed iliskisinde bir kaynak Node(Tail olarak adlandirilmakta) ve bir de hedef Node vardir(Head olarak adlandirilmaktadir). Undirected iliskilerde de ise Node' lar hem Tail hem de Head rolündedir. Örnegimizde Undirected iliski senaryosu ele alinmamistir. Ancak DEX’ e ait teknik dökümantasyonda örnek bir kullanimi mevcuttur.

Artik sema tanimlamalarimizi yaptigimiza göre örnek verilerin eklenmesi islemini gerçeklestirebiliriz. Yapacagimiz veri eklemeleri ile temel hedefimiz Graph görselindeki iliskileri ve degerleri üretmektir. Iste kodlarimiz.

#region Örnek Veri Eklenmesi

Value value = new Value();

long marcusGoree = g.NewNode(staffType);
g.SetAttribute(marcusGoree, staffIdType, value.SetLong(1));
g.SetAttribute(marcusGoree, staffNameType, value.SetString("Marcus Goree"));
g.SetAttribute(marcusGoree, staffTitleType, value.SetString("Power Forward"));
g.SetAttribute(marcusGoree, staffCountryType, value.SetString("USA"));

long rudyGobert = g.NewNode(staffType);
g.SetAttribute(rudyGobert, staffIdType, value.SetLong(2));
g.SetAttribute(rudyGobert, staffNameType, value.SetString("Rudy Gobert"));
g.SetAttribute(rudyGobert, staffTitleType, value.SetString("Power Forward"));
g.SetAttribute(rudyGobert, staffCountryType, value.SetString("FR"));

long gasperVidmar = g.NewNode(staffType);
g.SetAttribute(gasperVidmar, staffIdType, value.SetLong(3));
g.SetAttribute(gasperVidmar, staffNameType, value.SetString("Gasper Vidmar"));
g.SetAttribute(gasperVidmar, staffTitleType, value.SetString("Center"));
g.SetAttribute(gasperVidmar, staffCountryType, value.SetString("SL"));

long semihErden = g.NewNode(staffType);
g.SetAttribute(semihErden, staffIdType, value.SetLong(4));
g.SetAttribute(semihErden, staffNameType, value.SetString("Semih Erden"));
g.SetAttribute(semihErden, staffTitleType, value.SetString("Center"));
g.SetAttribute(semihErden, staffCountryType, value.SetString("TR"));

long oguzSavas = g.NewNode(staffType);
g.SetAttribute(oguzSavas, staffIdType, value.SetLong(5));
g.SetAttribute(oguzSavas, staffNameType, value.SetString("Oguz Savas"));
g.SetAttribute(oguzSavas, staffTitleType, value.SetString("Center"));
g.SetAttribute(oguzSavas, staffCountryType, value.SetString("TR"));

long simonePianigiani = g.NewNode(staffType);
g.SetAttribute(simonePianigiani, staffIdType, value.SetLong(6));
g.SetAttribute(simonePianigiani, staffNameType, value.SetString("Simone Pianigiani"));
g.SetAttribute(simonePianigiani, staffTitleType, value.SetString("Coach"));
g.SetAttribute(simonePianigiani, staffCountryType, value.SetString("IT"));

long ermanKunter = g.NewNode(staffType);
g.SetAttribute(simonePianigiani, staffIdType, value.SetLong(7));
g.SetAttribute(simonePianigiani, staffNameType, value.SetString("Erman Kunter"));
g.SetAttribute(simonePianigiani, staffTitleType, value.SetString("Coach"));
g.SetAttribute(simonePianigiani, staffCountryType, value.SetString("IT"));

long besiktas = g.NewNode(teamType);
g.SetAttribute(besiktas, teamIdType, value.SetLong(8));
g.SetAttribute(besiktas, teamNameType, value.SetString("Beşiktaş"));
g.SetAttribute(besiktas, teamCountryType, value.SetString("TR"));

long cholet = g.NewNode(teamType);
g.SetAttribute(cholet, teamIdType, value.SetLong(9));
g.SetAttribute(cholet, teamNameType, value.SetString("Cholet"));
g.SetAttribute(cholet, teamCountryType, value.SetString("FR"));

long fenerbahceUlker = g.NewNode(teamType);
g.SetAttribute(fenerbahceUlker, teamIdType, value.SetLong(10));
g.SetAttribute(fenerbahceUlker, teamNameType, value.SetString("Fenerbahçe Ülker"));
g.SetAttribute(fenerbahceUlker, teamCountryType, value.SetString("TR"));

long montepaschiSiena = g.NewNode(teamType);
g.SetAttribute(montepaschiSiena, teamIdType, value.SetLong(11));
g.SetAttribute(montepaschiSiena, teamNameType, value.SetString("Montepaschi Siena"));
g.SetAttribute(montepaschiSiena, teamCountryType, value.SetString("IT"));

long edge;
edge = g.NewEdge(roleType,marcusGoree,cholet);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynuyor"));

edge = g.NewEdge(roleType, rudyGobert, cholet);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynuyor"));

edge = g.NewEdge(roleType, ermanKunter, cholet);
g.SetAttribute(edge, roleTitleType, value.SetString("Yönetti"));

edge = g.NewEdge(roleType, ermanKunter, besiktas);
g.SetAttribute(edge, roleTitleType, value.SetString("Yönetiyor"));

edge = g.NewEdge(roleType, gasperVidmar, besiktas);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynuyor"));

edge = g.NewEdge(roleType, gasperVidmar, fenerbahceUlker);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynadi"));

edge = g.NewEdge(roleType, semihErden, besiktas);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynuyor"));

edge = g.NewEdge(roleType, semihErden, fenerbahceUlker);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynadi"));

edge = g.NewEdge(roleType, oguzSavas, fenerbahceUlker);
g.SetAttribute(edge, roleTitleType, value.SetString("Oynuyor"));

edge = g.NewEdge(roleType, simonePianigiani, fenerbahceUlker);
g.SetAttribute(edge, roleTitleType, value.SetString("Yönetiyor"));

edge = g.NewEdge(roleType, simonePianigiani, montepaschiSiena);
g.SetAttribute(edge, roleTitleType, value.SetString("Yönetti"));

#endregion Örnek Veri Eklenmesi

Kod satirlarinin uzun görünmesine aldiris etmeyin. Temel olarak icar ettirdigimiz iki fonksiyonel akis söz konusudur. Node ve Edge olusturmak. Bir Node üretilirken hangi tipten oldugu belirtilir. Ardindan elde edilen nesne örnegi için söz konusu tipin içerisinde tanimlanan niteliklere(Attribute) deger atamalari gerçeklestirilir.

Edge örnekleri olusturulurken de ilk olarak Edge tipi belirtilmektedir. Tip belirtildikten sonra ise yine Node olusturulmasina benzer olacak sekilde nitelik degerlerinin verilmesi söz konusudur. Her iki kullanimda da degerlerin atanmasi için Value tipinden ve ilgili Set fonksiyonundan yararlanilmaktadir. Örnegin long tipinden olan ElemanId için value nesne örneginin SetLong metodundan yararlanilirken, string tipte olan takim adlari için SetString fonksiyonu kullanilmaktadir. Tanimlanan her Edge ile Graph görselinde yer alan iliskilerin tanimlandigina dikkat edilmelidir.

Siz tabiki makaleyi okuyup kullanim tekniklerini ögrendikten sonra söyle güzel janjanli WPF/Asp.Net ekranlari hazirlayarak bu isi daha zevkli hale getirebilirsiniz Winking smile

Veri ekleme islemlerini tamamladigimiza göre basit bir arama islemi ile devam edebiliriz. Örnegin Semih Erden’ in bagli oldugu bogumlari bulalim.

Objects trace = g.Neighbors(semihErden, roleType, EdgesDirection.Outgoing);

ObjectsIterator iterator = trace.Iterator();

Value nameValue = new Value();
Value countryValue = new Value();
Console.WriteLine("Semih Erden baglantilari\n");

while (iterator.HasNext())
{
    long objectId = iterator.Next();
   g.GetAttribute(objectId, teamNameType, nameValue);
    g.GetAttribute(objectId, teamCountryType, countryValue);

    Console.WriteLine("Takim {0}, Ülke {1}",
        nameValue.GetString(),
        countryValue.GetString());
}

Yine Graph nesne örneginden yararlanilmaktadir. Ilk olarak Neighbors metodu ile semihErden örneginin roleType’ a göre disariya dogru olan komsularina gidilmektedir. roleType bildiginiz üzere bir Edge örnegidir. Tabi n sayida sonuç dönebileceginden ileri yönlü bir iterasyona ihtiyaç vardir. Bu sebepten ObjectsIterator tipinden bir nesne örneklenmis ve while döngüsüne basvurulmustur. HasNext’ in true döndürdügü sürece devam eden döngü içerisinde ise GetAttribute metodundan yararlanilarak elde edilen Node’ un bazi degerleri okunmaktadir. Takim adi ve bulundugu ülke.

Peki iki Node arasindaki Edge örnegini nasil yakalayabiliriz? Who me? Bunun için örnek bir kullanim asagidaki kod parçasinda görüldügü gibidir.

#region Edge degeri okumak

Value roleTitleValue = new Value();

Console.WriteLine("\nÇesitli Edge degerleri\n");

long edgeId=g.FindEdge(roleType, semihErden, besiktas);           
g.GetAttribute(edgeId, roleTitleType, roleTitleValue);
Console.WriteLine("Semih Erden - ({0}) -> Beşiktaş",roleTitleValue );

edgeId = g.FindEdge(roleType, simonePianigiani, montepaschiSiena);
g.GetAttribute(edgeId, roleTitleType, roleTitleValue);
Console.WriteLine("Simone Pianigiani - ({0}) -> Montepaschi Siena", roleTitleValue);

edgeId = g.FindEdge(roleType, oguzSavas, fenerbahceUlker);
g.GetAttribute(edgeId, roleTitleType, roleTitleValue);
Console.WriteLine("Oguz Savas - ({0}) -> Fenerbahçe Ülker", roleTitleValue);

#endregion Edge degeri okumak

Ilk sorguda, FindEdge metodu ile semihErden ve beşiktaş isimli Node örnekleri arasinda yer alan roleType tipinden olan Edge örneginin nesne numarasi alinmaktadir. Bu nesne numarasi GetAttribute metodunda kullanilir ve roleTitleType tipinden olan niteligin tasidigi deger yakalanir. Bu senaryo takip eden sorgulamalarda simonePianigiani ve montepaschiSiena ile oguzSavas ve fenerbahceUlker için de yapilmistir.

Yapilan tüm bu islemler sonrasinda ise Database, Graph, Objects ve ObjectsIterator gibi nesne örneklerinin kapatilmasi gerekmektedir. Yani bu nesne örneklerine ait Close metodlarina çagrida bulunulmalidir.

iterator.Close();
trace.Close();
session.Close();           
database.Close();

Uygulamanin çalisma zamani çiktisina baktigimizda asagidaki ekran görüntüsünde yer alan sonuçlar ile karsilasiriz.

dex_6

Görüldügü üzere Graph teorisine bagli kalaraktan, DEX API’ sinden de yararlanarak tüm Euroelague takimlari ve oyunculari için(hatta bunlarin içerisine baska nesneleri de katabiliriz) kocaman bir veri içerigini olusturmamiz mümkündür. Tabi böyle bir içerik kuvvetle muhtemel 1milyon nesneyi asabilir ve dolayisiyla lisans satin alinmasi gerekebilir. DEX gibi baska pek çok Graph veritabani mevcuttur. Örnegin Trinity, BigData vb…Bunlari da firsatim olursa incelemeye çalisiyor olacagim. Tekrardan görüsünceye dek hepinize mutlu günler dilerim Winking smile

HowTo_DEX.zip (785,18 kb)

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

  • 3236izleme

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İŞİ