精华 Neo4j 4.2 版的主要改进和更新
发布于 5 个月前 作者 graphway 780 次浏览 来自 分享

image.png

作为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数据库的集群中对查询和数据库运维相关操作进行了测试,在吞吐量、性能、稳定性方面都令人满意。

image.png

image.png

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、不再支持、变更的内容

image.png

8、支持的升级路径

从4.0.、4.1. -> 4.2

9、版本兼容

GDS 1.4、Aura(Neo4j在GCP上的SaaS)、Bloom和Desktop均支持4.2版。

回到顶部