如何使用我的表高效创建dynamoDB?

时间:2019-04-12 12:14:11

标签: amazon-dynamodb

如果我数据库的每个概述都只有两种类型(状态:未决,附加),将这两种类型指定为分区键是否有效?还是索引此状态值有效?

2 个答案:

答案 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中将只有待处理的项目。