作为Neo4j 图数据库平台的里程碑版本4系列的重要改进,4.2版本在上周正式发布了。这一版本除了继续增加用户期待的新特性外,在性能、稳定性等方面有持续的改进。下面,我们就来看看这一版本的重要改进吧!
1、数据库核心
1.1 全新的数据库存储格式:ALIGNED
在现有的standard和high_limit两种格式之外,推出新的aligned格式。这一格式在写入效率方面更加优化,在checkpointing和页缓存内容更新方面有很大提升。
1.2 neo4j.conf 配置文件中可以执行OS脚本
举例如下: dbms.max_databases=$(/bin/bash -c “expr 10*10”) dbms.ssl.policy.private_key_password=$(curl trusted.cert https://encryptionserver.oh.com/password -d ‘286755fad04869ca523320acce0dc6a4’)
使用OS脚本可以不必保存证书密码、LDAP访问密码等内容在配置文件中,也可以根据OS的环境来设置Neo4j的启动选项。
1.3 备份和恢复命令支持多数据库
在backup / restore 命令中,数据库名称参数可以使用通配符* 来代表多个数据库。举例如下:
cypher-shell -u neo4j -p neo4j --database system
–format plain
–address neo4j://localhost:7617
–param “database => ‘customer01’”
–file data/scripts/customer01/restore_metadata.cypher
2、数据库集群
2.1 暂停只读节点
4.2版本中,可以在浏览器客户端中在线暂停和恢复运行集群中的任何只读节点(Read Replica)。这方便对个别只读节点进行维护(例如进行离线全备份、修复等)、诊断的操作。举例如下:
CALL dbms.cluster.readReplicaToggle( “neo4j”, true); ±----------------------------+ | state | ±----------------------------+ | “Catchup process is paused” | ±----------------------------+ CALL dbms.cluster.readReplicaToggle( “neo4j”, false); ±-----------------------------+ | state | ±-----------------------------+ | “Catchup process is resumed” | ±-----------------------------+
2.2 隔离数据库
隔离Neo4j数据库服务实例中某个数据库/图库,可以帮助减小故障数据库对整个实例的影响、方便进行诊断和修复。命令如下:
dbms.cluster.quarantineDatabase( databaseName :: STRING?, setStatus :: BOOLEAN?, reason = No reason given :: STRING? ) :: ( databaseName :: STRING?, quarantined :: BOOLEAN?, result :: STRING? )
2.3 基于500个数据库的并发访问测试
在每个实例上有500数据库的集群中对查询和数据库运维相关操作进行了测试,在吞吐量、性能、稳定性方面都令人满意。
3、Cypher改进
3.1 所有只读查询都可以以pipeline模式执行(企业版特性)
pipelined模式对大多数的只读查询性能要优于compiled和slotted模式。
3.2 查询计划生成的优化
对于EXISTENCE约束,不需要再对返回结果排序。例如: // 如果创建了节点属性的存在性约束 CREATE CONSTRAINT ON (n:L) ASSERT exists(n.prop) // 在返回该类节点的相应属性时无需再排序 MATCH (n:L) RETURN n.prop // ORDER BY n.prop
3.3 创建/删除索引时更多选项
CREATE [BTREE] INDEX [name] [IF NOT EXISTS] FOR pattern ON key-projection [OPTIONS “{” option: value[,…] “}”] DROP INDEX name [IF EXISTS]
Options for BTREE indexes:
indexProvider : Index provider to use.
Current options are: “native-btree-1.0”, "lucene+native-3.0"
Default is "native-btree-1.0"
indexConfig : Index configuration. The configuration depends on the provider and on the type.
Default is an empty map.
Example: { spatial.cartesian.max
: [100.0,100.0], spatial.cartesian.min
: [-100.0,-100.0] }
4、安全性
4.1 对缺省图/数据库的角色访问权限
GRANT MATCH {*} ON DEFAULT GRAPH TO role-name GRANT WRITE ON DEFAULT GRAPH TO role-name DENY DELETE ON DEFAULT GRAPH LABEL label-name TO role-name
4.2 用户过程和函数的执行权限在执行时刻可以临时调高(boosted)
对数据库自带过程、用户自定义过程和函数,缺省情况下执行的权限由invoker角色决定。4.2中增加了BOOST选项,让调用过程/函数的用户可以以definer指定的(更高)权限执行过程/函数。 这一功能的作用是管理员可以提高用户执行过程/函数的权限,而不用再修改neo4j.conf、重新启动Neo4j数据库服务了。命令定义如下:
1) GRANT, DENY and REVOKE procedures:
{GRANT|DENY} EXECUTE [BOOSTED] PROCEDURE[S] procedure-globbing[,…] ON DBMS TO grantee[,…]
REVOKE [GRANT|DENY] EXECUTE [BOOSTED] PROCEDURE[S] procedure-globbing[,…] ON DBMS FROM grantee[,…]
2) GRANT, DENY and REVOKE user-defined functions:
{GRANT|DENY} EXECUTE [BOOSTED] [USER [DEFINED]] FUNCTION[S] function-globbing[,…] ON DBMS TO grantee[,…]
REVOKE [GRANT|DENY] EXECUTE [BOOSTED] [USER [DEFINED]] FUNCTION[S] function-globbing[,…] ON DBMS FROM grantee[,…]
3) GRANT, DENY and REVOKE administrator procedures:
{GRANT|DENY} EXECUTE ADMIN[ISTRATOR] PROCEDURES ON DBMS TO role
REVOKE [GRANT|DENY] EXECUTE ADMIN[ISTRATOR] PROCEDURES ON DBMS FROM role
4.3 新命令用来显示索引和限制相关权限
GRANT SHOW INDEX[ES] ON DATABASE * TO role GRANT SHOW CONSTRAINT[S] ON DATABASE foo, bar TO role REVOKE SHOW INDEX[ES] ON DEFAULT DATABASE FROM role REVOKE SHOW CONSTRAINT[S] ON DATABASE * FROM role DENY SHOW INDEX[ES] ON DATABASE sales TO role DENY SHOW CONSTRAINT[S] ON DEFAULT DATABASE TO role
5、驱动
5.1 同步发布的客户端驱动
Java, JavaScript, .Net和Python。GO驱动还在更新中。
在Java和HTTP API中率先支持“OCSP装订(OCSP Stapling)”,正式名称为TLS证书状态查询扩展,作为TLS协议在握手阶段验证证书的机制。需要修改配置: dbms.connector.bolt.ocsp_stapling_enabled=true
5.2 HTTP API重新设计
现在可以支持无损失的格式转换(lossless data interchange)。
支持在配置文件中允许、禁止某类API: // 所有合法选项: // - TRANSACTIONAL_ENDPOINTS // - UNMANAGED_EXTENSIONS // - BROWSER // - ENTERPRISE_MANAGEMENT_ENDPOINTS
dbms.http_enabled_modules = BROWSER, UNMANAGED_EXTENSIONS
6、DBA运维
6.1 neo4j-admin copy可以将数据库进行分区
除了复制数据库存储内容、修复不一致数据,4.2版本的copy工具还可以将一个大的数据库中指定内容分离出来、存储在另一个库中。举例如下:
$neo4j-home> bin/neo4j-admin copy --from-database=neo4j --to-database=shard1 --keep-only-nodes-with-labels=S1,SAll
7、不再支持、变更的内容
8、支持的升级路径
从4.0.、4.1. -> 4.2
9、版本兼容
GDS 1.4、Aura(Neo4j在GCP上的SaaS)、Bloom和Desktop均支持4.2版。