如果我数据库的每个概述都只有两种类型(状态:未决,附加),将这两种类型指定为分区键是否有效?还是索引此状态值有效?
答案 0 :(得分:0)
这取决于您如何搜索这些记录!
例如,如果您始终按记录ID搜索,则不用担心。但是,如果您每次都按未决或附加的记录集进行搜索,则应考虑使用中的分区。
您还可以研究AWS的以下最佳做法指南:https://docs.aws.amazon.com/en_us/amazondynamodb/latest/developerguide/best-practices.html
更新: 在best practice guide的此部分中,建议以下内容:
将相关数据保持在一起。路由表优化研究 20年前发现“参照地点”是唯一 加快响应时间的重要因素:保留相关数据 在一个地方在一起。今天在NoSQL系统中也是如此, 在附近保持相关数据对 成本和性能。代替分发相关数据项 跨多个表,您应将相关项目保留在NoSQL中 系统尽可能靠近在一起。
通常,您应在一个 DynamoDB应用程序。如前所述,设计得最好 除非有特定原因,否则应用程序仅需要一张表 使用多个表。
例外情况是涉及大量时间序列数据, 或具有非常不同的访问模式的数据集,但是这些是 例外情况。具有反向索引的单个表通常可以启用 简单查询即可创建和检索复杂的分层数据 您的应用程序所需的结构。
使用排序顺序。相关项目可以组合在一起并进行查询 如果他们的关键设计导致他们在一起排序,那么效率很高。这是 重要的NoSQL设计策略。
分发查询。同样重要的是,大量查询 查询不会只集中在数据库的一部分上 超过I / O容量。相反,您应该设计数据密钥以 尽可能在分区之间平均分配流量, 避免“热点”。
使用全局二级索引。通过创建特定的全局中学 索引,您可以启用与主表不同的查询 支持,而且仍然快速且相对便宜。
希望我能为您提供帮助!
答案 1 :(得分:0)
使用sparse index会更有效。在您的情况下,您可以添加一个名为isPending
的属性。您可以将此属性添加到待处理的项目中,并在添加后将其删除。如果使用tid
作为哈希键和isPending
作为排序键来创建GSI,则GSI中将只有待处理的项目。