我对数据库服务Datomic感兴趣,但是我不确定它是否适合我从事的项目的需求。什么时候Datomic是一个好的选择,什么时候应该避免?
我对数据库服务Datomic感兴趣,但是我不确定它是否适合我从事的项目的需求。什么时候Datomic是一个好的选择,什么时候应该避免?
Answers:
鉴于我没有在生产中使用Datomic的附带条件,想想我会给你一个答案。
我确定我双方都缺席了一些,尽管我在劣势项下列出了3个,但我认为在劣势不排除使用劣势的更多情况下,优势多于优势。价格可能是阻止其在大多数小型项目中使用的价格(您希望它能超过1年的免费试用期)。
cf. 这篇简短的文章仅介绍Datomic,以获取更多信息。
表现力(参见Datalog)和不变性很棒。在这方面,与Dataomic一起工作真是太有趣了,只要稍加使用,就可以证明它的功能强大。
为了完成上述回答,我想强调的是,不变性和记住过去的能力并不是适合于审计等特殊情况的“杂项功能”。与“可变单元”数据库(目前占数据库的99%)相比,这种方法具有许多深远的好处。斯图尔特·哈洛韦(Stuart Halloway)在视频中很好地演示了这一点:阻抗不匹配是我们的错。
我个人认为,从概念上讲,这种方法从根本上更加合理。使用了几个月后,我看不到Datomic具有疯狂的神奇复杂能力,而是一种更自然的范例,没有其他人遇到的一些大问题。
这是我发现有价值的Datomic的一些功能,其中大多数是通过不变性实现的:
关于何时不使用Datomic,以下是我目前看到的限制和限制:
因此,我非常模糊和非正式的回答是,Datomic非常适合大多数非平凡的应用程序,这些应用程序的写负载是合理的,并且您的许可证和使用JVM都没有问题。
打个比方,与其他不基于不变性的版本控制系统相比,您可以对Git询问相同的问题。
暂时添加其他答案:
可以说datomic为可查询的数据存储提供了一个更好的概念框架,其中可存储所有其他当前选项,同时具有部分可伸缩性和出色的性能。
我说的只是部分可伸缩的,因为查询需要适合对等RAM或失败。而且性能不是特别出色,因为一流的SQL引擎可以通过复杂的执行计划优化查询以使其适合内存,这在datomic中还没有提到。Datomic对事务和查询的解耦可能在总体上抵消了此功能。
但是,与许多NoSQL引擎不同,事务是一等公民,因此在关键方面与RDBMS系统相当。
对于读取数据多于写入数据,需要事务处理,查询总是适合内存或内存非常便宜,并且累积数据的整体大小不太大的应用程序,在仅商业化产品的情况下可能是一个胜利可以提供给那些愿意接受API暗示的新颖概念框架的人。