首页 > 解决方案 > 如何获取不属于 GSI 的所有项目?

问题描述

想象一下,您有一个具有以下属性(所有字符串)的 dynamodb 表:

在这种情况下,用户可能没有companyId,因此对于某些数据库条目,它可能为空/不存在。

现在,您使用companyIdas 哈希键创建一个全局二级索引 (GSI)。

问题

是否可以使用上面的 GSI查询所有没有的 db 条目? companyId如果没有,还有哪些其他选项(没有scan)?

考虑的选项

从技术上讲,您可以将 all companyId's 设置为一个值,"empty"但在我看来,这会导致不那么直观的编码体验,因为您需要检查companyId == "empty"而不是companyId == null(这是检查空变量的常用且已知的方法)。

标签: amazon-web-servicesamazon-dynamodb

解决方案


如您所见,GSI 不索引空值。事实上,事实证明,这是一个非常有用的功能,因为当索引稀疏时它允许非常有效的索引(索引键不存在于表中的大多数项目上)。

在您的情况下,最佳解决方案取决于没有 companyId 的项目的密度。如果大多数人没有,扫描将是您最好的朋友。另一方面,如果大多数项目确实有一个 companyId,那么您可以创建一个“空”值或创建另一个属性(即 hasNoCompany)并在其上创建索引。

最后,你应该考虑为什么你需要没有公司的“所有物品”:同样,如果有很多这样的物品,扫描可能仍然更合适。


推荐阅读