问题标签 [amazon-dynamodb-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
191 浏览

amazon-web-services - dynamodb 全局表上的 GSI 是否会自动复制?

我有一个全局表的 gsi 定义(在 usw2 区域中),该全局表配置为自动复制到 use2 。我在 usw2 中为我的表定义了一个 gsi - 索引会自动复制吗?还是我也需要在其他地区手动创建?

0 投票
2 回答
120 浏览

amazon-dynamodb - DynamoDB:查询某种类型的所有相似项目

记住在 DynamoDB 中使用尽可能唯一的分区键在分区之间均匀分布项目的最佳实践,我遇到了一个问题。

假设我的表存储诸如usersitems之类的项目devices。我将这些项目中的每一个的 id 存储为分区键。每个 id 都以其类型为前缀,例如user-XXXX, item-XXXX& device-XXXX

现在的问题是如何只查询某种类型的对象?例如我想检索 all users,我该怎么做?如果begin_with允许运算符用于分区键,那么我可以搜索前缀,但分区键只允许相等运算符,这是可能的。

如果现在我使用我的类型作为分区键,例如,user作为分区键,然后user-id作为排序键,它会起作用,但它只会导致几个分区键,从而导致热键问题。创建多个表是一种不好的做法。

欢迎任何建议。

0 投票
0 回答
113 浏览

amazon-dynamodb - AWS DynamoDB 索引未填充

我已经有一张包含一些数据的表格。然后我随着时间的推移创建了一些索引。最旧的索引包含所有项目,但我最近创建的另外两个索引是空的。今天我删除了这两个索引并再次创建。现在他们在表中的 1564 个项目中只有 19 个项目。

我有相同的结构,但在不同的区域进行测试,一切都很好。

有人可以解释发生了什么吗?

编辑:这是表格和索引的屏幕截图。由于向表中添加了新项目,数量有所增加。 表设置

三项指标

0 投票
0 回答
491 浏览

amazon-dynamodb - GSI 全局二级索引是否允许使用 AWS DynamoDB 稀疏索引?

因此,使用一个非常简单的 DynamoDB 表,主键假设:地址:字符串(例如:'1 someRd,someCity,someCounty'

和一个 GSI:邮政编码:字符串

如果我尝试手动将一个项目添加到表中,只有一个地址字段而没有邮政编码,它会引发错误:一个或多个参数值无效。不支持为二级索引键指定的值。键属性的 AttributeValue 不能包含空字符串值。IndexName:邮政编码,IndexKey:邮政编码

我假设稀疏 GSI 是允许的:https ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general-sparse-indexes.html

那么,如果我们设置一个 GSI,该字段是否需要包含在表中的每个项目中?

0 投票
1 回答
166 浏览

database - 使用 GSI 和范围键查询 DynamoDB

我有一个带有哈希键(id)的表(配置文件),我有一个 GSI 名称和一个范围键在国家。我想创建一个 DAO 方法,它会为我获取名称和国家/地区给定值的所有记录,如下所示: List getProfileWithNameAndCountry(name, country);

最初,我只是使用以下代码仅使用名称(GSI)搜索记录,并且效果很好:

但现在我想同时使用名称(GSI)和国家(范围键)进行搜索。我尝试将上面的代码修改为此,但失败并出现异常:

我对 DynamoDB 真的很陌生,我无法弄清楚如何在 java 中实现这一点。任何帮助将非常感激。

0 投票
1 回答
109 浏览

amazon-web-services - 对 DynamoDB 表的条件写入失败是否会消耗 GSI 的写入容量

我有一个 DynamoDB 表,上面有一个 GlobalSecondaryIndex。我正在对 DynamoDB 表进行条件写入。我知道,如果还必须在 GSI 中更新记录,那么此类写入会消耗表和 GSI 的容量。但是如果条件检查失败会发生什么?

从 DynamoDB 文档看来,即使是失败的条件写入也会消耗 DynamoDB 表上的写入容量。但是它们是否也会消耗 GSI 上的写入容量?

据我了解,GSI 是异步更新的,所以我猜它不应该在条件写入失败的情况下消耗 GSI 上的任何写入容量,但我没有看到任何地方都有记录。

0 投票
1 回答
1942 浏览

amazon-dynamodb - 如何在 DynamoDB 中实现按项目的任意属性排序

我有一个 DynamoDB 结构如下。

  1. 我有患者的患者信息存储在其文档中。
  2. 我的索赔信息存储在其文件中。
  3. 我的付款信息存储在其文件中。
  4. 每个索赔都属于患者。患者可以有一项或多项索赔。
  5. 每笔付款都属于患者。患者可以有一笔或多笔付款。

我只创建了一个 DynamoDB 表,因为所有的 aws dynamodb 文档都表明如果可能只使用一个表是最好的解决方案。所以我最终得到以下结果: 基表

在这个表中,ID 是分区键,EntryType 是排序键。每项索赔和付款都持有其所有者。我的访问模式如下:

  1. 列出数据库中的所有患者,并按创建日期对患者进行分页。
  2. 列出数据库中的所有声明,并按创建日期对声明进行分页。
  3. 列出数据库中的所有付款,并按创建日期排序付款。
  4. 列出特定患者的索赔。
  5. 列出特定患者的付款。

我可以通过两个全局二级索引来实现这些。我可以使用 GSI 将 EntryType 作为分区键,将 CreationDate 作为排序键,以列出按创建日期排序的患者、索赔和付款。我还可以使用另一个 GSI 和 EntryType 分区键和 OwnerID 排序键列出患者的索赔和付款。

我的问题是这种方法只给我带来了创建日期的排序。我的患者和索赔有更多的属性(每个大约 25 个),我还需要根据他们的每个属性对它们进行排序。但是 Amazon DynamoDB 有一个限制,即每个表最多可以有 20 个 GSI。因此,我尝试动态创建 GSI(根据请求动态创建),但这也以非常低效的方式结束,因为它将项目复制到另一个分区以创建 GSI(据我所知)。那么,按照患者姓名、索赔描述以及他们拥有的任何其他字段对患者进行分类的最佳解决方案是什么?

0 投票
1 回答
789 浏览

java - 如何使用 dynamodb 中的复合主键中的分区键获取记录

我正在使用 java 在 DynamoDB 中插入和检索记录。

插入代码

检索

现在我想只使用作为分区键的 LatLong 属性来检索记录。任何想法如何做到这一点?

0 投票
1 回答
477 浏览

pagination - 使用带有分页的 DynamoDB 扫描操作而不是使用 GSI 查询是否正确,我需要表中的所有项目

我读到数据很大时发电机数据库扫描操作很慢。但我想知道,有一个场景来提取所有项目。是否仍然首选避免扫描?考虑到索引不是免费的,并且我需要表中的所有项目,我将采用这种方法。

  1. 请通过选择扫描操作建议他们是否有任何问题?
  2. 为什么只有 scan 有并行扫描选项,默认查询是并行的?
  3. 如果我将查询操作与分页一起使用,它将按顺序运行还是并行运行?
0 投票
1 回答
148 浏览

amazon-dynamodb - Dynamo - 写入期间增加读取延迟

有一个 DynamoDB 表Entity,其中有一个散列键id和 GSI 在另一个属性上:cardId。GSI 只有范围键,没有任何排序键。

每当我们收到一批创建/更新请求时,我们首先使用 GSI 读取现有数据,然后写入主表,最终也会更新 GSI 表。在此期间,我们可能还会处理来自 GSI 的一些并行读取请求。

我们看到了一个问题,在此期间主表和 GSI 表的延迟从 200 毫秒增加到 10-15 秒(批量写入 + 读取)。我无法在表中的连续读取和写入之间建立关联。该表设置为使用按需容量并且没有限制。“SuccessfulRequestLatency”仅约为 300-400 毫秒。

它是 DDB 客户端方法,具有以秒为单位的延迟。它不做任何数据转换,只是将数据库数据原样返回给上层。还有什么我应该监控的以找出根本原因吗?

谢谢!