如何進(jìn)行SequoiaDB + JanusGraph的實(shí)踐,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、成都小程序開發(fā)、公眾號(hào)商城、等建站開發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。JanusGraph
實(shí)際上,在圖數(shù)據(jù)領(lǐng)域里,Neo4j 才是真正處于統(tǒng)治地位的,但是無奈它的社區(qū)版本,性能“限(yan)制(ge)”得太過分了,功能也是各種被砍,難以使用在生產(chǎn)環(huán)境里。至于企業(yè)版,目前也沒有專門的預(yù)算給到這塊的需求。
而看看圖數(shù)據(jù)庫里的老二 -- JanusGraph ,Apache 基金會(huì)頂級(jí)項(xiàng)目,頂著當(dāng)年明星項(xiàng)目 Titan 的光環(huán),繼續(xù)忍辱負(fù)重地前行?!斑@個(gè)孩子肯定有出息”,我就是這么想的。
如果大家好奇 JanusGraph 的前世今生,可以扒一扒 DataStax(Cassandra 母公司)對(duì) Titan 干了啥。然后一群熱愛開源,又相當(dāng)牛叉的程序猿就獨(dú)立單干了。反正這個(gè)故事聽起來,和當(dāng)年 MySQL 和 MariaDB 相愛相殺的故事差不多,只是 JanusGraph 的下場(chǎng)更加壯烈。
我從 JanusGraph 的官網(wǎng)里找了一個(gè)整體的架構(gòu)圖,大家可以看到 JanusGraph 的模塊還是挺豐富的,功能也是比較的全面。
因?yàn)檫@種計(jì)算和存儲(chǔ)分離的架構(gòu),使得應(yīng)用的開發(fā)者,完全不需要關(guān)注底層的數(shù)據(jù)分布式實(shí)現(xiàn),只要專心做好自己的應(yīng)用邏輯就好了。
當(dāng)然,如果你是一名 DBA,那樣你還是要學(xué)習(xí)如何配置 SequoiaDB 底層的分布式存儲(chǔ)的。
前面也講到了,由于 JanusGraph 對(duì)底層存儲(chǔ)的設(shè)計(jì)和接口,都是根據(jù)列存儲(chǔ)來設(shè)計(jì)的,所以在為 SequoiaDB for JanusGraph 設(shè)計(jì)時(shí),就需要做出一些調(diào)整。
首先是列簇里的 family 設(shè)計(jì),我把它拆開來了,將不同的 family 直接對(duì)應(yīng)成 SequoiaDB 的一個(gè) Collection。
最開始時(shí)候,我是希望將一條記錄的所有列都保存到 SequoiaDB 一個(gè) BSON 里面,但是寫到后面,由于 JanusGraph 會(huì)依賴 HBase 的列排序功能返回記錄,所以這個(gè)在 SequoiaDB 里面無法對(duì)一條記錄的不同列進(jìn)行排序。所以在最后, JanusGraph 中的一條記錄被我拆分成多個(gè) BSON 記錄,形式變成了以下的形式。記錄以 RowKey 來維護(hù)其一條記錄的完整性。
{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}
在 BSON 中,RowKey、Key和Value 三個(gè)字段的數(shù)據(jù)類型都是 Binary 格式,這個(gè)也是 JanusGraph 自己所獨(dú)有的解析方法。JanusGraph 保存于 SequoiaDB 中的記錄如下面的例子:
{ "_id": { "$oid": "5e410c444f025855e5552b4c" }, "Key": { "$binary": "http:///////+x38ABZ40DXrgsGMwYTgxZmZiMTc2ODYtY2hlbjE=", "$type": "0" }, "RowKey": { "$binary": "AAAAAAAAAAM=", "$type": "0" }, "Value": { "$binary": "", "$type": "0" }}
02
JanusGraph 代碼改造
BDB_JE("org.janusgraph.diskstorage.berkeleyje.BerkeleyJEStoreManager", "berkeleyje"),CASSANDRA_THRIFT("org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager", "cassandrathrift"),CASSANDRA_ASTYANAX("org.janusgraph.diskstorage.cassandra.astyanax.AstyanaxStoreManager", ImmutableList.of("cassandra", "astyanax")),CASSANDRA_EMBEDDED("org.janusgraph.diskstorage.cassandra.embedded.CassandraEmbeddedStoreManager", "embeddedcassandra"),CQL("org.janusgraph.diskstorage.cql.CQLStoreManager", "cql"),HBASE("org.janusgraph.diskstorage.hbase.HBaseStoreManager", "hbase"),IN_MEMORY("org.janusgraph.diskstorage.keycolumnvalue.inmemory.InMemoryStoreManager", "inmemory"),SEQUOIADB("org.janusgraph.diskstorage.sequoiadb.SequoiadbStoreManager", "sequoiadb");
StandardStoreManager 類是屬于 janusgraph-cord 的模塊,所以后續(xù)編譯后,應(yīng)該將最新的 janusgraph-core jar 包替換舊的 jar 包。
然后大家只要從 github 上下載 SequoiaDB for JanusGraph 的項(xiàng)目,將其放到 JanusGraph 源碼的根目錄,修改 maven 的pom.xml 編譯腳本,增加 SequoiaDB 的驅(qū)動(dòng)版本說明和添加編譯 SequoiaDB for JanusGraph 的項(xiàng)目編譯。
1.0.0,1.1.0-SNAPSHOT …4.4.1 2.7.7 1.4.10 2.1.5 1.4.10 3.2.1 ...… janusgraph-doc janusgraph-solr janusgraph-examples janusgraph-sequoiadb
對(duì) JanusGraph 重新編譯:
最后將編譯好的 janusgraph-sequoiadb-0.4.0.jar 和 SequoiaDB 的 API 驅(qū)動(dòng) jar 包保存至 ${JANUSGRAPH_BINARY_HOME}/lib 目錄中,就完成了 JanusGraph 擴(kuò)展 SequoiaDB 存儲(chǔ)的操作了。
03
JanusGraph 配置 SequoiaDB 作為存儲(chǔ)
大家將 janusgraph-sequoiadb 的模塊編譯出來的 jar 包和 SequoiaDB 的 JSON API jar 包一起放到 JunasGraph 的 lib 目錄里,同時(shí)更新 janusgraph-core 的 jar 包后,就完成了 JanusGraph 擴(kuò)展 SequoiaDB 存儲(chǔ)的操作了。
為了讓 JanusGraph 能夠認(rèn)識(shí) SequoiaDB 的連接信息,大家還需要準(zhǔn)備一個(gè) config 文件。大家在 JunasGraph 的conf 目錄里增加一個(gè) janusgraph-sequoiadb.properties的文件,內(nèi)容大致如下:
gremlin.graph=org.janusgraph.core.JanusGraphFactorystorage.backend=sequoiadbstorage.hostname=10.211.55.7storage.port=11810#storage.username=sdbadmin#storage.password=sdbadminstorage.meta.visibility = truecache.db-cache = falsecache.db-cache-clean-wait = 20cache.db-cache-time = 180000cache.db-cache-size = 0.5
我給大家介紹幾個(gè)重要的參數(shù)
storage.hostname,SequoiaDB coord 節(jié)點(diǎn)的 IP 地址,或者是 hostname
storage.port,SequoiaDB coord 節(jié)點(diǎn)的端口號(hào)
storage.username,如果 SequoiaDB 配置了鑒權(quán),那樣就需要配置鑒權(quán)的用戶名
storage.password,如果 SequoiaDB 配置了鑒權(quán),那樣就需要配置鑒權(quán)的密碼
當(dāng)我們已經(jīng)將 SequoiaDB 的配置信息寫到了 config 文件里面了,那么 JanusGraph 對(duì)接 SequoiaDB 也是順利成章的事情。
大家可以直接打開 Gremlin 控制界面,然后就像平時(shí)使用 JanusGraph 那樣操作即可。
這里,我給大家準(zhǔn)備了一下小 demo。
graph = JanusGraphFactory.open('conf/janusgraph-sequoiadb.properties');graph.addVertex("name", "aaa", "num", 123)g = graph.traversal()g.V().values('name')
關(guān)于如何進(jìn)行SequoiaDB + JanusGraph的實(shí)踐問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。