关系图DBMS EdgeDB 2.0发布

EdgeDB 2.0 DBMS 发布,它实现了关系图数据模型和 EdgeQL 查询语言,针对复杂的分层数据进行了优化。 该代码是用 Python 和 Rust(解析器和性能关键部分)编写的,并根据 Apache 2.0 许可证分发。 该项目正在作为 PostgreSQL 的附加组件进行开发。 客户端库适用于 Python、Go、Rust 和 TypeScript/Javascript。 提供用于 DBMS 管理和交互式查询执行 (REPL) 的命令行工具。

EdgeDB 使用基于对象类型的声明性系统,而不是基于表的数据模型。 通过引用链接代替外键来定义类型之间的关系(一个对象可以用作另一个对象的属性)。

type Person { 必需的属性名称 -> str; } type Movie { 必需的属性 title -> str; 多链接参与者 -> 人; }

索引可用于加速查询处理。 还支持强属性类型、属性值限制、计算属性和存储过程等功能。 EdgeDB 对象存储方案的功能有点让人想起 ORM,包括混合模式、链接不同对象的属性以及集成 JSON 支持的能力。

提供了用于存储模式迁移的内置工具 - 在更改单独的 esdl 文件中指定的模式后,只需运行“edgedb migration create”命令,DBMS 将分析模式中的差异并交互生成用于迁移到新架构。 自动跟踪架构更改的历史记录。

为了生成查询,支持 GraphQL 查询语言和专有的 EdgeDB 语言(这是针对分层数据的 SQL 的改编版)。 查询结果不是列表,而是以结构化方式格式化,并且您可以将一个 EdgeQL 查询指定为另一查询中的表达式,而不是使用子查询和 JOIN。 支持交易和周期。

select Movie { title, actor: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", Actor := ( select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );

在新版本中:

  • 添加了用于数据库管理的内置 Web 界面,允许您查看和编辑数据、运行 EdgeQL 查询并分析所使用的存储方案。 该界面由“edgedb ui”命令启动,之后在访问本地主机时变得可用。
    关系图DBMS EdgeDB 2.0发布
  • 已实现“GROUP”表达式,允许您使用任意 EdgeQL 表达式对数据进行分区和聚合以及对数据进行分组,类似于 SELECT 操作中的分组。
  • 能够控制对象级别的访问。 访问规则是在存储架构级别定义的,允许您限制在获取、插入、删除和更新操作中使用特定对象集的能力。 例如,您可以添加一条规则,仅允许作者更新出版物。
  • 添加了在存储方案中使用全局变量的功能。 建议使用一个新的全局变量 current_user 来绑定到用户。
  • 添加了对定义值范围的类型的支持。
  • Rust 语言的官方客户端库已经准备好了。
  • EdgeDB 二进制协议已经稳定,使得可以在同一网络连接中同时处理多个不同的会话,通过 HTTP 转发,使用全局变量和本地状态。
  • 添加了对套接字激活的支持,它允许您不将服务器处理程序保留在内存中,并且仅在尝试建立连接时运行它(对于节省开发人员系统上的资源很有用)。

来源: opennet.ru

添加评论