如https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/中所述,分区键应该是唯一的。
我正在构建一个需要存储主题订阅的应用程序(想想聊天应用程序)。数以百万计的订阅需要存储在数据库中,并且当应该向订阅者发送消息时,应用程序需要从表中获取所有订阅者。
天真的方法
天真的方法是,设计一个主键,如:
SUBSCRIPTIONS|<topic>
然后,排序键将<topic>
根据订阅时间、地区和其他一些标准对所有订阅进行排序。
不幸的是,分区键到目前为止并不是唯一的,但它可以让您在眨眼间获取所有订阅。
此外,考虑到最大表大小设置了一个分区中可以保存的订阅数量的硬性限制,因此一般来说这个设计的最大订阅数量。因此,这旨在使可扩展性失败。
选择
设计它的另一种方式是使用类似的东西
SUBSCRIPTIONS|<clientId>
为每个客户端单独保存每个订阅并将其移动<topic>
到排序键中。这将允许更好地扩展表(分区),但需要扫描以找到某个<topic>
.
索引在这里可能会有所帮助,但是索引如何在多个分区上扩展?它将如何表现?