现有业务需求:

  • 节点,大概千万级,属性数据 2-3 种
  • 关系,10亿级,种类两种,属性 1 -2 种
  • 存在较多超级节点
  • 基本不存在离散节点
  • 基本没有更新操作,读多写少

选型的基本条件:

  • 开源项目,对商业应用友好
    • 拥有对源代码的控制力,才能保证数据安全和服务可用性。
    • 节省成本
  • 最好支持集群模式,具备存储和计算的横向扩展能力
    • 以太坊数字货币交易总量仍在快速膨胀
    • 以后可能会加入除以太坊之外的其它数字货币交易数据
  • 能够服务OLAP场景,具备快速多跳查询能力
  • 生态系统完善健全
    • 是否兼容现有技术栈(Java/Spring),能够快速上手
    • 开发文档完善、社区生态良好
  • 具备批量导入数据能力
    • 从 MySQL / ES 中导入数据

调研比较结果:

比较类目 Neo4j Nebula 备注
基本信息 文档支持 完善,但是官网没有中文文档 完善,有中文文档
支持数据规模 340亿节点 千亿个点和数万亿条边
可视化界面 提供桌面客户端 Web 版本的图形化界面:
Nebula Graph Studio
学习与开发成本 Quick Start 简单
官网提供在线沙箱应用,可以在线体验使用流程
简单
官方文档提供视频教程,上手也很快
查询语法 Cypher nGQL 都比较简练,可读性好
Java Client 提供 Java 版本的 Driver 和 Rest API 提供 Java 版本的Client,类似 JDBC Neo4j 更优
Spring 集成 Spring 官方提供了
Spring Data Neo4j (community module)
暂无 Neo4j 完胜
使用成本 容器部署 支持 Docker 部署 支持 Docker-Compose
部署
超级点问题 超级点的邻接边查询慢,十字链表存储结构难以加速部分边的查询* 官方文档提供了解决方案 Neo4j 也可以借鉴 Nebula 提供的应用端解决方案
集群支持 社区版不支持集群,无法横向扩展存储 支持集群
数据导入 支持 MySQL 数据导入 支持很多,包括MySQL、 Neo4j 数据导入 Nebula 数据导入需要掌握 Spark 的部署和使用
硬件成本 暂时没有找到相关的可靠资料,因为是单机应用所需要的配置应该低于 Nebula CPU架构: x86_64
CPU核数: 48
内存: 96 GB
硬盘: 2 * 900 GB,NVMe SSD
Nebula 数据来源于官方提供的生产环境运行的硬件要求
性能 数据插入和检索时间随数量增大线性递增 大数据量时优势明显 无法自行测试,结论参考其他资料整理

选型结论:

总体而言,Neo4j 更加成熟稳定也更好上手,Nebula 性能更好但是需要的成本也更高。
Nebula 支持 从 Neo4j 导入数据,所以可以先使用 Neo4j,如果遇到性能瓶颈再迁移到 Nebula


参考资料:

Neo4j 官网:
https://neo4j.com/product/neo4j-graph-database/
Neo4j With Docker
https://neo4j.com/developer/docker/
Nebula 导入 Neo4j 数据
https://docs.nebula-graph.com.cn/2.0.1/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/
Nebula官网:
https://nebula-graph.com.cn/
腾讯云安全团队测评文档: