postgresql - 存储后端如何影响 Datomic?

标签 postgresql clojure amazon-dynamodb datomic

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

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

最佳答案

存储服务要求

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

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

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

编写可伸缩性

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

读取可扩展性

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

系统负载

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

另一方面,如果您的系统确实需要巨大写入可伸缩性,或者您有大量对等点,每个点都处理比其内存所能容纳的更多数据(迫使很多从存储中提取的数据段),您将需要一个可以水平扩展的存储系统,例如发电机。正如其中一条评论所述,如果您需要任意写入可伸缩性,Datomic 无论如何都不是适合您的系统。

关于postgresql - 存储后端如何影响 Datomic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915528/

相关文章:

Clojure:如何构建桌面 UI

clojure - 如何在 core.logic 中模拟 'outer join'?

python - dynamodb boto put_item 类型为 Map "M"

amazon-web-services - 需要定期更新时使用 Dynamo 表的最佳实践

sql - 比较 PostgreSQL 中两个逗号分隔的列

postgresql - sequelize-typescript 多对多关系模型数据

java - Clojure 自定义 Java 互操作

python - 每 X 秒通过 URL 自动检索 JSON 数据并存储在 Amazon DynamoDB 中

postgresql - 如何在 docker 中为 postgresql 创建 postgis 扩展?

PostgreSQL:默认约束名称