图数据库的选择与对比(Neo4j)
Neo4j是由Java和Scala写成的一个NoSql数据库,专门用于网络图的存储。作为一个图形数据库Neo4j有以下优点:
- 更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多
- 数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL相比语义清晰简单)。
- 更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。
- 数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于Neo4j特殊的数据存储结构和专门优化的图算法。
ArangoDB是一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。
ArangoDB是一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。
ArangoDB的优点:
- 可以灵活的使用键值对、文档、图及其组合构建你的数据模型。
- 跟其它文档型数据库相比,ArangoDB占用的存储空间更少,因为ArangoDB是模式自由的元数据模式。(空间利用率高)
- 可通过JavaScript进行扩展
二者进行对比:
- 数据存储
- Neo4j对于图的存储自然是经过特别优化的。不像传统数据库的一条记录一条数据的存储方式,Neo4j的存储方式是:节点的类别,属性,边的类别,属性等都是分开存储的,这将大大有助于提高图形数据库的性能。
- ArangoDB中的存储格式非常类似JSON,叫做VelocyPack格式的二进制格式存储。
- 数据读写
- Neo4j中,存储节点时使用了"index-free adjacency",即每个节点都有指向其邻居节点的指针,可以让我们在O(1)的时间内找到邻居节点。
- ArangoDB中,默认的索引(节点,边)是哈希索引,不能用于范围查询、排序。整体使用了查询速度快也在O(1)左右
- 易用性
- 二者差不多,neo4j采用的是cypher语义清晰
- arangoDB采用的是AQL易用性现在参考较少
- 综合
- Neo4j作为较早的一批图形数据库之一,文档和各种技术博客较多,技术成熟可用成功案例多。
- Neo4j查询的高性能表现、易于使用的特性及其设计的灵活性和开发的敏捷性,以及坚如磐石般的事务管理特性等特点,都充分说明了使用Neo4j是一个不错的选择。有关它的所有优点,总结起来,主要表现在以下几个方面。
(1)闪电般的读/写速度,无与伦比的高性能表现。
(2)非结构化数据存储方式,在数据库设计上具有很大的灵活性。
(3)能很好地适应需求变化,并适合使用敏捷开发方法。
(4)很容易使用,可以用嵌入式、服务器模式、分布式模式等方式来使用数据库。
(5)使用简单框图就可以设计数据模型,方便建模。
(6)图数据的结构特点可以提供更多更优秀的算法设计。
(7)完全支持ACID完整的事务管理特性。
(8)提供分布式高可用模式,可以支持大规模的数据增长。
(9)数据库安全可靠,可以实时备份数据,很方便恢复数据。
(10)图的数据结构直观而形象地表现了现实世界的应用场景
- 硬件部署
Neo4j如果没有热备、容错的需求,一台普通的服务器就可以了,比如内存 32G,4 个内核。
图数据库2015-2019排名