Clj-3DF:用于声明性数据流的Clojure(Script)客户端

2021-02-09 20:13:22

最好将3DF视为发布/订阅系统,其中订阅可以是任意的Datalog表达式。订户向代理注册查询,并且数据源(例如Kafka,Datomic或任何其他真相源)向该代理发布新数据。所有受到传入数据影响的订户查询都将以差异通知,说明其结果如何变化。 Datalog实现以Datomic的查询语言为模型,旨在支持相同的功能集。

3DF有效地做到了这一点,这要归功于在差分数据流之上构建。特别是,差异数据流将仅计算更改,而不是从头开始执行计算。

该存储库包含3DF的Clojure客户端。该代理是用Rust编写的,可以在Declarative DifferentialDataflows存储库中找到。

3DF客户端将Datalog表达式编译为中间表示形式,该中间表示形式可以在服务器上合成为差分数据流。然后,该数据流将在任意数量的工作程序中注册并执行。每当由于新数据输入系统而导致查询结果更改时,服务器都会通过WebSocket连接推送必要的更改。

(exec!conn(查询db"用户收件箱"' [:查找?msg?content:where [?msg:msg / recipient" [email protected]" ] [?msg:msg / content?content]]))

这保证了维护任何形式的功能派生信息的订户将始终具有一致的数据视图。

也请查看未解决的问题,以了解我们正在从事的工作。

3DF既不关心耐用性,也不关心ACID的一致性。 它旨在与一致,持久的事实来源(例如Datomic或Kafka)结合使用。 因此,3DF将接受其提供的任何元组。 例如,在Datomic中,空数据库上的两个后续事务 3DF本身不会将任何先前的信息考虑到交易中。 同样,3DF旨在从像Datomic这样的系统中馈送数据,这将确保事务产生一致的元组。