36

我应该如何选择 Datomic 的后端存储服务?

选择 DynamoDB 而不是 Postgres 是偏好问题,还是每个选项都有不同的权衡?如果是这样,它们是什么?

4

1 回答 1

23

存储服务要求

Datomic的存储服务一般要满足3个要求:

  1. 实现键值存储语义:使用索引键的值进行高效的读/写访问
  2. 支持一致性读取。例如阅读你自己的作品。理想情况下,无争用/无锁读取。
  3. 支持有条件看跌期权。例如乐观锁定+快照隔离。

Datomic 使用存储服务来存储已排序、压缩的 datom 块,类似于传统数据库系统使用文件系统的方式,上述要求几乎是底层存储服务和 Datomic 之间的 API。因此,存储服务的选择取决于它们对这三个要求的支持程度

写入可扩展性

Datomic 通常不会对底层存储服务施加很大的写入压力,因为只有一个组件写入它,Transactor。此外,Datomic 使用后台索引作业将新颖性集成到存储中,一旦积累了足够多的新颖性(默认情况下约为 32MB,但可以配置),这进一步减少了持续写入负载。Datomic 唯一立即写入的是事务日志。

读取可扩展性

Datomic 使用多层缓存,即 memcached 和对等缓存,因此在理想情况下,即当工作集适合内存时,系统也不会施加太大的读取压力。

系统负载

如果您的系统不需要巨大的写入可扩展性并且您的应用程序数据往往适合内存,那么特定存储服务的选择是无关紧要的,当然,它们的操作能力(备份、管理工具等)具有与 Datomic 无关。

另一方面,如果您的系统确实需要巨大的写入可扩展性,或者您有大量对等点,每个对等点都处理的数据超出其内存容量(迫使从存储中获取大量数据段),您将需要一个可以水平扩展的存储系统,例如 DynamoDB。正如其中一条评论中提到的,如果您需要任意写入可扩展性,那么 Datomic 无论如何都不是适合您的系统。

于 2013-07-29T13:20:15.997 回答