【问题标题】:DynamoDB Filter Expresson vs GSIsDynamoDB 过滤器表达式与 GSI
【发布时间】:2020-10-23 00:48:35
【问题描述】:

我正在使用 DynamoDB 来存储我的数据。我正在创建一个仪表板应用程序,用户可以在其中按字段排序、按字段搜索以及一次添加多个过滤器。表中将有大约 100 - 1000 个条目。

要实现这个搜索、过滤、排序功能,我有两种方法可以实现:

  1. 使用 FilterExpression。 然而,一个简单的解决方案需要在过滤之前提取所有数据(不是“真正的”查询),需要更多的服务器端处理 + FilterExpression 通常被视为“糟糕”练习”。

  2. 为每个字段单独创建 GSI。 允许我使用真正的查询按字段搜索和排序,减少服务器端处理 - 可以直接获取我需要的项目.这样做的问题是添加多个过滤器,因为不可能在单个查询调用中使用多个 GSI。如果我有多个过滤器,这种方法将需要多次查询调用,并在客户端手动聚合/查找常见项目。

在这种情况下使用 FilterExpression 是否可以接受?从编码/维护的角度来看,它会大大简化这个过程,但我不确定这是否是一种好的做法。如果 GSI 是更好的选择,您将如何处理多个过滤器?

最后,除了上面列出的两个选项之外,还有更好的方法吗?

提前非常感谢!

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb dynamodb-queries


    【解决方案1】:

    老实说,排序/搜索是 DDB 失败的地方..

    就您所说的数据量而言,我只会使用 Aurora。

    在规模上,假设您达到了 Aurora 的极限,那么前端 DDB 和 Elasticsearch 会更好地为您提供服务。

    【讨论】:

    • hmm,当你在 SQL 中执行 SELECT 查询时,我是否还在扫描表中的每一行,并找到具有指定条件的行?即 SELECT 的行为方式是否与 FilterExpression 使用 DynamoDB 的方式相同?
    • 如果表上没有任何索引,是的,每一行都会被读取。但是 RDBMS 中的索引比 DDB 索引更灵活。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2022-06-12
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多