我什么时候应该使用Datomic?

我对数据库服务Datomic感兴趣,但我不确定它是否符合我工作的项目的需求 . Datomic何时是一个不错的选择,什么时候应该避免?

回答(4)

3 years ago

为了完成上述答案,我使用了' suited to a few special case like auditing. It is an approach which has several deep benefits compared to '可变细胞的数据库(今天是99%的数据库) . Stuart Halloway在这段视频中很好地展示了这一点:the Impedance Mismatch is our fault .

在我个人看来,这种方法在概念上基本上更加理智 . 使用它几个月之后,我看不到Datomic拥有疯狂的神奇功能,而是一种更自然的范例,没有其他人遇到的一些大问题 .

以下是我觉得有 Value 的Datomic的一些功能,其中大部分都是通过不变性来实现的:

  • 因为阅读不是遥远的,所以你不必设计你的查询,就像通过网络进行探险一样 . 特别是,您可以将关注点分成几个查询(例如,查找作为我查询输入的实体 - 回答有关这些实体的一些业务问题 - 获取相关数据以显示结果)

  • 架构非常灵活,不会牺牲查询能力

  • 将您的查询集成到应用程序编程语言中非常方便

  • 实体API为您带来了ORM的优点

  • 查询语言是可编程的,具有抽象和重用的原语(规则,谓词,数据库函数)

  • 表现:作家只会阻碍其他作家,没有人会阻碍读者 . 另外,还有很多缓存 .

  • ...是的,一些超级大国喜欢过去,投机性写作或分支现实 .

关于 not 何时使用Datomic,以下是我看到的当前约束和限制:

  • 你必须在JVM上(还有一个REST API,但你失去了IMO的大部分好处)

  • 不适合写入比例,也不适合大量数据

  • won 't be especially integrated into frameworks, e.g you won' t目前找到一个从Datomic架构生成CRUD REST endpoints 的库

  • 这是一个商业数据库

  • 因为在应用程序进程('Peer')中进行读取,您必须确保对等方有足够的内存来保存查询中需要遍历的所有数据 .

因此,我非常模糊和非正式的回答是,Datomic非常适合大多数非平凡的应用程序,这些应用程序的写入负载是合理的,并且您在许可证和JVM上没有问题 .

作为类比,与不基于不变性的其他版本控制系统相比,您可以问自己与Git相同的问题 .

3 years ago

在考虑Datomic是否适合您的应用程序时,一个重要的事情是考虑要存储和查询的数据的形状 - 因为Datomic事实实际上非常类似于RDF三元组(一流时间概念)它非常适合自己很好地建模复杂的关系(链接的图形数据) - 这对传统的SQL数据库来说通常很麻烦 . 我发现这方面对我来说是最吸引人和最重要的方面之一,它工作得非常好,即使这当然不是Datomic独有的东西,因为有许多其他高质量的图形数据库产品,必须提到Neo4J当我们谈论基于JVM的解决方案时 .
关于Datomic架构,我认为这是灵活性和稳定性之间的恰当 balancer .

3 years ago

有条件我没有在 生产环境 中使用Datomic,我想我会给你一个答案 .

优点

  • 数据记录查询功能强大(比非递归SQL更强大)并且非常具有表现力 .

  • 查询可以使用Clojure数据结构编写,并且它不像许多SQL库那样允许您使用数据结构查询的弱DSL .

  • 它是不可变的,所以你可以获得不可变性在Clojure /其他语言中提供的优势 . 这也允许您在保存结构时存储数据库中的所有过去事实 - 这对于审计等非常有用

缺点

  • 它可能很慢,因为Datalog会比等效的SQL慢(假设可以编写等效的SQL语句) .

  • 如果你正在写一个很多,你可能需要担心单个交易者不堪重负 . 对于大多数情况来说,这似乎不太可能,但它可以用于例如数据库 . 存储股票刻度数据) .

  • 它很昂贵,许可和价格使得使用它的托管实例变得困难:你需要自己处理系统管理,而不是在MongoHQ上使用像Heroku或Mongo上的Postgres这样的东西

我确信我在每一方都缺少一些,虽然我有3个列在缺点之下,但我认为在更多情况下优势超过它们,其中缺点不排除其使用 . 价格可能是阻止它被用于大多数小型项目的价格(你预计会超过1年的免费试用期) .

参看这个short post简单描述了Datomic了解更多信息 .

表现力(c.f. Datalog)和不变性非常棒 . 在这方面与Dataomic合作非常有趣,而且你可以通过稍微使用它来说明它的强大功能 .

3 years ago

只是暂时添加其他答案:

可以公平地说,datomic为所有其他当前选项的可查询数据存储提供了更好的概念框架,同时具有部分可伸缩性并且不是特别高效的 .

我说只是部分可扩展,因为查询需要适合对等RAM或失败 . 并不是特别高效,因为顶级SQL引擎可以通过复杂的执行计划优化查询以适应内存,我可以在整体偏移此功能时解决交易和查询问题 .

与许多NoSQL引擎不同,交易是一流的公民,这使得它在关键方面与RDBMS系统相提并论 .

对于读取数据而不是写入数据的应用程序,需要进行事务处理,查询总是适合内存或内存非常便宜,并且累积数据的总体大小不是too large,它可能是一个仅限商用产品的胜利对于那些愿意接受其隐含在API中的新颖概念框架的人来说 .