【发布时间】:2016-02-16 13:06:23
【问题描述】:
我正在设计一个 DynamoDB 表,我有以下属性:
唯一ID | 时间戳 | 类型 | 内容 | 标记
我需要根据标记设置为 true 的时间戳获取所有行的排序列表。
uniqueID 是系统生成的 ID。
TimeStamp 是填充表格时的系统时间。
不同类型的数量将小于 10。
标志:真/假
我可以想到以下 3 种方法:
将 uniqueID 作为表的分区键,并分别创建全局二级索引作为标志和时间戳、分区和排序键。现在我可以使用哈希作为标志查询全局二级索引,并在时间戳上获取排序项目。
但这里的问题是,由于 flag 的值将只有 true 和 false,并且 flag 设置为 false 的行数与 true 相比相对较少,因此只有 2 个分区。这会失去 DynamoDB 的所有扩展特性。另一种选择是将 Type 作为分区键,将 TimeStamp 作为全局二级索引的排序键。这个更好。但是在查询时,我无法选择所有类型的 Type,因为 DynamoDB 需要 Query 参数中的 Hash 键。所以我需要多次查询这个GSI来获取所有类型的Type hash key的数据。
扫描表(Scan 操作):扫描返回所有标志设置为 true 的数据,不需要哈希键,但它不会在创建时间给我排序结果。
在分析了用例之后,我认为方法 1 是目前最好的。
您能否建议任何其他更好的方法。
提前致谢!
【问题讨论】:
标签: database database-design amazon-dynamodb data-modeling