我对数据库服务Datomic很感兴趣,但我不确定它是否符合我工作的项目的需要。 Datomic什么时候是一个不错的选择,什么时候应该避免?
答案 0 :(得分:42)
条件是我没有在制作中使用过Datomic,我想我会给你一个答案。
我确信我在每一方都缺少一些,虽然我有3个列在缺点之下,但我认为在更多情况下优势超过它们,其中缺点不排除其使用。价格可能是阻止其在大多数小型项目中使用的价格(您预计将超过1年的免费试用期)。
比照。这个short post描述了Datomic只是为了获得更多信息。
表现力(c.f。Datalog)和不变性非常棒。在这方面与Dataomic合作非常有趣,你可以通过稍微使用它来说明它的强大功能。
答案 1 :(得分:16)
在考虑Datomic是否适合您的应用程序时,最重要的一点是考虑要存储和查询的数据的形状 - 因为Datomic事实实际上非常类似于RDF三元组(+一流时间概念)它非常适合建模复杂的关系(链接的图形数据) - 这对传统的SQL数据库来说往往很麻烦。 我发现这方面对我来说是最吸引人和最重要的方面之一,它工作得非常好,即使这当然不是Datomic独有的东西,因为有许多其他高质量的图形数据库产品,必须提到Neo4J当我们谈论基于JVM的解决方案时 关于Datomic架构,我认为这是灵活性和稳定性之间的恰当平衡。
答案 2 :(得分:10)
为了完成上述答案,我想强调一点,不可变性和记住过去的能力不是适合审计等特殊情况的“魔法特征”。与“可变细胞”数据库(目前占99%的数据库)相比,这种方法具有几个深远的优势。 Stuart Halloway在这段视频中很好地演示了这一点:the Impedance Mismatch is our fault。
在我个人看来,这种方法在概念上基本上更加明智。使用它几个月之后,我没有看到Datomic拥有疯狂的神奇复杂的力量,而不是一个更自然的范例,没有其他人遇到的一些大问题。
以下是Datomic的一些我觉得有价值的功能,其中大部分都是通过不变性来实现的:
关于不何时使用Datomic,以下是我看到的当前限制和限制:
所以我非常模糊和非正式的回答是 Datomic非常适合大多数非平凡的应用程序,这些应用程序的写入负载是合理的,并且您没有使用许可证并且在JVM上有问题
作为类比,与其他不基于不变性的版本控制系统相比,Git可以问自己同样的问题。
答案 3 :(得分:3)
暂时添加其他答案:
可能公平地说,datomic为所有其他当前选项的可查询数据存储提供了更好的概念框架,同时具有部分可伸缩性并且不是特别高效的。
我说只有部分可扩展,因为查询需要适合对等RAM或失败。并非特别高性能,因为顶级SQL引擎可以通过复杂的执行计划优化查询以适应内存,这是我在数据组中未提及的一项功能。交易和查询的Datomic解耦可能会在整体偏移此功能。
与许多NoSQL引擎不同,交易是一流的公民,这使得它在关键方面与RDBMS系统相提并论。
对于读取数据而不是编写数据的应用程序,需要进行事务处理,查询总是适合内存或内存非常便宜,并且累积数据的总体大小不是too large,它可能是一个可以提供商业产品的胜利 - 对于那些愿意接受API隐含的新颖概念框架的人来说。