我需要一些帮助来设计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键的哪种方案可以让我快速转移用户的完整粉丝?
答案 0 :(得分:0)
我认为您的哈希/范围键架构是您正在尝试完成的正确的架构。我在几个表上实现了类似的模式。
根据docs,“查询性能取决于检索的数据量”,并且似乎没有办法并行化读取。做parallel read is via a Scan的唯一方法,但我不确定这对你来说是否会更好。