用于在 DynamoDB 中快速访问和检索粉丝数据的高效模式

Efficient schema for fast access and retrieval of fanship data in DynamoDB

我需要一些帮助来设计 DynamoDB Hash+Range 键方案,以实现快速的单项写入访问以及对项目组的快速并行读取访问。

背景:

目前,每个扇形 link 都存储为以下格式的项目:

{
     user_id : NUMBER
     fanned_id : NUMBER
     timestamp: NUMBER
},

其中 user_id 是散列键,fanned_id 是范围键。此方案允许快速访问单个粉丝项目(通过 user_id + fanned_id),但是当从 DynamoDB 读取完整的粉丝时,如果用户已粉丝,则需要很长时间才能传输数据数以千计的其他用户。

以下是我如何使用 boto python 库查询 DynamoDB:

table = Table("fanship_data", connection=conn)
fanship  = []
uid = 10
for fanned in table.query_2(user_id__eq=uid):
    fanship.append((fanned["fanned_id"],fanned["timestamp"]))

显然吞吐量瓶颈在 boto 查询中,因为用户的整个粉丝关系必须以每秒 25 项的速度传输,即使我为 DynamoDB 指定了高吞吐量。

我的问题是:

假设有很大的读取吞吐能力,并且所有数据都存在于 DynamoDB 中。我不介意诉诸多处理,因为这对于并行传输数据是必要的。 Hash+Range key 什么方案可以让我快速转移用户的完整粉丝关系?

我认为您的 hash/range 关键模式是您想要完成的任务的正确选择。我在我的几个表上实现了类似的模式。

根据 docs, "Query performance depends on the amount of data retrieved", and there doesn't seem to be a way to parallelize the read. The only way to do a parallel read is via a Scan,但我不确定这对您来说是否是更好的方法。