- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一张表记录每个项目的工作状态(只有几个)。说 ["initial", "executing", "executed"]
并且此表中有大量具有不同作业状态的项目。
我的问题是我应该如何设计一个能够快速检索具有指定作业状态的所有作业的表/索引。
我考虑过创建一个以工作状态作为散列键的索引。这似乎可行,但我发现它在 dynamodb 中被视为糟糕的设计。
有没有更好的设计来解决这类问题?
谢谢。
最佳答案
恐怕,不,没有更好的解决方案来解决这类问题。
正如他们在 the docs 中所说的那样:
The partition key portion of a table's primary key determines the logical partitions in which a table's data is stored. This in turn affects the underlying physical partitions. Provisioned I/O capacity for the table is divided evenly among these physical partitions. Therefore a partition key design that doesn't distribute I/O requests evenly can create "hot" partitions that result in throttling and use your provisioned I/O capacity inefficiently.
...
If a single table has only a small number of partition key values, consider distributing your write operations across more distinct partition key values. In other words, structure the primary key elements to avoid one "hot" (heavily requested) partition key value that slows overall performance.
这意味着如果值只有几个不同的值——无论是表的分区键,还是索引的分区键——这些值将被放在同一个分区中,这将使它“热”并且您将无法将负载分配给它们。这就像一个“微扫描”:你不是在扫描整个表(好消息),只是一个分区。但是该分区仍然有大量数据,您正在对该分区进行全面扫描(坏消息)。
您可以使用 parallel scans 稍微改进一下(您可以扫描整个表或 GSI),但它仍然不是 Elixir 。
一般事件:如果您按几个唯一值分布大量数据,这就是瓶颈。
你能换个角度看这个问题吗?看起来您正在为作业的状态转换做一些逻辑。你能切换到DynamoDB streams / Triggers吗?每当您的记录更改时启用 DynamoDB 流,DynamoDB 将在流中发送该更改,以便相关方可以使用它。您可以制作一个 Lambda 函数,该函数将读取该流并在每次更改发生时立即对其使用react(好吧,不是立即,但滞后是最小的)。如果您可以将您的工作流重构为这个事件驱动模型,您将不需要任何查询或扫描。
关于database - AWS DynamoDB - 如何设计一个表/索引来有效检索大量具有特定值/状态的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57320473/
我正在使用 Boto3 和 Python 开发 Dyanamodb。我发现的问题之一是我们应该何时使用 dynamodb.client、dynamodb.resource 和 dynamodb.Tab
DynamoDB documentation描述了表分区原则上是如何工作的,但它对细节(即数字)非常了解。 DynamoDB 表分区究竟如何以及何时发生? 最佳答案 我找到了这个 presentati
我在 DynamoDB 表中有一个项目。该项目看起来像这样: { data: [ 1, 2, 3, 4, 5, 6 ] more_data: [ 2, 3, 4, 5, 6, 7 ] } 使用
我的 DynamoDB 表中的一个属性是一个名为 REQUEST_IDS 的列表,我想在更新项目之前检查该列表的长度以查看它是否满足条件(小于 10) .如何在 nodejs 的 ConditionE
我正在使用 Amazon Dynamodb,但没有太多经验。我有这样的价格表: 编号 |插入日期 |产品名称 |店名 |价格 相同的商店名称和产品名称可以有不同的值(价格和插入日期可能不同)。例如 i
我对 DynamoDB 上查询/扫描的限制有疑问。 我的表有 1000 条记录,对所有记录的查询返回 50 个值,但是如果我将 Limit 设置为 5,这并不意味着查询将返回前 5 个值,它只是说查询
我需要在 jsp 上显示最大计数为 10 的搜索结果,并且它应该有一个分页来作为分页功能来回遍历。 Dynamodb 有一个 最后评估 key ,但返回上一页无济于事,尽管我可以通过 移动到下一个结果
我是 CouchDB 的忠实粉丝,并且完全爱上了每个文档发出不止一次的 map 函数。我想知道在 DynamoDB 中是否可以通过使用字符串或数字集类型作为散列和范围主键的一部分(作为散列或范围属性)
我目前正在使用 DynamoDB。如果该记录的日期早于新记录日期字段,我想使用条件写入来更新记录。 有没有办法比较条件写入的 DateTime 类型?还是目前仅适用于整数、字符串和流? 谢谢。 最佳答
如何对 dynamoDB 表建模以构建一个标签系统,其中产品可以分配多个标签,并且我们应该能够过滤具有特定标签或标签集合的产品集,并获取分配给给定标签的所有标签产品? 我考虑过有一张 table :
我试图更好地理解在 AWS DynamoDB 中使用邻接列表模式进行多对多 (m:n) 关系设计。 在此处查看 AWS 文档:https://docs.aws.amazon.com/amazondyn
我怀疑 DynamoDB 中的这一说法是否属实或我的理解不正确。它说, ProvisionedThroughputExceededException 消息:您超出了表或一个或多个全局二级索引的最大允许
考虑一个 DynamoDB 表,它由一个主键和两个描述开始日期和结束日期的属性组成。如何在不扫描整个表的情况下查询时间范围是否与表中的时间范围重叠? 例子: 发电机表有两条记录 PK Start
我有一个 DynamoDB 表,其中包含将由许多应用程序读取的键值对。在启动时,每个应用程序将读取整个表并将其缓存在内存中。 我试图解决的问题是,如果 DynamoDB 表中的一个或多个项目已被修改,
我正在有条件地更新 dynamoDB 记录(仅当记录具有其属性之一的特定值时)。无论是否成功更新(条件是否满足),我都想取回记录。 docClient.update(params, function(
我目前正在对 DynamoDB 进行批量加载并将我们的数据项划分为批处理单元: 根据限制文件: https://docs.aws.amazon.com/amazondynamodb/latest/AP
我正在跟踪dynamodb的Python教程,以在端口8000上设置本地dynomodb http://docs.aws.amazon.com/amazondynamodb/latest/gettin
我正在创建一个 DynamoDB 表来保存与单个对象关联的注释。 评论在特定时间发布到对象,我使用发布的时间作为范围,因此评论可以按时间降序排序。我有发布评论的用户的 userId 的全局二级索引,这
我正在运行一个简单的 api,它在每次调用时从 dynamodb 表中获取一个项目,我将自动缩放设置为最小值 25 和最大值 10 000。 但是,如果我使用 wrk 或 hey 之类的工具发送 15
我在模型中有一个字段已声明为字符串,如下所示: App.Student= DS.Model.extend({ name: DS.attr('string'), address1: DS.attr('s
我是一名优秀的程序员,十分优秀!