Node.js DynamoDB滤波器表达式vs GSIs

Node.js DynamoDB滤波器表达式vs GSIs,node.js,amazon-web-services,amazon-dynamodb,dynamodb-queries,Node.js,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我正在使用DynamoDB来存储我的数据。我正在创建一个仪表板应用程序,用户可以在其中按字段排序、按字段搜索和一次添加多个过滤器。表中大约有100-1000个条目 要实现此搜索、筛选和排序功能,有两种方法可以实现: 使用FilterExpression。然而,一个简单的解决方案需要在筛选之前提取所有数据(不是“真”查询),需要更多的服务器端处理+FilterExpression,这通常被视为“错误做法” 分别为每个字段创建GSI。允许我使用真正的查询按字段进行搜索和排序,减少服务器端处理-可以

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

要实现此搜索、筛选和排序功能,有两种方法可以实现:

  • 使用FilterExpression。然而,一个简单的解决方案需要在筛选之前提取所有数据(不是“真”查询),需要更多的服务器端处理+FilterExpression,这通常被视为“错误做法”

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

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

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


    非常感谢

    老实说,排序/搜索是DDB下降的地方

    考虑到你所说的数据量,我只想使用极光


    在规模上,假设你达到了极光的极限,最好使用前端DDB和Elasticsearch。老实说,排序/搜索是DDB下降的地方

    考虑到你所说的数据量,我只想使用极光


    在scale上,假设您达到了Aurora的极限,最好使用前端DDB和Elasticsearch。

    hmm,当您在SQL中执行SELECT查询时,我是否仍在扫描表中的每一行,并查找具有指定条件的行?i、 e.SELECT的行为是否与FilterExpression使用DynamoDB时的行为相同?如果表上没有任何索引,则会读取每一行。但是RDBMS中的索引比DDB indexes更灵活。嗯,当您在SQL中执行SELECT查询时,我是否仍在扫描表中的每一行,并查找具有指定条件的行?i、 e.SELECT的行为是否与FilterExpression使用DynamoDB时的行为相同?如果表上没有任何索引,则会读取每一行。但是RDBMS中的索引比DDB索引更灵活。