amazon-web-services - 如何获取不属于 GSI 的所有项目?
问题描述
想象一下,您有一个具有以下属性(所有字符串)的 dynamodb 表:
userId
<- 哈希键companyId
firstname
- ETC..
在这种情况下,用户可能没有companyId
,因此对于某些数据库条目,它可能为空/不存在。
现在,您使用companyId
as 哈希键创建一个全局二级索引 (GSI)。
问题
是否可以使用上面的 GSI查询所有没有的 db 条目? companyId
如果没有,还有哪些其他选项(没有scan
)?
考虑的选项
从技术上讲,您可以将 all companyId
's 设置为一个值,"empty"
但在我看来,这会导致不那么直观的编码体验,因为您需要检查companyId == "empty"
而不是companyId == null
(这是检查空变量的常用且已知的方法)。
解决方案
如您所见,GSI 不索引空值。事实上,事实证明,这是一个非常有用的功能,因为当索引稀疏时它允许非常有效的索引(索引键不存在于表中的大多数项目上)。
在您的情况下,最佳解决方案取决于没有 companyId 的项目的密度。如果大多数人没有,扫描将是您最好的朋友。另一方面,如果大多数项目确实有一个 companyId,那么您可以创建一个“空”值或创建另一个属性(即 hasNoCompany)并在其上创建索引。
最后,你应该考虑为什么你需要没有公司的“所有物品”:同样,如果有很多这样的物品,扫描可能仍然更合适。
推荐阅读
- excel - 如果列包含日期,则 IF 语句计算日期之间的天数
- node.js - 为 npm run 创建别名
- java - 使用bat文件启动jar软件后如何使命令行不可见?
- javascript - onclick 显示所有隐藏元素
- python - keras 验证之字形的原因
- java - (org.apache.zookeeper.server.PrepRequestProcessor) 错误路径:/consumers/consumer1/ids 错误:KeeperErrorCode = NodeExists
- python - appium:如何推送文件
- performance-testing - 在性能结果中通过加载来理解什么
- docker - docker postgresql 从其他容器访问
- r - 如何在循环中使用函数而不是单独渲染组件