我对数据库服务 Datom 很感兴趣,但我不确定它是否适合我所从事的项目的需要。什么时候达原子是一个好的选择,什么时候应该避免它?
前提是我还没有在生产中使用过原子,所以我想给你一个答案。
我确信我在每一方面都遗漏了一些,尽管我在缺点下面列出了3个,但是我认为在更多的情况下,缺点并不妨碍它的使用,这些优点会超过它们。价格可能是一个将阻止它被用于大多数小项目(你希望超过1年免费试用)。
为了获得更多的信息,请参考这个描述原子的 短杆。
表现力(比照数据目录)和不变性是令人敬畏的。在这方面,使用 Dataomics 非常有趣,只要稍微使用一下,就可以看出它的强大。
当考虑 Datom 是否适合您的应用程序时,一件重要的事情是考虑您将要存储和查询的数据的形状——因为 Datom 事实实际上非常类似于 RDF 三元组(+ 第一类时间概念) ,它使自己非常适合建模复杂的关系(链接图数据)——传统的 SQL 数据库常常会遇到麻烦。 我发现这个方面对我来说是最有吸引力和最重要的方面之一,它工作得非常好,即使这当然不是 Datom 独有的东西,因为还有许多其他高质量的图形数据库产品,当我们谈论基于 JVM 的解决方案时,必须提到 Neo4J。 关于原子模式,我认为它是灵活性和稳定性之间的正确平衡。
为了完成上面的回答,我想强调的是,不变性和记忆过去的能力并不是适合于一些特殊情况的“魔法特性”,比如审计。与“可变单元”数据库(目前占99% 的数据库)相比,这种方法有许多深层次的好处。Stuart Halloway 在这个视频中很好地演示了这一点: 阻抗不匹配是我们的错。
在我个人看来,这种方法从根本上讲在概念上更为理智。在使用了几个月之后,我并不认为达原子具有疯狂而复杂的魔法力量,而是一种更自然的范式,没有其他一些大问题。
下面是一些我认为有价值的 Datomic 特性,其中大部分都是通过不可变性实现的:
关于 没有何时使用 Datom,下面是我看到的当前限制和局限性:
所以我非常模糊和非正式的回答是 Datom 非常适合大多数非平凡的应用程序,这些应用程序的编写负载是合理的,并且您不会在许可证和 JVM 上遇到问题。
作为一个类比,对于 Git,您可以问自己同样的问题,与其他不基于不可变性的版本控制系统相比。
只是试探性地补充一下其他的答案:
可以公平地说,数据概念框架为可查询的数据存储提供了所有其他当前选项的更好选择,同时具有部分可伸缩性,并且性能不是特别好。
我说只有 只是一部分是可伸缩的,因为查询需要适合对等 RAM,否则就会失败。而且不是 非常特别性能,因为顶级的 SQL 引擎可以通过复杂的执行计划优化查询以适应内存,这一点我还没有看到作为数据组学中的一个特性提到过; Datomic 的事务和查询的分离可能在总体上抵消了这一特性。
不过,与许多 NoSQL 引擎不同的是,事务是一个第一类物件,在这个关键方面,它与 RDBMS 系统不相上下。
对于那些读取数据多于写入数据、需要事务处理、查询总是适合内存或内存非常便宜的应用程序,而且累积数据的总体规模不是 太大了,对于那些愿意接受 API 中隐含的新颖概念框架的用户来说,这可能是一场胜利。