我有7列,
id, firstname, lastname, email, phone, createAt, updatedAt
我正在尝试使用Nodejs编写API,以通过
phone
获取项目。
id
是主键。我试图通过电话或电子邮件获取数据。 我还没有创建排序键或GSI。
最终,我得到了建议,在dynamodb中使用带有过滤器的
scan
并获取所有记录。还有其他方法可以实现吗?
我有7列,
id, firstname, lastname, email, phone, createAt, updatedAt
phone
获取项目。
id
是主键。scan
并获取所有记录。FilterExpression
的Scan
来查找匹配项。这将花费读取每个查询时整个数据库的时间(也会消耗更多的费用)。只有在这些查询非常不经常发生时才有意义。phone
为其分区键的GSI,以允许使用IndexName
和KeyConditionExpression
通过Query
查找按电话值索引的项目。这些查询将快速且便宜:您只需支付实际检索到的项目。这种方法的缺点是写入成本增加:每次写入的成本都会翻倍(DynamoDB同时写入基表和索引),存储成本也增加了。但除非你的工作负载主要是写入(项非常频繁地更新并且很少读取),否则选项2-使用GSI仍然比选项1-全表Scan
更好。最后,另一个选择是重新考虑数据模型。例如,如果你总是按phone
查找项目而从不按id
查找,你可以将phone
作为数据的分区键,而将id
作为排序键(以允许具有相同phone
的多个项目)。但我不知道这是否与你的用例相关。如果你需要按id
和phone
查找项目,那么可能GSI正是你所需要的。