Neo4j 3.2版正式发布:企业级扩展性增强、原生性能提高,还有更多特性
上周末,Neo4j的3.2官方版正式发布,此版本在扩展架构性和程序的执行性能上得到了极大的增强,它标志着以图计算和图存储为核心的互联网应用从此可以扩展到全球的架构。当然,此版本也在安全性和法规遵从性上也有不少新的特性。
Neo4j的全球多数据中心扩展架构
在介绍Neo4j是如何实现全球性架构扩展能力之前,让我们先了解一下这个功能是构建在之前版本的哪一个模块之上,还是一个全新的功能呢?
在Neo4j 3.1版本时代,曾经推出的一个全新的高可用集群功能叫做因果集群,因果集群是基于Raft算法的一个分布式计算集群。因果集群使Neo4j可以在集群内的不同角色(核心服务器和读取副本)之间分离读/写数据库活动,从而实现对巨量吞吐量的支撑、包括读取自己的写入(read-your-own-writes)的一致性级别的读取时间选择,以及高可用性。Neo4j 3.0中引入的官方驱动程序使用二进制Bolt协议和集群来跨群集路由查询,从而无需外部负载均衡器。
在上述的基础之上,本次发布的3.2版本增加了在企业版上支持多数据中心功能,从而使得基于互联网的应用,以及跨国企业能够在全球范围内部署基于图数据库的应用系统。
多数据中心扩展架构
这个版本中增加的最重要的新功能之一是Neo4j现在已经跨多数据中心部署。此功能是的用户能够更方便地跨越大陆数据中心运行Internet规模的应用程序,如下图所示。
早期的版本确实也能做到跨越多个数据中心,也有一些客户已经这么做到了,不过在实施时还是有一些限制,不过现在好了,3.2版本已经彻底优化了之前的小缺陷。从这个版本来时,因果集群上的每个实例都知道它自己在网络的位置以及整体的拓扑结构。同时也实现了局部性的负载平衡和集群同步的能力(即子集群内部),以最大限度地减少广域网上耗时更新的费用。本地子集群的层次结构通过最大化本地核心到副本和副本到副本更新数据的机会,加快了从集群核心到最远的副本的更新传递。
在Neo4j 3.2中,现在可以细分集群,使得写入工作负载仅指向指定的数据中心。这通过将核心服务器分配给群集核心组来实现,并将角色限制在Raft Follower中。
数据中心集群组中的分层副本同步
在集群组本身内,可以将单独的读副本服务器配置为从任何对等体抓取数据,而不是仅仅从核心服务器(如3.2之前的情况)同步数据。通过使用服务器组,您可以设置同步的首选项,以便例如大多数副本更倾向于从其本地环境中的服务器赶上最新数据,并避免使用WAN。
在上面的例子中,两个本地的Read Replicas从波士顿的本地核心服务器同步数据。他们随后又将数据同步给了另外一个集群的本地读副本服务器(左边框)。
核心服务器还在芝加哥提供两个阅读副本,其中还有6个芝加哥阅读副本(中间框)。而芝加哥的“根”读副本服务器本身又在圣地亚哥再次喂数据给了两个读副本,在另一个扇区(右侧框)中提供了另外六本本地读副本服务器。
有了这个安排,从三个核心服务器我们可以轻松地提供数据同步给超过20个其他数据库实例。
可操作性和基础设施即服务改进
为了在各种环境中轻松操作Neo4j,我们在Neo4j 3.2中重新引入了RPM软件包,此外现在在Amazon Web Services(AWS)和Microsoft Azure云中部署Neo4j也可以实现了。
Neo4j现在可以在Azure市场上使用,白皮书可以参阅以下地址:
https://d0.awsstatic.com/whitepapers/Database/neo4j-graph-databases-aws.pdf
生产治理特性
在Neo4j 3.2中,我们增加了Kerberos身份验证选项从而使数据库变得更加“企业级”,此外,也新增加了一种叫做节点键(Node Key)的模式来实现数据模型强制(Schema Enforcement)。
最后,也扩展了Neo4j的管理功能,管理员在这个版本可以更深入地了解正在运行的Query查询的细节了。
新的数据模型约束机制:节点键
节点键功能允许您确定一组属性,而这些属性对于一个指定的标签来说是强制性和唯一性的。它们的目的是通过拒绝重复来确保图形的完整性。
这在从多个来源或大型项目导入或交换数据时尤其有用,最佳实践通常是在数据上部署模式强制、一致性以及质量规则。
与关系数据库中的主键不同,对于一个给定标签可以创建的节点键的数量没有限制。除了为一组属性强制存在性和唯一性,Node Keys还支持快速精确查找的组合索引。
顺便说一句,节点键功能是Neo4j企业版专有的。
基于Kerberos的安全模块组件
Kerberos是网络认证协议,允许网络节点通过网络证明其身份。它通过使用密钥分发中心(KDC)来确保客户端身份正确。Neo4j的Kerberos的安全模块组件提供身份验证,并应结合其他服务,如Active Directory或LDAP,授权使用。
支持RPM方式安装
新版本在企业版和社区版上都重新提供了RPM软件包来改进安装体验,同时Microsoft Azure和Amazon Web Services(AWS)上都已经有了Neo4j的云套件了。
现在您可以在任何发行版上安装Neo4j,例如Red Hat,CentOS,Fedora和Amazon Linux,命令非常简单(最好是以root身份运行:
yum install neo4j-enterprise-3.2.0
原生的图计算高性能
Neo4j很幸运是一个完全的图数据库,包括图计算引擎和图存储方式,可以让我们不断创新,以不断提高性能。
在3.2版本中,我们做了一系列的性能改进。以下是具体改进的总结和技术细节:
-
全新编译的原生标签索引替代了较旧的索引方案,以改善插入,更新和删除速度。
-
复合精确索引允许在多个节点属性上的创建索引。
-
Cypher的编译执行模块新功能可以在基本的Query语句上获得的令人惊讶的查询速度。目前这还是Neo4j企业版的一个实验功能,旨在获得反馈。
-
基于成本的查询优化器完全替代了基于规则的解决方案,因为它确实更快。
-
Cypher DISTINCT功能中的深度查询已经针对深度遍历进行了显着优化,从而提高了运行速度。
标签索引提高了写入,更新和删除的速度
当2013年推出标签这个功能时,我们创建了一种新的索引来加快标签查找速度。虽然这个索引已经达到了改善读取性能的目的,随之而来它带来的问题就是写入性能的下降。
在Neo4j 3.2中,我们为标签索引创建了我们首个基本的原生索引方式,取代了以前基于Lucene方式的实现原理。读取速度仍然很快,但是现在写入速度要快得多。对于有很多标签的图数据,只要你用了这个特性就肯定能注意到差异,我们的测试数据表明性能能提高30%-300%。
复合精确索引
这个功能在社区版和企业版中都支持,它可以通过替换用于支持精确匹配的多个单一属性索引来提高读写性能。Neo4j 3.2企业版中引入的新的节点键模式约束就利用了复合精确索引与独特的复合密钥和属性存在约束相结合。
Cypher编译执行
Neo4j的每个版本中,Cypher的表现都是一个重要的主题。在Neo4j 3.2中,我们很高兴为Cypher引入一个新的编译执行模块,他的第一个版本中将涵盖简单的查询语句,并且只在Enterprise Edition版本中提供。
与解释执行时不同,编译执行会在每个查询语句运行前生成二进制码,从而可以对查询语句平均加速300%执行时间。目前编译执行的这个初始版本还不能涵盖所有查询语句。
从句法角度来看,此模块能够处理您在Cypher培训的第一个小时内会看到的大部分查询语句,尽管它们是作为Cypher老手所有可能用到的查询的一小部分,但仍然是一个重要的集合。我们期望大多数用户将拥有将受益于新运行时的查询。
Cypher的深度查询效率
查询图形时的常见模式是返回指定深度范围内的所有连接节点(可选择按关系类型过滤)。
这样的查询语句通常看起来像这样:
MATCH (a) - [:KNOWS * 1。。5 ] - >(b)
RETURNDISTINCT b
Neo4j 3.2通过使用改进的优化技术显着加快了这些“可达性”查询,避免了重新评估已经被计数的节点。这些查询的性能将与图形的大小和密度以及查询的深度成比例地提高。
我们的经验表明,对于中等尺寸的图,在深度为3的查询中通常可以提高300%的查询速度,而在深度为4和5的情况下,性能可以提高10倍。
Neo4j浏览器
我们已经重写了Neo4j浏览器,因为它已经开始力不从心了,而且也无法适应架构的变化。值得一提的是,我们已经用与React类似的AngularJS框架替代了原有框架。
在这次前端界面的大修中,你应该会发现新的Neo4j Browser更迅捷和更高的内存执行效率。不过如果你发现一些非正常使用问题,请及时反馈给我们。
Neo4j浏览器中Cypher编辑器中的语法突出显示和自动完成
由于前端界面框架的变化,我们可以更快地创建新功能。
例如,我们还改进了Neo4j浏览器中的Cypher编辑器,通过引入语法突出显示和自动完成来提供更具视觉吸引力和更高效的开发体验。
这使得Cypher代码更易于编写和检查,而标签,类型和属性的自动完成以及节点和关系的自动包围可以减少击键错误。
总结
社区版的新功能
-
索引:
-
复合索引提高查找速度
-
原生的标签索引提高了30-300%的写入速度
-
-
Cypher查询语言
-
DISTINCT的深度查询功能不再遍历已经知道的节点大大改善查询效率
-
基于成本的查询优化器现在已经是自动化调用
-
-
Neo4j的浏览器
-
新的前端JavaScript框架带来的性能改善和灵活性
-
-
驱动程序包1.3版本
-
在Bolt驱动库处理的事务转移到驱动
-
集群管理和路由决策移动到驱动
-
-
部署方式
-
支持RPM方式部署
-
支持通过Azure和AWS EC2方式交付
-
企业版的新功能
-
多数据中心支持
-
提高全球部署的应用系统的水平扩展性和容错性
-
增加了子集群层级来加速复制过程以降低WAN遍历
-
-
因果集群API
-
Cypher编译执行模块
-
常见的和重复的查询可以编译执行,以显着提高性能
-
-
节点键
-
将数据库模式约束引入图模型,以确保数据存在性或数据验证
-
-
Query监控
-
增加了很多新的查询因子
-
-
Kerberos加密
-
新增模块提供企业级的安全验证功能
-
-
CAPI Flash集群
-
新增模块支持IBM Power8系统
-
结论
正如你所看到的,Neo4j的新版本不仅速度更快,更具有全球部署能力和企业级特性。即使你不是企业版的用户,社区成员都看到速度和功能以及便利性的显着提升。
我们鼓励Neo4j世界的每个人都能升级到3.2版本,享受速度和扩展改进的突破。