现有业务需求:
- 节点,大概千万级,属性数据 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/
腾讯云安全团队测评文档:
