问题标签 [dynamodb-queries]
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.
amazon-dynamodb - DynamoDB 分区设计
我对 DynamoDB 比较陌生,我们正在为我们的一个应用程序设计一个自由格式的搜索 GUI。我们使用的主要数据存储是传统的关系数据库,我们计划使用 DynamoDB 作为数据库顶部的持久“缓存”层,仅用于搜索。
在我们的例子中,我们有 3 个键来确定客户。
我们将客户存储为上述 3 个 ID 的组合,如下所示:
- billingAccountNumber + customerId
- billingAccountNumber + InstanceId
- 客户ID
- 实例 ID
DynamoDB 中的每个项目都代表在特定时间发生在客户身上的事件。
在 DynamoDB 中设计这种模式的最佳方法是什么。查询将类似于
- 一段时间内某些 billingAccountNumber 的事件。
- 一段时间内特定客户 ID 的事件
- 一段时间内某个 instanceId 的事件。
等等
目前,我使用 BillingAccountNumber 作为分区键,因为这将平均分配负载,并使用时间戳作为排序键,以便我们可以获得给定范围的结果。
我正在讨论是否可以使用 customerId 或 instanceId 作为排序键,并使用时间戳作为过滤器,以便我可以在时间戳上使用 filterExpression 进行查询。
就性能和成本而言,哪种方式更有效?
amazon-dynamodb - 如何使用 AWS DynamoDB 请求单个记录?代码示例不起作用
我已经将代码示例放在了最基本的基础上,但我仍然无法通过密钥检索单个记录。这是我使用 nodejs 的基本示例(此代码段中未包含凭据):
在上面的示例中运行此代码会给我以下错误:
ValidationException:提供的关键元素与架构不匹配
我的数据集很容易插入,系统中的记录如下例所示:
该表定义如下:
表名:newsarticles
主分区键: id(字符串)
主排序键: 添加(数字)
错误消息并没有真正告诉我问题所在。谁能看到我的请求有什么问题?是否有另一种方法来诊断可能丢失或不正确的内容?在此先感谢,对于 NOOB 问题,我很抱歉,但我只是第一次开始使用 AWS DynamoDB。
python - 根据表dynamodb python中的存在更新或插入项目
问题
我正在尝试逐项查看表格,以便如果一个项目已经存在,那么我应该能够更新它,如果没有,那么我应该能够插入它。
但是,我了解到更新也可以像 upsert(update/insert) 一样工作。我的情况也不适合。
我的情况
- 检查
item
表中是否存在并存储flag
(布尔值) - 检查是否
flag
是0
,(项目不可用)然后,插入项目并将当前时间戳添加到列中Inserted_dttm
- 检查是否
flag
是1
,(项目可用)然后更新项目并将当前时间戳添加到列中Updated_dttm
(而不是 Inserted_dttm)
试用
我一直在寻找query()
是一个不错的选择get_item()
,但是任何一个都欢迎您的解决方案。
amazon-web-services - AWS DynamoDB filterexpression 具有多个带有 QueryRequest 的 IN 条件子句
当我们在 QueryRequest 中使用多个 IN 条件子句时,它仅与 IN 条件中提供的第一项匹配的数据。
我有 Json 格式有
arrays - DynamoDb:UpdateExpression 用于更新数组
Env:aws-sdk
用于与 DynamoDb 交互的 NodeJS 服务。
问题:当我将一个项目的属性设置为一个数组时,它被保存为一个字符串。我期望 x: ['1'] 但我得到 x: '1'。我相信这是因为我写错了我的 UpdateExpression/ExpressionAttributeValues。
情况:我有一个表,其中有一个名为users
. 用户是一个uuids
可以更新的数组。表中项目的示例:
我想用 user 更新 users 数组uuid
。对于我的更新功能,我通过:
更新函数(数据为{ users: ['13245395'] }
):
我得到的结果是
但我所期望的是:
以前试过:
在创建参数时将 data.users 包装在一个数组中(适用于第一个 id,但添加的第二个 id 被附加到与第一个相同的字符串中,因此它看起来像 ['123,456'] 而不是 ['123', '456']。
UpdateExpression: "set users = :users", ExpressionAttributeValues:{ ":users": [
${data.users}
] },使用“L”和“S”数据类型来确定它是一个字符串数组,即
UpdateExpression: "set users = :users", ExpressionAttributeValues:{ ":users": { "L": { "S":
${data.users}
} } },
amazon-dynamodb - 对 GSI 进行条件检查的 DynamoDBSaveExpression
我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于 GSI。
实际上,如果给定的属性(即 GSI 的哈希)已经存在,我希望保存失败。
例如,在一个虚构的员工表中,“SSN”是哈希键,“EmployeeId”上有一个 GSI。这两个属性都必须是独一无二的。在保存员工时,我想确保“SSN”或“EmployeeId”都没有在表中使用。我可以为表的散列(即 SSN)做到这一点,但不能为 GSI 的散列做到这一点。
是否支持?我在文档中没有看到。
谢谢!
amazon-dynamodb - 是否可以更新作为 DynamoDB 中主键一部分的属性值?
我有“RefNumber”、“status”和“Date”的表格。“RefNumber”是分区键,“Status”是排序键所以,两者都是主键。
现在获取此记录后,我想用“1”更新“状态”。我有多个工作人员读取 DynamoDB 记录,只是为了避免任何 2 个工作人员处理相同的记录,我想使用 ConditionExpression 使用“1”获取和更新“状态”,如果更新成功,工作人员将处理否则它将跳过。
我的问题是,更新作为 dynamodb 中主键一部分的属性值是否是一个好的设计
node.js - dynamodb 通过 id 数组获取所有项目
我有一个带有名称 id 和 HASH 类型的属性的表。我想从一组 id 中获取所有项目。
我应该怎么做才能通过我的 id 获取所有项目?
amazon-web-services - DynamoDB QuerySpec {MaxResultSize + 过滤表达式}
来自 DynamoDB文档
Query 操作允许您限制它在结果中返回的项目数。为此,请将 Limit 参数设置为所需的最大项目数。
例如,假设您查询一个限制值为 6 且没有过滤器表达式的表。查询结果将包含表中与请求中的关键条件表达式匹配的前六个项目。
现在假设您将过滤器表达式添加到查询。在这种情况下,DynamoDB 会将过滤器表达式应用于返回的六个项目,丢弃不匹配的项目。最终查询结果将包含 6 个或更少的项目,具体取决于过滤的项目数。
看起来下面的查询应该(至少有时)返回 0 条记录。
总之,我有一个 UserLogins 表。一个简化的版本是:
现在,假设 UserId = X 在不同的 DeviceId 中有 10,000 个非活动登录和 1 个活动登录。
但是,当我对我的 DynamoDB 表运行此查询时:
我总是得到 1 行。UserId=X 的 1 个活动登录。而且它不仅仅发生在 1 个用户身上,它也发生在类似情况下的多个用户身上。
我的结果是否与 DynamoDB 文档相矛盾?
这看起来很矛盾,因为如果 maxResultSize=10,则意味着 DynamoDB 将仅读取前 10 个项目(共 10,001 个),然后它将仅应用过滤器 active=true(可能返回 0 个结果)。active=true 的记录似乎不太可能出现在 DynamoDB 读取的前 10 条记录中。
这发生在数百名运行类似查询的客户身上。它工作得很好,根据文档它不应该工作。