如何進行SequoiaDB + JanusGraph的實踐,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
JanusGraph
實際上,在圖數據領域里,Neo4j 才是真正處于統治地位的,但是無奈它的社區版本,性能“限(yan)制(ge)”得太過分了,功能也是各種被砍,難以使用在生產環境里。至于企業版,目前也沒有專門的預算給到這塊的需求。
而看看圖數據庫里的老二 -- JanusGraph ,Apache 基金會頂級項目,頂著當年明星項目 Titan 的光環,繼續忍辱負重地前行。“這個孩子肯定有出息”,我就是這么想的。
如果大家好奇 JanusGraph 的前世今生,可以扒一扒 DataStax(Cassandra 母公司)對 Titan 干了啥。然后一群熱愛開源,又相當牛叉的程序猿就獨立單干了。反正這個故事聽起來,和當年 MySQL 和 MariaDB 相愛相殺的故事差不多,只是 JanusGraph 的下場更加壯烈。
我從 JanusGraph 的官網里找了一個整體的架構圖,大家可以看到 JanusGraph 的模塊還是挺豐富的,功能也是比較的全面。
因為這種計算和存儲分離的架構,使得應用的開發者,完全不需要關注底層的數據分布式實現,只要專心做好自己的應用邏輯就好了。
當然,如果你是一名 DBA,那樣你還是要學習如何配置 SequoiaDB 底層的分布式存儲的。
前面也講到了,由于 JanusGraph 對底層存儲的設計和接口,都是根據列存儲來設計的,所以在為 SequoiaDB for JanusGraph 設計時,就需要做出一些調整。
首先是列簇里的 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 三個字段的數據類型都是 Binary 格式,這個也是 JanusGraph 自己所獨有的解析方法。JanusGraph 保存于 SequoiaDB 中的記錄如下面的例子:
{ "_id": { "$oid": "5e410c444f025855e5552b4c" }, "Key": { "$binary": "///////+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 的模塊,所以后續編譯后,應該將最新的 janusgraph-core jar 包替換舊的 jar 包。
然后大家只要從 github 上下載 SequoiaDB for JanusGraph 的項目,將其放到 JanusGraph 源碼的根目錄,修改 maven 的pom.xml 編譯腳本,增加 SequoiaDB 的驅動版本說明和添加編譯 SequoiaDB for JanusGraph 的項目編譯。
<titan.compatible-versions>1.0.0,1.1.0-SNAPSHOT</titan.compatible-versions> … <httpcomponents.version>4.4.1</httpcomponents.version> <hadoop2.version>2.7.7</hadoop2.version> <hbase1.version>1.4.10</hbase1.version> <hbase2.version>2.1.5</hbase2.version> <hbase.server.version>1.4.10</hbase.server.version> <sequoiadb.version>3.2.1</sequoiadb.version> ... <modules> … <module>janusgraph-doc</module> <module>janusgraph-solr</module> <module>janusgraph-examples</module> <module>janusgraph-sequoiadb</module> </modules>
對 JanusGraph 重新編譯:
最后將編譯好的 janusgraph-sequoiadb-0.4.0.jar 和 SequoiaDB 的 API 驅動 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的文件,內容大致如下:
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
我給大家介紹幾個重要的參數
storage.hostname,SequoiaDB coord 節點的 IP 地址,或者是 hostname
storage.port,SequoiaDB coord 節點的端口號
storage.username,如果 SequoiaDB 配置了鑒權,那樣就需要配置鑒權的用戶名
storage.password,如果 SequoiaDB 配置了鑒權,那樣就需要配置鑒權的密碼
當我們已經將 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的實踐問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯-成都網站建設公司行業資訊頻道了解更多相關知識。
分享題目:如何進行SequoiaDB+JanusGraph的實踐-創新互聯
網頁URL:http://vcdvsql.cn/article46/isihg.html
成都網站建設公司_創新互聯,為您提供定制網站、云服務器、網站制作、域名注冊、手機網站建設、做網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯