2018-11-23 一个公司的图数据的选型

郭柱明


注意

因为我之前都要使用博客记录的习惯 所以下面很多链接都链接向我自己写的博客上的 所以导致下面看起来内容不多 其实下面内容还是有的


阶段一:图数据库考察

图数据库的考察是我进入公司开始做的第一部分工作 我们考察图数据库的历程大概是下面这样的

image_1crgtnkj772g3l31ouj1o8tbchm.png-8.2kB

  1. neo4j是由鸿波进行考差 neo4j是很完善的图数据库 但是只有他的企业版是支持集群的 但是收费 所以pass 考察的细节都在洪波那里 那时候我还没来 所以细节不清楚
  2. dgraph是我考察 细节在如下我的博客记录 官方文档也可以学习 推荐教程这个是学习dgraph最好的一个方法了 dgraph也是一个成熟的图数据库 有以下特点
    1. 支持resetful api
    2. 使用graphql+-查询语言进行查询
    3. 有多种语言的client
    4. 但是不支持自由选择底层存储 就是我们公司的高可用mongo集群的作用发挥不出来
  3. cayley是我们重点考察的图数据库 花了很多功夫 这是我对于cayley的基础知识总结 这是我后来对cayley做的一次技术分享PPT
    • 对于cayley的原理跟设计思想我有去思考的 探索出来的细节未必正确 但是思想我觉得还是可取的
    • 研究了cayley整个项目的构建方法 然后修复了cayley在持久层测试方面上的一个bug 为cayley贡献了一点代码 git commit在这里 其实这个问题包含的思想很重要的 扬哥因此还送了我一平红酒 细节请看docker在测试中的应用 后来我也用docker在开发和测试中写了另外一些demo 用法不一样基于容器的开发和测试

阶段二:开发


cayley时期

我们做了一个demo 就是基于我们的cayley图数据库来构建我们的关系图谱 从而找出用户中的最近联系的人以及可能认识的人 当时因为在设计理念以及对cayley的使用上 我跟扬哥跟莹姐之间存在分歧 所以当时每个人都按照自己的想法来写了一个自己的版本 我的版本如下 graphRelation 里面还算有不少注释


hugegraph时期

hugegraph说实话我们没接触多长时间 所以在这一阶段写的代码并不多 有一个需求就是找子图 代码在subgraph 里面我也写了部分注释

博客详情在我的subgraph博客

hugegraph时期我花了很多时间在看gremlin官方文档上 因为gremlin语法众多而且复杂 我并没有像以前翻译cayley的查询语言Gizmo那样用博客把常用查询语法记录下来 所以有点可惜 但是太多了记下来也没用 可以当官方文档是字典 使用的时候去查阅 平时只需要记住常用的查询语法即可


使用docker为测试提供一次性的数据库

docker容器目前有三个用处

  • 提供一次性的环境
  • 提供弹性的云服务
  • 组件微服务架构

我有做基于容器docker的开发和测试上一些简单的尝试 详情请看下面基于容器开发

cayley在它的单元测试跟集成测试部分就是用了docker 但是这里docker的使用跟上面有所不一样 上面是所有的部分都包含在容器内部 但是cayley的思路很特别也很有借鉴意义

cayley因为支持很多种数据库作为底层存储 所以他在每一次的单元测试以及集成测试过程中 都使用docker生成一个数据库容器 并将程序在运行过程中产生的持久层数据都放进这个数据库容器中 这样当测试结束 清除这个容器 保证了测试都进行在一个一次性的环境中 不留下任何测试数据

我为cayley修好的这个bug就是上面这个问题里面一个bug 虽然这个bug没什么太大意义 但是cayley在这里的设计思路确实非常值得我们借鉴 借助docker为我们的单元测试集成测试提供一次性的数据库容器

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能计算时代

「大数据系列」Apache NIFI:大数据处理和分发系统

简单地说,NiFi就是为了实现系统间数据流的自动化而构建的。虽然术语“数据流”用于各种上下文,但我们在此处使用它来表示系统之间的自动和管理信息流。这个问题空间一...

2213
来自专栏小怪聊职场

爬虫架构|如何设计一款类“即刻”信息订阅推送的爬虫架构(一)

5219
来自专栏小白课代表

小白课代表的使用说明(必读)

1992
来自专栏北京马哥教育

性能调优概述,这是一篇最通俗易懂性能调优的总结!

精彩早知道 作者概述 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) ...

4885
来自专栏CSDN技术头条

社交产品后端架构设计

本篇文章会向读者展示几个架构设计的关键点,使一个社交应用能够成为真正的下一代社交产品。以下几个属性将会影响到架构的设计: a)可用性 b)可扩展性 c)性能...

2487
来自专栏

记录服务上线一年来的点点滴滴

2015年12月,也就是在一年前,开发了半年的云存储服务上线。这对于付出了半年努力的我们来说,是一件鼓舞人心的事件。因为这个服务在我们手上经历了从0到1的过程。...

1965
来自专栏腾讯DevOps

Git Code Review设置与使用

自从转到git上之后,已经一年多没有code review了(哈哈,捂住无辜的小脸)。但是坦白来说,code review绝对是利大于弊的。不仅可以让自己把控代...

7574
来自专栏hadoop学习笔记

详谈分布式系统缓存的设计细节

在分布式Web程序设计中,解决高并发以及内部解耦的关键技术离不开缓存和队列,而缓存角色类似计算机硬件中CPU的各级缓存。如今的业务规模稍大的互联网项目,即使在最...

1294
来自专栏北京马哥教育

Linux 下的两种分层存储方案

在存储设备中,使用分层技术,将冷热数据自动分层存放在具有不用读写性能的存储介质上,已经是很普遍的做法,比如 IBM 的 DS8K 中使用的 Easy Tier。...

3416
来自专栏吴伟祥

认识消息队列(一) 转

业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行通信。

561

扫码关注云+社区

领取腾讯云代金券