我对数据库服务Datomic很感兴趣,但我不确定它是否适合我工作的项目需求。在什么情况下选择Datomic是明智的,什么情况下应该避免使用?
我对数据库服务Datomic很感兴趣,但我不确定它是否适合我工作的项目需求。在什么情况下选择Datomic是明智的,什么情况下应该避免使用?
在我还没有在生产环境中使用Datomic的前提下,我想给你一个答案。
我确定我在每个方面都漏掉了一些内容,尽管我在缺点下列出了3个,但我认为优点在更多情况下超过了缺点,除非缺点阻止了它的使用。价格可能是阻止其在大多数小项目中使用的因素(你希望这些项目能超过1年的免费试用期)。
参考这篇简短文章,以了解更多关于Datomic的信息。
表达力(参见Datalog)和不可变性真是太棒了。在这方面,使用Dataomic工作非常有趣,而且你只需稍微使用一下就能感受到它的强大。关于何时不使用Datomic,以下是我看到的当前约束和限制:
所以,我的非常笼统和非正式的答案是,Datomic对于大多数非平凡的应用程序来说都是合适的,只要写入负载是合理的,你没有许可证问题并且运行在JVM上。
类比一下,你可以问自己相同的问题,将Git与其他不基于不变性的版本控制系统进行比较。
仅供参考,其他答案已经提到:
可以说,Datomic是当前所有可选项中最好的可查询数据存储的概念框架,但在部分可扩展性和表现方面略显不足。
我之所以说只有部分可扩展性,是因为查询需要适合对等方RAM或失败。而在表现方面,顶级的SQL引擎可以通过复杂的执行计划优化查询以适应内存,这是我尚未在Datomic中看到的功能;Datomic事务和查询的解耦可能会抵消这个特征。
与许多NoSQL引擎不同,事务是一等公民,这使得它在这个关键方面与RDBMS系统相当。
对于读取数据比写入数据更频繁的应用程序,需要事务,查询始终适合内存或内存非常便宜,并且累积数据的总体大小不太大,如果可以承担商业产品的费用,那么它可能是一个胜利――对于那些愿意接受API中隐含的新颖概念框架的人来说。