neo4j数据库的一些调研 郝伟 2021/02/25 [TOC]
1. 前言
在数据增长迅速的同时,高性能的应用程序通常需要不受数据量的限制。 但是关系数据库和NoSQL数据库均会受到数据量限制的约束。当应用程序需要扩展和扩展以处理更大的数量,同时还要在越来越多的本地,混合和云架构中保持性能。Neo4j 4.0提供了可组织扩展其关键任务应用程序,并可以达到从几分钟到几毫秒的性能特性。
注:neo4j 有两个版本:社区版和企业版。社区版是免费开源的 https://github.com/neo4j/neo4j, 企业版是收费闭源的,可参见2018年底的一篇文章:最强大图数据库Neo4j企业版宣布闭源,开源版本不受影响!。
2. 可裁剪性
可裁剪性是大型数据库的重要特性。论文 The Future of the Intelligent Application: Scalability for Unlimited Growth 讨论了此问题,并提供了相应的方案进行解决。
Neo4j可以根据数据和业务需求进行扩展,从而最大程度地降低成本和硬件,同时最大化跨连接数据集的性能;而传统的关系数据库虽然也可以扩展,但跨表的连接有限,并且过多地使用JOIN会严重降低了查询性能。Neo4j的图形数据库不仅保证了数据节点的完整性,同时通过数据节点的关系,为图形模型的提供了有力的基础,同时还对于关键任务应用程序中依赖图形数据库的客户来说也是如此。 启用无限的垂直和水平可伸缩性要求图数据永远不会被破坏,以便企业组织可以安全,放心地进行扩展。大型图数据库可能具有数万亿个节点。 例如LinkedIn,它将网络中的所有人员想象成一张连贯的图表。 尽管该图仍然是单个图数据集,但它的物理存储在许多服务器或群集中进行了分片,每片保存对应的数据,从而保证了数据的可靠性。尽管分片在关系数据库世界中很普遍,但是分片对于图形数据库而言还是相对较新的。 在许多服务器之间划分图形数据库的能力是可伸缩性的关键,也是支持用例(如遵守数据隐私法规)的能力。 例如,GDPR规定,特定国家/地区公民的数据必须实际存储在该国家/地区。 因此,可以将这些地理客户的图表部分分片以满足这些要求。
2.1. 分片 (Sharding)技术
分片是将单个逻辑数据库划分为所需数量的物理数据库,是一种常用的处理大数据的技术。Neo4j 4.0允许组织通过分片将大型图形数据集分发到较小的物理数据库中。 尽管该图的物理存储仍然是单个图数据集,但它在许多服务器或群集中被划分或分片。
分图的一些原因:
- 隔离数据以符合GDPR等规则;
- 通过将段存储在靠近用户的位置来最大程度地减少延迟;
- 分解非常大的图(数百亿个节点)。
在许多服务器之间划分图形数据库是可伸缩性的关键。 分片支持一些用例,例如符合复杂,不断变化的数据隐私规则。
2.2. 联合图
在分片划分图时,联合图将多个图组合在一起,从而支持跨图数据库的查询,这些数据库可能具有不同的逻辑结构。比如可以对共享模式的大量图的查询,还可以将跨许多物理服务器分片的大量图形视为一个逻辑图形。 联合图包含多个Neo4j服务器,从而创建服务器和这些服务器托管的数据库的逻辑视图。联合图创建一个虚拟图,从应用程序或用户角度来看,它是一个庞大的图数据库。 当客户端应用程序或用户针对此类图形运行查询时,该查询可能与数十台或数百台计算机和数据库进行交互以存储或检索数据。
3. 性能优化
参考官方性能介绍文档。 neo4j数据库的性能优化包括以下七方面的内容:
- Memory configuration — How to configure memory settings for efficient operations.
- Index configuration — How to configure indexes.
- Garbage collector — How to configure the Java Virtual Machine’s garbage collector.
- Bolt thread pool configuration — How to configure the Bolt thread pool.
- Linux file system tuning — How to configure the Linux file system.
- Disks RAM and other tips — Disks, RAM and other tips.
- Statistics and execution plans — How schema statistics and execution plans affect Cypher query performance.
- Space reuse — Data deletion and storage space reuse.
4. 多数据库
只有企业版才可以使用多数据库:参考资料。Multiple databases in a Causal Cluster are managed the same way as a single instance [↑]. neo4j数据库集群同样也只支持企业版,可以很强大地构建[↑]。一个neo4j数据库集群需要在一个服务器上进行配置,然后建立一个唯一的核心neo4j数据库,然后再通过建立多个Read Replica进行集群扩展(参见这里Deploy a cluster)。
4.1. 创建数据库
可以使用以下命令对数据库进行操作(参考)。
| Command | Description |
|---|---|
| CREATE DATABASE name [1] | Create and start a new database. |
| DROP DATABASE name [1] | Drop (remove) an existing database. |
| START DATABASE name | Start a database that has been stopped. |
| STOP DATABASE name | Shut down a database. |
| SHOW DATABASE name | Show the status of a specific database. |
| SHOW DATABASES | Show the name and status of all the databases. |
| SHOW DEFAULT DATABASE | Show the name and status of the default database. |
[1] 仅支持企业版(Enterprise Edition only)
5. 企业版许可费用
根据官方规定:Neo4j企业版是Neo4j的商业版本,是需要收费的(具体费用在这里申请后才知识)。但是仍然有以下两种方式可以免费使用:
- 少于50名员工的初创公司可以与我们联系以获得Neo4j Enterprise的免费启动许可证
- 任何人和所有人都可以免费使用( 通过Neo4j Desktop获得单用户,本地桌面/单机)
企业版具体的价格需要在线申请,但是根据这里报价显示,企业版4核心需要$36000美元(这个价格应该可信,比如这里也证实此价格)。
如果是集群,价格要高很多,可以参见这里。另外,除了直接购买服务器软件,也可以以Software as a Service (SaaS)方式直接使用neo4j提供的数据库在线服务的,Aura Enterprise 32 GB内存版每年 $70,080。
许可证常见问题:Frequently Asked Questions