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数据库接口

Download history 128/week @ 2024-05-13 18/week @ 2024-05-20 1/week @ 2024-05-27 2/week @ 2024-06-10 207/week @ 2024-07-29 127/week @ 2024-08-05 8/week @ 2024-08-12

342 每月下载量
typedb-driver 中使用

Apache-2.0

315KB
8K SLoC

TypeQL

Factory GitHub release Discord Discussion Forum Stack Overflow Stack Overflow Hosted By: Cloudsmith

介绍 TypeQL

TypeQL 是 TypeDB 的查询语言。它基于最近研究中的新颖、优雅且声明式查询范式。TypeQL 设计得直观且类似于自然语言,使得使用高级抽象编写复杂查询变得简单。

重要说明: > > 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查询,可以使用以下列出的“语言库”。

资源

开发人员资源

如果您想开始TypeDB之旅,可以探索以下资源

贡献

TypeDB和TypeQL在其演变过程中使用了各种开源框架和技术。如今,TypeDB和TypeQL使用SpeedbpestSCIPBazelgRPCZeroMQCaffeine

感谢!

在以前,TypeDB由我们非常感激的各种开源产品和社区启用:RocksDBANTLRApache CassandraApache HadoopApache SparkApache TinkerPopJanusGraph

软件包托管

软件包仓库托管由Cloudsmith慷慨提供。Cloudsmith是唯一完全托管、云原生、通用软件包管理解决方案,使您的组织能够以任何格式、在任何地方创建、存储和共享软件包,并充满信心。

许可

TypeQL语法和语言库在Mozilla公共许可证2.0(MPL 2.0)下提供,因此在不修改的情况下可以自由使用。

完整许可证可以在以下位置找到:LICENSE

依赖关系

~5.5–7.5MB
~135K SLoC