如何解决如何在Node.js中的DynamoDB中按属性获取项目
我有7列,
id,firstname,lastname,email,phone,createAt,updatedAt
我试图在Node.js中编写一个api,以通过phone
获取项目。
id
是主键。
我正在尝试通过电话或电子邮件获取数据。我尚未创建排序键或GSI。
我最终得到建议,将scan
与dynamodb中的过滤器一起使用并获取所有记录。
还有其他方法可以实现吗?
解决方法
您的问题已经包含两个好的答案:
- 最慢的方法是将
Scan
与FilterExpression
一起使用以查找匹配的项目。在每个查询上读取整个数据库都需要花费时间(也要花钱!)。仅在这些查询很少出现时才有意义。 - 如果
phone
进行的这些查询不是非常稀有,最好事先准备:添加一个以phone
作为其分区键的GSI,以允许按电话值查找项目与Query
和IndexName
一起使用KeyConditionExpression
。这些查询既快速又便宜:您只需为实际检索到的商品付费。这种方法的缺点是增加了写入成本:成本 每次写入的次数增加一倍(DynamoDB写入基表和 索引),存储成本也会增加。但是除非 您的工作量主要是写操作(项目经常更新,并且 很少阅读),使用GSI的选项2仍然比 选项1-全表Scan
。
最后,您还有另一个选择是重新考虑数据模型。例如,如果您始终按phone
查找项目,而从未按id
查找项目,则可以将phone
设置为数据的分区键,并将id
设置为排序键(以允许具有相同phone
的多个项目)。但是我不知道这是否与您的用例有关。如果您有时需要通过id
有时甚至通过phone
来查找项目,那么GSI正是您所需要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。