如何在 DynamoDB 中获取给定时间段的总计数?
How to get total count for given time period in DynamoDB?
背景:我们有一个 api 不同的 api 用户从不同的公司呼叫。我们正在记录 DataDog
中的每个请求。从 DD,我每分钟获取这些日志,获取所需的数据,即 apiUserKey
、companyName
、dateAccessed
、apiVersion
等。我将每个请求记录在一个如图所示,DynamoDB table 调用了 EpgApiStatistics
。
我可以对列表进行分页,但我还需要维护每个 api 用户的总数以及每个公司(渠道)的总数。为此,我创建了两个单独的 tables,其中我将 apiUserkey
作为分区键,将 channelId
作为分区键,然后增加总计数。
我的问题是如何计算给定时间段或时间范围内的总计数。假设我们想要查看用户在 11 月 10 日至 17 日或一个月等期间的总 api 次通话?
我已阅读有关 GSI(全球二级索引)的信息,但我对如何在当前设置中使用它们感到困惑。感谢您的宝贵时间。
按日期范围查询单个 ApiUserKey
改变 SortKey
列的用途以包含日志的时间戳:
每个日志条目的 SortKey
变为:Log#<Timestamp>
或 Log#<Date>#<Random>
我们现在可以按日、月、年日期范围查询单个 ApiKey
ApiUserKey=<APIKey> and starts_with(SortKey, Log#2021-11)
对于日期范围查询,例如周或任意从-到日期,您必须将查询(基于 >
或 <
或 starts_with
的过度获取)与 filter expression.
查询特定日期范围内的所有 api 个键
要获取 所有 ApiKeys 范围内的日志,请添加一个 Global Secondary Index,您可以在其中反转上述键。时间戳成为 GSI 分区键,ApiKey 成为 GSI 排序键。
按日期范围查询频道
相同的模式。添加第二个 GSI,通道为 GSI PK,时间戳为 GSI SK。您使用第二个索引通过时间戳上的 >、< 或 = 按通道查询。
重要提示:dynamodb 为每个添加的索引复制所有索引行项目。
背景:我们有一个 api 不同的 api 用户从不同的公司呼叫。我们正在记录 DataDog
中的每个请求。从 DD,我每分钟获取这些日志,获取所需的数据,即 apiUserKey
、companyName
、dateAccessed
、apiVersion
等。我将每个请求记录在一个如图所示,DynamoDB table 调用了 EpgApiStatistics
。
我可以对列表进行分页,但我还需要维护每个 api 用户的总数以及每个公司(渠道)的总数。为此,我创建了两个单独的 tables,其中我将 apiUserkey
作为分区键,将 channelId
作为分区键,然后增加总计数。
我的问题是如何计算给定时间段或时间范围内的总计数。假设我们想要查看用户在 11 月 10 日至 17 日或一个月等期间的总 api 次通话?
我已阅读有关 GSI(全球二级索引)的信息,但我对如何在当前设置中使用它们感到困惑。感谢您的宝贵时间。
按日期范围查询单个 ApiUserKey
改变 SortKey
列的用途以包含日志的时间戳:
SortKey
变为:Log#<Timestamp>
或 Log#<Date>#<Random>
我们现在可以按日、月、年日期范围查询单个 ApiKey
ApiUserKey=<APIKey> and starts_with(SortKey, Log#2021-11)
对于日期范围查询,例如周或任意从-到日期,您必须将查询(基于 >
或 <
或 starts_with
的过度获取)与 filter expression.
查询特定日期范围内的所有 api 个键
要获取 所有 ApiKeys 范围内的日志,请添加一个 Global Secondary Index,您可以在其中反转上述键。时间戳成为 GSI 分区键,ApiKey 成为 GSI 排序键。
按日期范围查询频道
相同的模式。添加第二个 GSI,通道为 GSI PK,时间戳为 GSI SK。您使用第二个索引通过时间戳上的 >、< 或 = 按通道查询。
重要提示:dynamodb 为每个添加的索引复制所有索引行项目。