【发布时间】:2016-04-09 22:45:17
【问题描述】:
我使用Titan/DynamoDB library 将AWS DynamoDB 用作Titan DB 图表的后端。我的应用程序读取量很大,我注意到 Titan 主要是针对 DynamoDB 执行查询请求。我正在使用 transaction- and instance-local caches 和 indexes 来减少我的 DynamoDB 读取单元和整体延迟。我想为我的所有EC2 实例引入一个一致的缓存层:DynamoDB 和我的应用程序之间的读/写缓存,用于存储查询结果、顶点和边。
我看到了两种解决方案:
-
隐式缓存直接由 Titan/DynamoDB 库完成。像
ParallelScannercould be changed 这样的类首先从 AWS ElastiCache 读取。必须将更改应用于读写操作以确保一致性。 - 显式缓存在调用 Titan/Gremlin API 之前由应用完成。
第一个选项似乎是更细粒度、跨领域和通用的。
- 这样的东西已经存在了吗?也许用于其他存储后端?
- 这是否存在不存在的原因?图形数据库应用程序的读取量似乎非常大,因此跨实例缓存似乎是加速查询的一个非常重要的功能。
【问题讨论】:
-
我假设您尝试过让 Titan 的缓存更大?什么用例建议引入另一个级别的间接和延迟?
-
这只解决了一个 Gremlin 服务器实例的问题,并没有解决跨实例缓存一致性问题。
-
@Sebastian:从 ElastiCache 读取比从 DynamoDB 读取快大约十倍。我的应用程序读起来非常繁重(读:写率约为 100:1)。如果 Titan 的实例本地缓存中不存在数据,我想从 ElastiCache 而不是 DynamoDB 中获取数据。我建议的 ElastiCache 层适用于所有 EC2/Titan 实例。如果实例 A 更新顶点,它将使 ElastiCache 条目无效/更新。后续从实例 B 获取的涉及该顶点的信息将更新缓存。
标签: caching amazon-dynamodb graph-databases titan amazon-elasticache