Datomic如何支持更正?

Nat*_*ong 0 datomic

在Rich Hickey的演讲"价值观的价值"中,他认为要获得真实的信息,我们不应该用新的事实来代替旧的事实,而应该保留时间戳.

例如,如果用户更改了他们的电子邮件地址,我们不应该用新的地址覆盖旧地址,而是记住"[timestamp]中的地址是user5@example.com,然后是user5new @ example. com作为[timestamp]".

这作为数据完整性原则是有道理的,我相信这是构建Datomic的原则.但是,如果这是真的,那么Datomic如何处理错误呢?例如,如果用户输错了他们的电子邮件地址,我们不想报告它曾经是"luser5@example.com"; 我们想忘记那些不正确的信息.

这是怎么做到的?

Fra*_*ila 7

要回答您的问题,datomic支持使用新事务进行更正.这与git,svn,cvs等支持更正的方式相同.保留旧的不正确数据仍然很有价值,因为了解(以及何时!)您的错误是有价值的.

但是,你确实提出了一个关于时间的重要观点.你正在"抄写"两个时间概念:事实真实的时间和记录事实的时间.Datomic的时间是记录事实的时间,而不是有效时间.在许多应用程序中,这些是相同的,但有时(特别是在财务方面)这些是非常不同的.

Datomic的创建者相当坚持数据库管理的时间是记录的时间,而不是其他任何东西.如果您有其他类型的时间需要建模,您可以重新确定事实并在其上设置时间,或者您可以将其他类型的时间添加到交易记录中.

关于Datomic google组的两种不同时间,本线程(以及其他人)对此进行了更详细的讨论.在该线程上有一些尝试用于恢复数据组记录时间函数的一些便利性(例如,对tx日志的快速排序访问),同时使用应用程序域时间概念(即,不是"记录时间").值得一看.