iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何进行SequoiaDB + JanusGraph的实践
  • 727
分享到

如何进行SequoiaDB + JanusGraph的实践

2024-04-02 19:04:59 727人浏览 泡泡鱼
摘要

如何进行SequoiaDB + JanusGraph的实践,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JanusGraph 实

如何进行SequoiaDB + JanusGraph的实践,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

JanusGraph 

实际上,在图数据领域里,Neo4j 才是真正处于统治地位的,但是无奈它的社区版本,性能“限(yan)制(ge)”得太过分了,功能也是各种被砍,难以使用在生产环境里。至于企业版,目前也没有专门的预算给到这块的需求。

而看看图数据库里的老二 -- JanusGraph ,Apache 基金会顶级项目,顶着当年明星项目 Titan 的光环,继续忍辱负重地前行。“这个孩子肯定有出息”,我就是这么想的。

如果大家好奇 JanusGraph 的前世今生,可以扒一扒 DataStax(Cassandra 母公司)对 Titan 干了啥。然后一群热爱开源,又相当牛叉的程序猿就独立单干了。反正这个故事听起来,和当年 Mysql 和 MariaDB 相爱相杀的故事差不多,只是 JanusGraph 的下场更加壮烈。

我从 JanusGraph 的官网里找了一个整体的架构图,大家可以看到 JanusGraph 的模块还是挺丰富的,功能也是比较的全面。

如何进行SequoiaDB + 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 代码改造

在前面我向大家介绍 JanusGraph 如何识别不同的存储产品的,所以要增加 SequoiaDB 数据库这个存储选项,首先需要 为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 的模块,所以后续编译后,应该将最新的 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的实践问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行SequoiaDB + JanusGraph的实践

本文链接: https://www.lsjlt.com/news/70028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行SequoiaDB + JanusGraph的实践
    如何进行SequoiaDB + JanusGraph的实践,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JanusGraph 实...
    99+
    2024-04-02
  • 如何进行Elasticsearch调优实践
    今天给大家介绍一下如何进行Elasticsearch调优实践。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。背景Elasticsearch(ES)作为NOSQL...
    99+
    2023-06-05
  • 如何进行Android Hook技术的实践
    这篇文章将为大家详细讲解有关如何进行Android Hook技术的实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概述在学习Android插件化的过程中有用到Hook相关技术,下文对Hoo...
    99+
    2023-06-04
  • 如何进行Zabbix 宏变量的实践
    本篇文章为大家展示了如何进行Zabbix 宏变量的实践,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、.宏介绍        宏是一种抽...
    99+
    2023-06-06
  • SpringBoot如何进行对象复制的实践
    目录为什么需要对象复制对象复制工具类推荐Orika基本使用引入依赖Orika工具类使用文档TC1,基础实体映射TC2,实体映射-字段转换TC3,基础集合映射TC4,集合映射-字段映射...
    99+
    2024-04-02
  • 如何进行etcd集群运维实践
    本篇文章为大家展示了如何进行etcd集群运维实践,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当...
    99+
    2024-04-02
  • 如何进行JavaScript设计模型Iterator的实践
    今天就跟大家聊聊有关如何进行JavaScript设计模型Iterator的实践,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所...
    99+
    2024-04-02
  • 如何进行MySQL实施JDBC 2.0/3.0 的新特性实践
    这篇文章将为大家详细讲解有关如何进行MySQL实施JDBC 2.0/3.0 的新特性实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。昨天一天都没有调试出上...
    99+
    2024-04-02
  • 如何进行Spark SQL在100TB上的自适应执行实践
    本篇文章给大家分享的是有关如何进行Spark SQL在100TB上的自适应执行实践,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spark SQL是Apache Spark最广...
    99+
    2023-06-02
  • 如何进行mysql备份平台及django实践
    这期内容当中小编将会给大家带来有关如何进行mysql备份平台及django实践,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql备份平台--django实践一、my...
    99+
    2024-04-02
  • 如何进行K8s日志采集最佳实践
    这篇文章将为大家详细讲解有关如何进行K8s日志采集最佳实践,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Kubernetes 日志采集难点在 Kubernetes 中,日志采集相比传统虚拟机...
    99+
    2023-06-04
  • 如何进行oracle数据泵导数据实践
    今天就跟大家聊聊有关如何进行oracle数据泵导数据实践,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 需求:&nbs...
    99+
    2024-04-02
  • 如何进行单元测试利器JUnit的实践与分析
    今天就跟大家聊聊有关如何进行单元测试利器JUnit的实践与分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。单元测试工具Junit是一个开源项目,昨天学习了一下这个东西,总结下心得。...
    99+
    2023-06-17
  • OpenGL 实践中如何进行贝塞尔曲线绘制
    这篇文章给大家介绍OpenGL 实践中如何进行贝塞尔曲线绘制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。说到贝塞尔曲线,大家肯定都不陌生,网上有很多关于介绍和理解贝塞尔曲线的优秀文章和动态图。以下两个是比较经典的动图...
    99+
    2023-06-04
  • 如何进行数据库“状态”字段设计的思考与实践
    本篇文章给大家分享的是有关如何进行数据库“状态”字段设计的思考与实践,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。正文最近在做订单及支付相关的...
    99+
    2024-04-02
  • 对粘性定位的元素进行分析并进行实践探索
    粘性定位的要素分析与实践探索 随着互联网的快速发展,Web界面设计的重要性也日益凸显。在设计中,用户体验成为了最为重要的考量因素之一。而在许多网页和应用程序中,粘性定位(sticky positioning)成为了提高用户体验的...
    99+
    2024-01-29
    实践探索 粘性定位 要素分析
  • 使用PHP进行PDF生成的最佳实践
    PDF已成为一种受欢迎的文件格式,广泛用于各种场景,包括电子书、报表和证明文件。在PHP中,可以使用多种库和工具来生成PDF文档,但是如何选择最佳实践?以下是使用PHP进行PDF生成的最佳实践:1.选择适当的库PHP中有多个PDF库可供选择...
    99+
    2023-05-23
    实践 PHP PDF
  • 使用Jmeter进行http接口测试的实践
    目录前言:一、开发接口测试案例的整体方案:二、接口自动化适用场景:三、接口测试环境准备四、创建工程:前言:   本文主要针对http接口进行测试,使用Jmeter工具实现。   Jm...
    99+
    2024-04-02
  • 如何进行HTML5中手势原理分析与数学知识的实践
    本篇文章为大家展示了如何进行HTML5中手势原理分析与数学知识的实践,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。引言在这触控屏的时代,人性化的手势操作已经深入了我...
    99+
    2024-04-02
  • 怎么进行Linux 运维最佳实践
    本篇文章为大家展示了怎么进行Linux 运维最佳实践,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们面对的是一个不断变化的世界,业务需求在变,技术架构在变,开源工具与商业系统异构部署,新工具和技术...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作