我继承了一个使用 DynamoDB 作为其数据库的站点,不幸的是我对此一无所知,并且我正在尝试为他们更改用户的电子邮件。DynamoDB 中似乎有一个 users 表,但我不知道用户的 id,只知道他们的用户名和当前电子邮件,所以在这一点上,我只是想在更新之前找到记录。当我尝试在 Web 界面中扫描这些值时,我没有得到任何结果;它只是不断搜索。如果我在 Web 界面中扫描我知道存在的电子邮件地址,我也没有得到任何结果。
使用这些占位符值,
Username: example
Email: [email protected]
我使用 AWS CLI 尝试了一些命令,但出现了各种错误:
aws dynamodb get-item --table-name users --key '{"Username": {"S": "example"}}'
这会产生此错误:
Unknown options: example}}', {S:
我也试过这个:
aws dynamodb query --table-name users --key-condition-expression "Username = :v1" --expression-attribute-values "{ \":v1\" : { \"S\" : \"example\" } }"
这会产生此错误:
An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: id
我也尝试打印出所有用户,但除了最小的表之外,它似乎都失败了:
aws dynamodb scan --table-name users
这会产生此错误:
An error occurred (ProvisionedThroughputExceededException) when calling the Scan operation (reached max retries: 2): The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API.
不知道此时该做什么。有什么建议吗?
我联系了 AWS 支持,他们说了两件事:
需要将表的读/写容量从“预置”更改为“按需”。
扫描绝对是这里使用的命令,而不是查询;query 需要 id,scan 不需要。
听起来好像只有关键或全局二级索引可以在 DynamoDB 中有效地搜索,这可以通过
query()
函数来完成,从我的简要研究来看。老实说,我不是 DynamoDB 专家,过去只是读过它,但这个StackOverflow 答案可能对您想要完成的工作有所帮助。本质上,它建议在您尝试用于搜索的字段上创建一个全局二级索引。