【问题标题】:Simple Search capabilities with NoSql (DynamoDB)NoSql (DynamoDB) 的简单搜索功能
【发布时间】:2022-04-19 03:00:56
【问题描述】:

我是 NoSQL 的新手。我正在尝试制作简单的应用程序,其中包含您搜索的产品。使用 SQL,我只需拥有一个产品表,就可以使用 %LIKE% 在任何列中搜索子字符串并提取返回的行。我想使用 DynamoDB,但如果不引入 AWS OpenSearch (ElasticSearch) 似乎没有办法做到这一点,这可能比我所有的 DynamoDb 表都贵。在 DynamoDb 中是否有任何简单的方法可以做到这一点,而无需扫描整个表并使用 contains 进行过滤?

【问题讨论】:

  • 如果您需要此类功能,那么 DynamoDB 不适合您。只需使用常规数据库,例如 MySQL。
  • 现在哪个应用不需要这样的功能,它是一个简单的查找? NoSQL 什么时候会相关?
  • NoSQL 不能替代传统数据库。它有不同的用例和目的。您显然需要传统数据库。

标签: amazon-web-services elasticsearch nosql amazon-dynamodb data-modeling


【解决方案1】:

好吧,DynamoDB 不是您想要的,它是为一个非常不同的用例而设计的。

但是,与 DynamoDB 没有太大关联的 ElasticSearch 正是您所寻找的,它将大大简化您尝试使用传统 SQL 数据库的操作。那些说其他话的人提供的信息很差。传统数据库无法索引 %LIKE% 查询,而这正是 ElasticSearch 对文档中每个字段所做的工作。

开始使用 ElasticSearch 非常简单。只需下载 Jar 并运行它,然后开始浏览示例发布并从索引中获取文档。如果您的经验与我相似,那么您将永远不会真的想再次使用 SQL 数据库,但正如前面提到的,它们各有各的位置,所以我仍然使用传统的 RDBMS,但我专注于 ElasticSearch。

我已经将许多无法找到合理性能的应用程序转换为 ElasticSearch,其性能几乎总是亚秒级,通常只是其中的一小部分。要求进行许多 %LIKE% 匹配的 RDBMS 将无法为您提供亚秒级的结果。

还有一些工具可以自动将数据从您的 RDBMS 数据库汇集到 ElasticSearch 中,这样您就可以同时获得两全其美的好处。

NoSQL 意味着很多东西。一般来说,它已应用于几类数据存储。

  • 列式数据存储 - DynamoDB、Hive
  • 文档/对象数据库 - MongoDB、CouchDB、MarkLogic 和许多其他数据库
  • 键/值 - Cassandra、MongoDB、Redis、Memcache
  • 搜索索引 - SOLR、ElasticSearch、MarkLogic

ElasticSearch 弥补了文档数据库和搜索索引之间的差距,提供了两者的功能。它还提供键/值数据存储的功能。

列式数据存储更适合处理大量数据(通常是聚合数据),但查询的结果并不是您想要的那种性能。这些用于具有数万亿行和数百个特征/列的数据集。

然而,默认情况下,ElasticSearch 提供了对大量 JSON 文档索引的非常快速的搜索。 json 中的每个值。

使用 dynamodb 执行此操作的方法是使用 ElasticSearch,但是,您不需要 DynamoDB 使用 ElasticSearch 执行此操作,因此您不需要双倍的成本。

【讨论】:

    【解决方案2】:

    不,如果不添加其他层(例如 elasticsearch),就无法做您想做的事情(搜索 dynamodb) - 保持简单,使用传统数据库。

    IMO,永远不要假设您需要一个 nosql 数据库 - 因为您很少这样做 - 总是假设您需要一个传统数据库,直到证明不是这样。

    【讨论】:

    • 这是非常特殊的情况,RDBMS 崩溃并且搜索索引大放异彩。 RDBMS 可以为此类查询提供甚至是半合理的结果的唯一方法是,它是否在底层集成了一个全文搜索引擎。如果您真正需要的是全文搜索,那么为什么要承担 RDBMS 的开销,并失去您本来可以实现的性能。
    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多