13 个稳定版本
2.28.6 | 2024 年 8 月 5 日 |
---|---|
2.28.1 | 2024 年 5 月 15 日 |
2.27.0 | 2024 年 3 月 22 日 |
2.25.8 | 2023 年 12 月 4 日 |
2.25.0 | 2023 年 11 月 1 日 |
#189 在 数据库接口 中
342 每月下载量
在 typedb-driver 中使用
315KB
8K SLoC
介绍 TypeQL
TypeQL 是 TypeDB 的查询语言。它基于最近研究中的新颖、优雅且声明式查询范式。TypeQL 设计得直观且类似于自然语言,使得使用高级抽象编写复杂查询变得简单。
- 通过 安装 TypeDB 开始使用。
- 在我们的简单 快速入门 中探索 TypeDB 的基础知识。
- 发现 TypeDB 的更多独特 功能。
- 通过我们的端到端 学习课程 掌握 TypeDB。
- 在 TypeDB 的 学习中心 了解更多信息。
重要说明: > > TypeDB & TypeQL 正在用 Rust 进行重写。语言将会有重大改进,以及向后兼容性的一些小变化。在我们的 GitHub 上的 路线图问题 上了解有关更改的信息。TypeDB 3.0 的最大变化将是我们的存储数据结构和架构,这显著提高了性能。我们计划在今年夏天发布 3.0 版本,以及 TypeDB 的初步基准测试。
一种多态查询语言
定义类型、继承和接口
TypeQL 具有基于 多态实体-关系-属性 (PERA) 模型的类型系统:实体是独立的概念,关系依赖于实体或关系扮演的角色接口,属性是具有值的属性,可以与(即,由)实体或关系接口(所有)。实体、关系和属性都被视为一等公民,可以进行子类型化,无需归一化或具体化即可进行表达式的建模。
define
id sub attribute, value string;
email sub id;
path sub id;
name sub id;
user sub entity,
owns email @unique,
plays permission:subject,
plays request:requestee;
file sub entity,
owns path,
plays permission:object;
action sub entity,
owns name,
plays permission:action;
permission sub relation,
relates subject,
relates object,
relates action,
plays request:target;
request sub relation,
relates target,
relates requestee;
编写多态数据库查询
使用子类型查询公共超类型并自动检索匹配数据。使查询可变以返回类型、角色和数据。新类型被添加到模式中后,会自动包含在针对其超类型的现有查询结果中,因此无需重构。
match $user isa user,
has full-name $name,
has email $email;
# This returns all users of any type
match $user isa employee,
has full-name $name,
has email $email,
has employee-id $id;
# This returns only users who are employees
match $user-type sub user;
$user isa $user-type,
has full-name $name,
has email $email;
# This returns all users and their type
轻松构建查询
通过自然和完全声明性语法获得清晰度
TypeQL的近乎自然语法和完全声明性特性使得查询易于理解,降低了学习曲线并简化了维护。这允许您定义查询模式时无需考虑执行策略。TypeDB的查询计划器始终优化查询,因此您无需担心逻辑实现。
match
$kevin isa user, has email "[email protected]";
insert
$chloe isa full-time-employee,
has full-name "Chloé Dupond",
has email "[email protected]",
has employee-id 185,
has weekly-hours 35;
$hire (employee: $chloe, ceo: $kevin) isa hiring,
has date 2023-09-27;
使用完全可组合的查询模式模块化开发
TypeDB的TypeQL查询语言使用模式匹配来查找数据。TypeQL中的模式是完全可以组合的。每个复杂模式都可以分解为原子约束的合取,这些约束可以以任何顺序连接。任何由有效约束组成的模式都保证自身有效,无论多么复杂。
match
$user isa user;
match
$user isa user;
$user has email "[email protected]";
match
$user isa user;
$user has email "[email protected]";
(team: $team, member: $user) isa team-membership;
match
$user isa user;
$user has email "[email protected]";
(team: $team, member: $user) isa team-membership;
$team has name "Engineering";
TypeQL语法
注意:所有TypeDB客户端以及TypeDB控制台都原生支持TypeQL语法。如果您使用TypeDB,则无需额外的库/工具即可原生使用TypeQL语法。但是,如果您希望以编程方式构建TypeQL查询,可以使用以下列出的“语言库”。
资源
开发人员资源
- 文档:https://typedb.com/docs
- 讨论论坛:https://forum.typedb.com/
- Discord聊天服务器:https://typedb.com/discord
- 社区项目:https://github.com/typedb-osi
有用链接
如果您想开始TypeDB之旅,可以探索以下资源
- 更多关于TypeDB的功能
- 深入了解TypeDB的哲学
- 我们的TypeDB快速入门
贡献
TypeDB和TypeQL在其演变过程中使用了各种开源框架和技术。如今,TypeDB和TypeQL使用Speedb、pest、SCIP、Bazel、gRPC、ZeroMQ和Caffeine。
感谢!
在以前,TypeDB由我们非常感激的各种开源产品和社区启用:RocksDB、ANTLR、Apache Cassandra、Apache Hadoop、Apache Spark、Apache TinkerPop和JanusGraph。
软件包托管
软件包仓库托管由Cloudsmith慷慨提供。Cloudsmith是唯一完全托管、云原生、通用软件包管理解决方案,使您的组织能够以任何格式、在任何地方创建、存储和共享软件包,并充满信心。
许可
TypeQL语法和语言库在Mozilla公共许可证2.0(MPL 2.0)下提供,因此在不修改的情况下可以自由使用。
完整许可证可以在以下位置找到:LICENSE。
依赖关系
~5.5–7.5MB
~135K SLoC