DataHike:由高效的Datalog查询引擎提供支持的持久Datalog数据库

2020-07-25 13:11:19

DataHike是一个持久的Datalog数据库,由高效的Datalog查询引擎提供支持。该项目最初是将DataScript移植到搭便车树。AllDataScript测试正在通过,但我们仍在进行内部工作。如上所述,我们认为Datahike对于中型项目是可用的,因为DataScript非常成熟并且部署在许多应用程序中,而且搭便车-树实现通过生成性测试进行了大量测试。我们正在建设这两个项目和搭便车-树直通Konserve的存储后端。我们愿意听取经验报告,如果您能加入我们,我们将非常高兴。

目前我们为JVM提供了一个小而稳定的API,但是磁盘上的模式还没有修复。在达到稳定的磁盘架构之前,我们将提供迁移指南。在升级之前,请先查看一下ChangeLog。

(要求';[datahike.api:as d]);;使用文件系统作为存储介质(def cfg{:store{:backend:file:path";/tmp/example";}});;在此位置创建数据库,根据默认配置,我们执行严格的;;模式并保留所有历史数据(d/create-database cfg)(def conn(d/connect cfg));;第一个事务将是我们正在使用的模式;您也可以在数据库创建中添加:Initial-tx;;到配置(d/transact conn[{:db/ident:name:db/valueType:db.type/string:db/cardinality:db.cardinality/one}{:db/ident:age:db/valueType:db.type/long:db/cardinality:db.cardinality/one}]);;让我们添加一些数据并等待事务(d/transact conn[{{。,:age 20}{:name";Bob";,:age 30}{:name";Charlie";,:age 40}{:age}{:age 15}]);;搜索数据(d/q';[:find?e?n?a:where[?e:name?n][?e:age?A]]@conn);;=>;#{[3";Alice";20][4";Bob";30][5";Charlie";40]};使用散列映射添加新实体数据(d/transact conn{:tx-data[{:db/id 3:age 25}]});;如果要使用类似于中的查询;;https://grishaev.me/en/datomic-query/,;;您可以使用散列映射(d/q{:查询';{:find[?e?n?a]:where[[?e:name?n][?e:age?a]}:args[@conn]});=>;#{{[5";Charlie";40][4";Bob";30][3";alice";25]};;查询数据历史记录(d/q';[:find?a:where[?e:name";alice";][?e:age?a]](d/History@conn);;=>;#{[20][25]};可能需要释放特定商店的连接,如level db(d/release conn);;如果不再需要,请清理数据库(d/delete-database cfg)。

API命名空间提供了对数据功能子集的兼容性,并且应该作为JVM上的临时替代。DataHike的其余部分将被移植到core.async,以平台中立的方式协调IO。

DataHike提供了类似于DATOMIC的功能,并且可以作为它的子集的临时替代。Datahike的目标不是提供一个重新实现的开源数据结构,而是旨在构建分布式数据管理解决方案的Replikativ工具箱的一部分。我们已经和许多后端工程师和ClojureDeveloper交谈过,他们试图远离Datonomic,因为它的专有性质,我们认为在这方面,Datahike应该让Datomic变得更容易,反之亦然,那些只想在小型应用程序中使用Datalog的好处的人不应该担心设置和依赖Datonomic的问题。在这方面,DataHike应该使DataMic变得更容易,反之亦然,那些只想在小型应用程序中使用Datalog的人不应该担心设置和依赖Datomic。

DataHike在一个对等点上本地运行。将来可能会提供事务处理机,也可以通过任何线性化写入机制来实现,例如Apache Kafka。如果您有兴趣,请与我们联系。

DataHike将数据库作为透明值提供,也就是说,您可以直接访问索引数据结构(搭便车-树),并利用它们的持久性进行复制。这些内部结构不能保证保持稳定,但提供了对正在发生的事情的有用洞察力,并且可以进行优化。

数据是由Clojure的作者和有丰富经验的人构建的成熟的可伸缩数据库(即服务)。如果你需要这样的专业支持,你绝对应该坚持使用DATOMIC。

Datahike的查询引擎和大部分代码库都来自DataScript。如果没有DataScript上的工作,DataHike就不可能实现。这里记录了与数据公司在查询引擎方面的不同之处。

如果你的应用程序对一个典型的耐用数据库有适度的要求,例如一台机器和最多几百万个实体,那么选择Datahike。同样,如果你想要一个开源的解决方案,并且能够研究和修补你的数据库的代码库,Datahike提供了一个相对较小和结构良好的代码库来根据你的需要进行调整。您还应该始终能够在以后轻松地迁移到DATMIC。

如果您已经知道以后将需要可伸缩性,或者如果您的数据库需要网络API,请选择DATOMIC。关于“数据在线”的资料也已经很多了。其中大部分以这样或那样的形式应用于Datahike,但是在您第一次学习Datalog时,直接使用Datomic可能会更容易一些。

如果您想要尽可能快的查询性能并且没有大量数据,请选择DataScript。您可以轻松地将写操作单独持久化,然后使用DataScript的快速内存索引数据结构。Datahike目前也不再支持ClojureScript,尽管我们计划恢复此功能。

您必须在升级到已更改磁盘格式的DataHike版本之前执行此操作。只要我们达到版本1.0.0,就会发生这种情况,并且将始终通过ChangeLog进行通信。升级DataHike版本后,您可以使用。

数据以基于行的格式存储为字符串,因此您可以轻松地检查您的转储是否包含合理的数据。您还可以使用它对数据库进行一些基于字符串的编辑。您还可以将导出用作备份。

如果您要从我们还没有迁移代码的0.1.2之前版本升级,那么只需评估数据隐藏。在导出之前在您的项目中手动迁移命名空间。

我们很乐意为Lambdaforge提供商业支持。如果您对某一特色感兴趣,请告诉我们。