gpt4 book ai didi

amazon-dynamodb - DynamoDB 如何查询重叠的时间范围

转载 作者:行者123 更新时间:2023-12-04 13:00:03 26 4
gpt4 key购买 nike

考虑一个 DynamoDB 表,它由一个主键和两个描述开始日期和结束日期的属性组成。如何在不扫描整个表的情况下查询时间范围是否与表中的时间范围重叠?

例子:
发电机表有两条记录

PK  Start        End
A 2019-01-01 2019-10-01
B 2019-06-01 2019-08-01

查询哪些记录与 2018-02-01 到 2019-03-01 的时间范围重叠。

最佳答案

免责声明:这个答案是有缺陷的,并没有考虑从查询范围内开始但在查询范围外结束的范围,或者大于查询范围的范围。
您无疑知道,DynamoDB 无法在查询中使用多个索引。
在大多数数据库中,您可以在“开始”和“结束”列上放置索引,数据库引擎将能够相当快速地确定匹配记录的交集。
代替此功能,我们需要一种将范围信息编码为单个可索引字段的方法。
这样做的方法是利用“Z 顺序索引”。
Z-order 索引是一种编码多维信息的方式。
亚马逊博客文章 part one 详细介绍了 Z 顺序索引以及如何将其应用于 DynamoDB。 , part two .
本质上,它的工作方式是将要查询的字段中的数据交错,您可以在二进制级别执行此操作,也可以在字符串级别执行此操作。
它可以应用于日期范围字符串的一种基本方法是将您的范围“20190101”到“20191001”交织到一个字段“2200119901100011”中

start     end       interleaved
20190101 20191001 2200119901100011
20190601 20190801 2200119900680011
然后要查询“20190502”和“20190905”之间的日期,使用两个日期之间的公共(public)前缀,在结束范围内加一个(用二进制表示这个逻辑更简单)。
interleaved BETWEEN "22001199005" AND "2200119901" AND start >= "20190502" AND end < "20190905"
请注意,单独使用交错索引仍然是近似值,您仍然需要为开始和结束范围定义明确的条件。
但是,这种方法避免了扫描整个表。
当然,如果您查询一个很大的日期范围,无论如何它最终可能会查询整个表,范围越小,索引的效率就越高。

关于amazon-dynamodb - DynamoDB 如何查询重叠的时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59565162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com