当前位置: 首页 > 知识库问答 >
问题:

DynamoDB分区设计

池赞
2023-03-14

我对DynamoDB比较陌生,我们正在为我们的一个应用程序设计一个自由形式的搜索GUI。我们使用的主要数据存储是传统的关系数据库,我们计划使用DynamoDB作为数据库顶部的持久“缓存”层,仅用于搜索。

在我们的例子中,我们有3个键来确定客户。

我们将客户存储为上述3个id的组合,如下所示:

  1. billingAccountNumber客户ID

DynamoDB中的每个项目代表客户在特定时间发生的事件。

在DynamoDB中设计此模式的最佳方法是什么。查询将类似于

  1. 一段时间内特定billingAccountNumber的事件

目前,我使用BillingAccount tNumber作为分区键,因为这将均匀分配负载,并将时间戳作为排序键,以便我们可以获得给定范围的结果。

我正在讨论是否可以使用CusterId或instanceId作为排序键,并使用时间戳作为过滤器,以便我可以在时间戳上使用filterExpression进行查询。

哪种方式在性能和成本方面更有效?

共有1个答案

龙德海
2023-03-14

我正在讨论是否可以使用customerId或instanceId作为排序键,使用时间戳作为过滤器,以便在时间戳上使用filterExpression进行查询。

排序键是关于排序的。您的客户ID是否具有排序意义?我想不是,大多数时候它们都适合分区键。instanceId与之相同。

相反,时间戳非常适合排序键。我强烈建议你这样使用它。这是非常有效的。

在filterExpression中使用时间戳不是一个好主意,因为您的查询将进行扫描,然后应用过滤器。在一张大桌子上,这正是不应该做的。

请参见下面的建议。

表的键必须为每个项提供唯一性。如果billingAccountNumber完全标识了行,那就太好了。如果它没有在排序键中放入一些内容以确保唯一性。

为了回答查询,您需要全局二级索引(GSI):

  1. 一段时间内特定billingAccountNumber的事件•PK:billingAccountNumber,SK:时间戳

使用如下查询:“#customerId=:customerId和#timestamp介于:ts0和:ts1之间”播放查询。

 类似资料:
  • 我有一个带有分区键(UUID)的DynamoDB表,其中有几个属性(如名称、电子邮件、创建日期等)。创建日期是项目中的一个属性,其格式为YYYY-MM-DD。但现在有一个要求更改-我必须根据创建日期对其进行排序,并提供整个数据(也就是说,我不能只将数据放在某个特定分区上,而是以排序方式将所有分区中的所有数据都放在一起。我知道这可能需要DynamoDB花费时间从所有分区中提取数据并在之后进行排序。我

  • 我正在DynamoDB中设计一个表,它将包含大量记录,每个记录都有一个唯一的ID和一个时间戳。我需要检索一组位于两个日期之间的记录,而不管所有其他属性值如何。 为时间戳字段添加全局辅助索引似乎是一个合乎逻辑的解决方案,但这并不简单。 DynamoDB中的Query命令需要一个KeyConditionExpression参数,该参数确定查询返回的结果。从DynamoDB开发人员指南: 要指定搜索条件

  • 1.1. 分区设置 2. define KERNEL_SIZE_NAND 0x500000 3. define CONFIG_KERNEL_OFFS 0x500000 4. define CONFIG_KERNEL_SIZE KERNEL_SIZE_NAND 5. define CONFIG_FDT_ADDR 0x10000100 6. define CONFIG_FDT_OFFS 0x28000

  • 我试图使用batchGetItem从表中返回多个项的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项,该怎么办?唯一的方法是创建不带范围键的表吗? 根据官方留档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html 如果表有一个复合主键(分

  • DynamoDB有备份和恢复功能。文档说明,当您恢复表时,读写容量将与备份时的源表保持相同。 目标表设置了与源表相同的已配置读容量单位和写容量单位,如请求备份时所记录的。 但在这种情况下,目标表的分区总数是多少?原始源表可以有许多具有较小读写容量的分区。这将如何反映?

  • 我想为dynamodb中的订单创建一个表,每个订单由(UserID、date、Unique ID、products和total)组成,我想使用按日期排序的UserID查询特定用户的订单,我想知道如何选择分区键?它必须是独一无二的吗?如果是,我如何才能使它独一无二?在mongodb中,我会根据用户ID共享订单。如何使用dynamodb实现同样的效果?