使用代码而不是 NoSQL 数据库进行过滤是否可以?

Is it okay to filter using code instead of the NoSQL database?

我们正在使用 DynamoDB 并且有一些复杂的查询,使用代码可以很容易地处理这些查询,而不是尝试编写复杂的 DynamoDB 扫描操作。是编写扫描操作更好还是仅使用查询操作(在哈希键或二级索引上查询)提取最少量的数据并在调用代码本身中执行进一步的过滤和缩减?这被认为是不好的做法还是在 NoSQL 中可以做的事情?

很遗憾,这取决于情况。

如果您的 table 尺寸适中,则 table 扫描不实用。

如果您有复杂的查询需求,那么使用 DynamoDB 的最佳解决方法是使用全局二级索引 (GSI) 作为您想要的字段的投影。您可以使用稀疏索引(在仅存在于对象子集上的字段上创建 GSI)和复合属性键(连接两个或多个属性并将其用作新属性以在其上创建 GSI)等技术。

但是,要直接解决问题 "Is it okay to filter using code instead of the NoSQL database?",答案是肯定的,这是一种接受table 的方法。在DynamoDB中进行过滤器的原因并不是为了减少查询的"cost",其实是一样的,而是为了减少网络上不必要的数据传输。

理想的解决方案是使用 GSI 将返回的范围缩小到尽可能接近您想要的范围,但如果有必要,可以通过一些额外的过滤来消除一些记录DynamoDB 中的过滤器或使用您自己的代码。