新聞中心
如何進行SequoiaDB + JanusGraph的實踐,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
網(wǎng)站建設公司,為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及定制網(wǎng)站建設服務,專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對成都人造霧等多個行業(yè)擁有豐富的網(wǎng)站建設經(jīng)驗的網(wǎng)站建設公司。專業(yè)網(wǎng)站設計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)成都網(wǎng)站推廣優(yōu)化,H5建站,響應式網(wǎng)站。
JanusGraph
實際上,在圖數(shù)據(jù)領域里,Neo4j 才是真正處于統(tǒng)治地位的,但是無奈它的社區(qū)版本,性能“限(yan)制(ge)”得太過分了,功能也是各種被砍,難以使用在生產(chǎn)環(huán)境里。至于企業(yè)版,目前也沒有專門的預算給到這塊的需求。
而看看圖數(shù)據(jù)庫里的老二 -- JanusGraph ,Apache 基金會頂級項目,頂著當年明星項目 Titan 的光環(huán),繼續(xù)忍辱負重地前行。“這個孩子肯定有出息”,我就是這么想的。
如果大家好奇 JanusGraph 的前世今生,可以扒一扒 DataStax(Cassandra 母公司)對 Titan 干了啥。然后一群熱愛開源,又相當牛叉的程序猿就獨立單干了。反正這個故事聽起來,和當年 MySQL 和 MariaDB 相愛相殺的故事差不多,只是 JanusGraph 的下場更加壯烈。
我從 JanusGraph 的官網(wǎng)里找了一個整體的架構圖,大家可以看到 JanusGraph 的模塊還是挺豐富的,功能也是比較的全面。
因為這種計算和存儲分離的架構,使得應用的開發(fā)者,完全不需要關注底層的數(shù)據(jù)分布式實現(xiàn),只要專心做好自己的應用邏輯就好了。
當然,如果你是一名 DBA,那樣你還是要學習如何配置 SequoiaDB 底層的分布式存儲的。
前面也講到了,由于 JanusGraph 對底層存儲的設計和接口,都是根據(jù)列存儲來設計的,所以在為 SequoiaDB for JanusGraph 設計時,就需要做出一些調(diào)整。
首先是列簇里的 family 設計,我把它拆開來了,將不同的 family 直接對應成 SequoiaDB 的一個 Collection。
最開始時候,我是希望將一條記錄的所有列都保存到 SequoiaDB 一個 BSON 里面,但是寫到后面,由于 JanusGraph 會依賴 HBase 的列排序功能返回記錄,所以這個在 SequoiaDB 里面無法對一條記錄的不同列進行排序。所以在最后, JanusGraph 中的一條記錄被我拆分成多個 BSON 記錄,形式變成了以下的形式。記錄以 RowKey 來維護其一條記錄的完整性。
{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}{RowKey:"", Key:"", Value:""}
在 BSON 中,RowKey、Key和Value 三個字段的數(shù)據(jù)類型都是 Binary 格式,這個也是 JanusGraph 自己所獨有的解析方法。JanusGraph 保存于 SequoiaDB 中的記錄如下面的例子:
{ "_id": { "$oid": "5e410c444f025855e5552b4c" }, "Key": { "$binary": "http:///////+x38ABZ40DXrgsGMwYTgxZmZiMTc2ODYtY2hlbjE=", "$type": "0" }, "RowKey": { "$binary": "AAAAAAAAAAM=", "$type": "0" }, "Value": { "$binary": "", "$type": "0" }}
02
JanusGraph 代碼改造
在前面我向大家介紹 JanusGraph 如何識別不同的存儲產(chǎn)品的,所以要增加 SequoiaDB 數(shù)據(jù)庫這個存儲選項,首先需要 為StandardStoreManager 類增加 SequoiaDB 的選項,修改的部分如下:
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ù)編譯后,應該將最新的 janusgraph-core jar 包替換舊的 jar 包。
然后大家只要從 github 上下載 SequoiaDB for JanusGraph 的項目,將其放到 JanusGraph 源碼的根目錄,修改 maven 的pom.xml 編譯腳本,增加 SequoiaDB 的驅(qū)動版本說明和添加編譯 SequoiaDB for JanusGraph 的項目編譯。
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
對 JanusGraph 重新編譯:
最后將編譯好的 janusgraph-sequoiadb-0.4.0.jar 和 SequoiaDB 的 API 驅(qū)動 jar 包保存至 ${JANUSGRAPH_BINARY_HOME}/lib 目錄中,就完成了 JanusGraph 擴展 SequoiaDB 存儲的操作了。
03
JanusGraph 配置 SequoiaDB 作為存儲
大家將 janusgraph-sequoiadb 的模塊編譯出來的 jar 包和 SequoiaDB 的 JSON API jar 包一起放到 JunasGraph 的 lib 目錄里,同時更新 janusgraph-core 的 jar 包后,就完成了 JanusGraph 擴展 SequoiaDB 存儲的操作了。
為了讓 JanusGraph 能夠認識 SequoiaDB 的連接信息,大家還需要準備一個 config 文件。大家在 JunasGraph 的conf 目錄里增加一個 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
我給大家介紹幾個重要的參數(shù)
storage.hostname,SequoiaDB coord 節(jié)點的 IP 地址,或者是 hostname
storage.port,SequoiaDB coord 節(jié)點的端口號
storage.username,如果 SequoiaDB 配置了鑒權,那樣就需要配置鑒權的用戶名
storage.password,如果 SequoiaDB 配置了鑒權,那樣就需要配置鑒權的密碼
當我們已經(jīng)將 SequoiaDB 的配置信息寫到了 config 文件里面了,那么 JanusGraph 對接 SequoiaDB 也是順利成章的事情。
大家可以直接打開 Gremlin 控制界面,然后就像平時使用 JanusGraph 那樣操作即可。
這里,我給大家準備了一下小 demo。
graph = JanusGraphFactory.open('conf/janusgraph-sequoiadb.properties');graph.addVertex("name", "aaa", "num", 123)g = graph.traversal()g.V().values('name')
關于如何進行SequoiaDB + JanusGraph的實踐問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。
新聞名稱:如何進行SequoiaDB+JanusGraph的實踐
分享路徑:http://fisionsoft.com.cn/article/gcphjd.html