微軟進(jìn)軍NoSQL 發(fā)布Trinity數(shù)據(jù)庫(kù)
原創(chuàng)【51CTO綜合報(bào)道】正當(dāng)我們感慨各類(lèi)NoSQL數(shù)據(jù)庫(kù)遍地開(kāi)花的時(shí)候,老大哥微軟也加入了這一陣營(yíng),最近微軟發(fā)布了其圖數(shù)據(jù)庫(kù)系統(tǒng)Trinity。
筆者在很多文章中看見(jiàn)微軟發(fā)布了其圖數(shù)據(jù)庫(kù)系統(tǒng)Trinity的消息,但是Trinity具體是什么樣子的數(shù)據(jù)庫(kù),有什么功能只有短短幾句介紹,于是筆者查看了該項(xiàng)目的原文地址,并加以翻譯。水平有限,請(qǐng)大家多多指教。
Trinity是一個(gè)圖數(shù)據(jù)庫(kù),也是建立在分布存儲(chǔ)云上的計(jì)算平臺(tái)。作為一個(gè)數(shù)據(jù)庫(kù),它提供如高度并行查詢(xún)處理、事務(wù)記錄、一致性控制等功能。作為一個(gè)計(jì)算平臺(tái),它為大型圖形提供了同步或不同步的批處理計(jì)算。Trinity可以配置在一臺(tái)計(jì)算機(jī)或數(shù)百臺(tái)計(jì)算機(jī)上。
圖是一種具有較高表達(dá)能力的抽象數(shù)據(jù)結(jié)構(gòu)。許多現(xiàn)實(shí)生活中的應(yīng)用都可以通過(guò)圖模擬,包括生物網(wǎng)絡(luò),語(yǔ)義網(wǎng)絡(luò)和社會(huì)網(wǎng)絡(luò)。因此,圖形引擎對(duì)多種應(yīng)用都是非常重要的。目前,在這個(gè)領(lǐng)域有:Neo4j, HyperGraphDB,InfiniteGraph等等。
- Neo4j是一個(gè)基于磁盤(pán)的事務(wù)性圖數(shù)據(jù)庫(kù)。
- HyperGraphDB是基于鍵/值對(duì)存儲(chǔ)的Berkeley DB。
- InfiniteGraph是對(duì)大型圖數(shù)據(jù)分析的分布式系統(tǒng)。
2009年,google 發(fā)布了Pregel,作為其大型圖處理平臺(tái)。Pregel 是一個(gè)批處理系統(tǒng),同時(shí)它不支持在線查詢(xún)處理或圖服務(wù)。對(duì)比來(lái)看,Trinity不僅支持在線查詢(xún)也支持離線批處理。進(jìn)一步,Pregel中的批處理是嚴(yán)格同步的,但是Trinity 支持了不同步計(jì)算,有更好得性能。
#p#
Trinity 的特點(diǎn)
- 數(shù)據(jù)模型:超圖
- 分布式: Trinity 可以配置在一臺(tái)或上百臺(tái)計(jì)算機(jī)上
- 圖數(shù)據(jù)庫(kù): Trinity是一個(gè)基于內(nèi)存的圖倉(cāng)庫(kù),它有豐富的數(shù)據(jù)庫(kù)特點(diǎn),如:在線高度并行查詢(xún)處理,ACI交易支持,等等。目前Trinity對(duì)圖處理為用戶(hù)提供C# APIs 。
- 并行圖處理系統(tǒng):Trinity 支持大型,離線批處理。支持同步和不同步批計(jì)算。
圖模型
Trinity采用超圖模型。簡(jiǎn)單圖模型和超圖模型之間的一個(gè)區(qū)別就是:超圖中的邊(稱(chēng)為超邊)連接任意數(shù)量的節(jié)點(diǎn),而在一個(gè)簡(jiǎn)單的圖中邊只能連接兩個(gè)節(jié)點(diǎn)。
超圖是比簡(jiǎn)單圖更一般:
- 超圖模型對(duì)許多應(yīng)用程序來(lái)說(shuō)更直接,因?yàn)楹芏嚓P(guān)系都不是一對(duì)一的關(guān)系。
- 一些多邊關(guān)系不能輕易通過(guò)簡(jiǎn)單圖模擬出來(lái)。直接用簡(jiǎn)單圖建模往往導(dǎo)致信息丟失。
Trinity是一個(gè)分布式圖數(shù)據(jù)庫(kù)
一個(gè)圖形數(shù)據(jù)庫(kù)應(yīng)該支持一些基本的數(shù)據(jù)庫(kù)功能,如查詢(xún),事務(wù)記錄,并行控制和一致性維護(hù)。
Trinity支持內(nèi)容豐富的圖表。每個(gè)節(jié)點(diǎn)(或邊緣)與一組數(shù)據(jù),或者一個(gè)鍵/值對(duì)相關(guān)聯(lián)。換句話說(shuō),在Trinity中節(jié)點(diǎn)和邊是異構(gòu)類(lèi)型。
Trinity優(yōu)化并發(fā)聯(lián)機(jī)查詢(xún)處理。當(dāng)在一臺(tái)機(jī)器上部署,Trinity可以在一秒鐘內(nèi)訪問(wèn)1,000,000節(jié)點(diǎn)(例如,當(dāng)執(zhí)行BFS時(shí))。當(dāng)通過(guò)網(wǎng)絡(luò)部署時(shí),速度是受網(wǎng)絡(luò)延遲。Trinity提供了一個(gè)圖形分割機(jī)制,以盡量減少延遲。我們?cè)贗nfiniBand網(wǎng)絡(luò)上部署了Trinity,我們將盡快報(bào)告結(jié)果。
為支持高效的網(wǎng)上查詢(xún)處理,Trinity配置了各種索引。目前,我們提供單詞查找樹(shù)、訪問(wèn)節(jié)點(diǎn)/邊緣名稱(chēng)和與節(jié)點(diǎn)/邊緣關(guān)聯(lián)的鍵/值對(duì)散列。我們正在實(shí)現(xiàn)與子圖匹配的結(jié)構(gòu)索引。
Trinity還支持對(duì)圖的時(shí)時(shí)更新。它是事務(wù)記錄,并發(fā)控制和一致性都生效。
目前,Trinity沒(méi)有圖形查詢(xún)語(yǔ)言。圖的訪問(wèn)都是通過(guò)C#的API進(jìn)行。我們正在為T(mén)rinity設(shè)計(jì)一種高級(jí)的查詢(xún)語(yǔ)言。
Trinity是一個(gè)基于圖數(shù)據(jù)的分布式并行平臺(tái)
很多圖上操作都是以批處理模式執(zhí)行的,例如: PageRank,最短路徑查詢(xún),頻繁子圖挖掘,隨機(jī)游走,圖形分割等。
和谷歌的Pregel一樣,Trinity支持以節(jié)點(diǎn)為基礎(chǔ)的圖形并行處理。通過(guò)門(mén)戶(hù)網(wǎng)站,用戶(hù)提供一個(gè)腳本(目前C#代碼或DLL)來(lái)對(duì)一個(gè)節(jié)點(diǎn)指定計(jì)算方法,包括它把什么信息傳遞給相鄰節(jié)點(diǎn)。該系統(tǒng)將對(duì)這些進(jìn)行并行計(jì)算。
與谷歌的Pregel不一樣的是,在節(jié)點(diǎn)上的操作沒(méi)有嚴(yán)格要求以同步的方式進(jìn)行。某些操作(例如,最短路徑查詢(xún))在非同步模式下會(huì)更好的被執(zhí)行。
舉個(gè)例子,這是同步的最短路徑搜索(偽代碼,C#代碼)的代碼,這是不同步最短路徑搜索(偽代碼,C#代碼)的代碼。
我們還設(shè)計(jì)一種高級(jí)語(yǔ)言,使用戶(hù)可以輕松編寫(xiě)自己的腳本。
#p#
Trinity架構(gòu)
Trinity是基于云存儲(chǔ)的。它主要使用內(nèi)存存儲(chǔ),磁盤(pán)僅作為備份存儲(chǔ)。
系統(tǒng)架構(gòu)
#p#
Trinity應(yīng)用
隨著越來(lái)越多的應(yīng)用程序涉及圖形數(shù)據(jù),我們預(yù)計(jì)Trinity將有許多應(yīng)用。目前,Trinity支持以下兩個(gè)應(yīng)用程序:Probase(一個(gè)研究原型)和AEther(生產(chǎn)系統(tǒng))。
Trinity是Probase的基礎(chǔ)架構(gòu),它可以自動(dòng)從網(wǎng)上獲得大規(guī)模知識(shí)庫(kù)。 Probase有上百萬(wàn)的節(jié)點(diǎn)(表示概念)和邊(表示關(guān)系)。超圖比簡(jiǎn)單圖更合適對(duì)認(rèn)知建模。Trinity用于:1)分類(lèi)建設(shè); 2)數(shù)據(jù)集成(如添加Freebase data到Probase),3)查詢(xún)Probase.
Microsoft Bing的AEther項(xiàng)目現(xiàn)在使用Trinity管理AEther的實(shí)驗(yàn)數(shù)據(jù),其中包括大量的工作流和工作流中的演化。Trinity是Aether工作流程管理系統(tǒng)的后端圖存儲(chǔ)引擎。我們正在增加更多功能,特別是子圖匹配和頻繁子圖挖掘,從而支持該項(xiàng)目。
原文鏈接:http://research.microsoft.com/en-us/projects/trinity/