Amazon web services DynamoDB中布尔属性的索引

Amazon web services DynamoDB中布尔属性的索引,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我是DynamoDB模式设计新手。我们有一个表,用于存储HashKey为CustomerId的客户的元数据信息。该表还包含一个名为“isActive”的属性,该属性不是布尔值。如果客户取消注册,我们计划将“isActive”属性设置为空 我们希望提取所有活动客户ID的列表。我读过关于“sparseIndexes”的内容,其中我们可以在“isActive”属性上创建GSI,并且只有具有“非空”值的记录才会填充到GSI中 然而,扫描似乎是检索活动CustomerID列表的唯一方法。我们也可以 a

我是DynamoDB模式设计新手。我们有一个表,用于存储HashKey为CustomerId的客户的元数据信息。该表还包含一个名为“isActive”的属性,该属性不是布尔值。如果客户取消注册,我们计划将“isActive”属性设置为空

我们希望提取所有活动客户ID的列表。我读过关于“sparseIndexes”的内容,其中我们可以在“isActive”属性上创建GSI,并且只有具有“非空”值的记录才会填充到GSI中

然而,扫描似乎是检索活动CustomerID列表的唯一方法。我们也可以

  a) Scan entire table and filter only active customerIds at application layer
  b) Scan the GSI which will be smaller than base table, but not necessarily very small (I would expect at least 1000+ records in it).

有没有更好的设计方法可以通过实现高基数来解决这个问题?

听起来您对自己的选择有相当好的理解。对于您描述的访问模式,使用GSIs创建稀疏索引是相当常见的。请记住,您可以对索引运行
查询
操作(而不是
扫描
),这将使操作非常快速。如果您有许多项,您可以随时对结果进行分页

请记住,您可以为该项添加/删除GSI主键,以便从索引中包括/排除该项。例如,假设您的表有一个GSI,其中有一个名为GSI1PK的分区(散列)键。以下是定义了4个客户项目后的情况:

请注意,只有Joe和Jill定义了GSI1PK值,而Sue和Sam没有定义。因为我在GSI1PK上定义了一个全局二级索引,所以只有定义了该属性的项才会投影到该索引中。从逻辑上讲,该索引如下所示:

如果要从GSI1中删除Joe或Jill,只需将项目更新为从这些项目中删除GSI1PK即可。同样,如果要将Sue或Sam添加到索引中,请将项目更新为
add
GSI1PK属性