我正在DynamoDB中设计一个表,它将包含大量记录,每个记录都有一个唯一的ID和一个时间戳。我需要检索一组位于两个日期之间的记录,而不管所有其他属性值如何。
为时间戳字段添加全局辅助索引似乎是一个合乎逻辑的解决方案,但这并不简单。
DynamoDB中的Query命令需要一个KeyConditionExpression参数,该参数确定查询返回的结果。从DynamoDB开发人员指南:
要指定搜索条件,您可以使用键条件表达式——一个确定要从表或索引中读取的项目的字符串。您必须将分区键名称和值指定为相等条件。您可以选择为排序键提供第二个条件(如果存在)。
由于分区键必须精确指定,因此它不能用于查询值范围。可以为排序键指定一个范围,但只能在分区键上的精确匹配之外。因此,我认为这种工作方式的唯一方法是为索引分区键添加一个虚拟字段,其中每条记录都具有相同的值,然后将时间戳作为排序键执行查询。这似乎很俗气,大概不是它的用途。
对类似问题的一些回答建议使用Scan命令而不是Query,但是,当从非常大的表中获取少量记录时,这将非常低效。
是否可以高效地查询表以获取条件仅与时间戳字段匹配的所有记录?
您要处理的范围有多大?
例如,您可以将GSI分区键设置为YYYY、YYYY-MM或YYYY-MM-DD
排序键可以是时间戳的剩余部分。。
例如,如果数据量需要每天进行分区,并且希望一次显示7天,则可能需要进行多个查询。
还请务必阅读开发人员指南中时间尺度数据部分的最佳实践。
我有一个带有分区键(UUID)的DynamoDB表,其中有几个属性(如名称、电子邮件、创建日期等)。创建日期是项目中的一个属性,其格式为YYYY-MM-DD。但现在有一个要求更改-我必须根据创建日期对其进行排序,并提供整个数据(也就是说,我不能只将数据放在某个特定分区上,而是以排序方式将所有分区中的所有数据都放在一起。我知道这可能需要DynamoDB花费时间从所有分区中提取数据并在之后进行排序。我
我是DynamoDB的新手,想知道我们如何通过在JAVA中使用ONLY分区键来查询DynamoDB中的表 我有一个名为“ervive pdi data invalid qa”的表,其模式是: 分区键为SubmissionId 排序键是id。 城市(属性) 错误(属性) 这张桌子看起来像这样:桌子 我想通过使用(software.amazon.awssdk)新版本的AWS SDK DynamoDB类
假设我有一个名为“student_course”的Dynamo DB表。我想存储每个学生在大学学习的课程。一个学生可以一次学习多个课程,一个课程可以一次有多个学生。所以基本上它是一个多映射。 我的数据访问模式只有一个用例- 一次获取一个学生和一门课程的记录,即获取每个学生ID和CourseId组合的数据。它保证对于学生ID和课程ID组合,只有一条记录可用。 为了实现这一点,我可以通过以下两种方式存
我试图查询具有分区键和排序键的表(但是分区键和排序键是1:1,我只想使用分区键[仅返回一项]进行查询)。 这是我尝试过的代码,但没有成功(testId是分区键名,1234567890是字符串形式的分区键值);你们都知道我可以只使用分区键进行查询的方法吗?记住,由于分区键和排序键是1:1,所以只会返回一个项?提前非常感谢您。[这是我的第一篇堆栈溢出帖子-很抱歉,如果我用词不当,我很乐意回答关于我的措
我有一张名为产品的桌子。它的架构是 CustomerNumber(字符串类型的哈希键) ProductID(字符串类型的范围键) > DynamodbQueryExpression将只对索引/hashkey进行查询,而不是对hashkey列表进行查询,如上例所示。 此外,DynamoDBQueryExpression不支持OR运算符。 另外,BatchLoad只使用主键(在我的例子中是custom
我试图使用batchGetItem从表中返回多个项的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项,该怎么办?唯一的方法是创建不带范围键的表吗? 根据官方留档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html 如果表有一个复合主键(分