Amazon dynamodb 在dynamo DB中使用二进制属性进行GSI索引是一个好主意吗?

Amazon dynamodb 在dynamo DB中使用二进制属性进行GSI索引是一个好主意吗?,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-index,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Index,我的DynamoDB表中有一个属性,它将采用二进制值success和failure 如果必须从此表中获取/查询成功或失败记录,是否可以对此属性执行GSI索引 或者我应该为成功和失败场景制作两个不同的表格 如果不应该对二进制属性进行索引 二进制属性的GSI索引有什么问题 它将如何影响查询操作的性能 听起来你可能指的是布尔(真/假)而不是二进制。在DynamoDB中,不能在布尔属性上创建GSI,但可以使用字符串、数字或二进制属性(与布尔值不同),因此可以考虑逻辑布尔的1/0或“接受”/“失败”。 如

我的DynamoDB表中有一个属性,它将采用二进制值successfailure

如果必须从此表中获取/查询成功或失败记录,是否可以对此属性执行GSI索引

或者我应该为成功和失败场景制作两个不同的表格

如果不应该对二进制属性进行索引

  • 二进制属性的GSI索引有什么问题

  • 它将如何影响查询操作的性能


  • 听起来你可能指的是布尔(真/假)而不是二进制。在DynamoDB中,不能在布尔属性上创建GSI,但可以使用字符串、数字或二进制属性(与布尔值不同),因此可以考虑逻辑布尔的1/0或“接受”/“失败”。 如果您只想查询索引的一个方面,可以考虑将此设为稀疏索引。因此,如果您只想在存在true(或“accept”或1或任何true)时进行查询,那么当该属性不为true时,请删除该属性,而不是将其设置为“failure”或0等。这使得查询的性能更高,因为索引更小,但限制是您无法再查询“failure”/“false/0”情况

    回答您的问题:

    1) 不能在布尔值上创建索引,只能使用字符串或数字(或二进制,但可能需要字符串或数字)
    2) 如果只需要查询布尔值的一侧(例如“接受”,但决不“失败”),则可以通过创建稀疏索引来提高性能

    感谢您的回答。是的,我的属性值将是失败或成功,这是字符串。我将以相同的概率查询这两个问题,因为有时我需要失败记录,有时我需要成功记录。我可以看到两种方法,或者为这两种方法创建两个单独的表,或者对这个二进制属性进行GSI索引。哪一种会提供更好的性能?如果扫描索引的性能至关重要,那么两个表的性能可能更高,但由于这是一个GSI,您可能有其他访问模式,需要它们首先位于同一个表中?另一种提高扫描GSI性能的方法是在同一个表中创建两个稀疏索引,一个用于失败,一个用于成功,但这对于写入性能较差,并且需要比单个GSI更多的存储。此外,如果扫描性能是关键的,考虑DAX,这将更快得多。