用于快速访问和检索DynamoDB中的扇形数据的高效模式

时间:2015-04-17 09:03:53

标签: python indexing amazon-dynamodb boto throughput

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

背景

目前,每个扇形链接都按以下格式存储为项目:

{
     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键的哪种方案可以让我快速转移用户的完整粉丝?

1 个答案:

答案 0 :(得分:0)

我认为您的哈希/范围键架构是您正在尝试完成的正确的架构。我在几个表上实现了类似的模式。

根据docs,“查询性能取决于检索的数据量”,并且似乎没有办法并行化读取。做parallel read is via a Scan的唯一方法,但我不确定这对你来说是否会更好。

相关问题