搜索实现:ElasticSearch vs MongoDB vs Relational Database

iii*_*rxs 7 search relational-database mongodb elasticsearch

我正在设计一个大型旅游市场机构,我在那里拥有 170000 家酒店和 3000 种房型。

我的实体的简单表示是:

Hotel:
    destination: Paris
    rooms:
        room_a:
            type: single
        room_b:
            type: double
RoomType:
    name: double
    paxes(people in room): 2
Run Code Online (Sandbox Code Playgroud)

最基本的搜索操作需要用户提供目的地和所需房间的数量以及每个房间的人数(人)。

在我看来,获取提供所需房间的所有酒店的简单 SQL 查询似乎是一个简单的 SQL 查询,但我担心数据的大小。

到目前为止,我只使用过关系型数据库,而且我之前没有使用过 NoSQL 数据库(例如 MongoDB 和 ElasticSearch),我想知道使用 MongoDB 或 ElasticSearch 与关系型数据库相比会快多少。我已经读过,elasticsearch 的典型用例是全文搜索,但我不知道这样的搜索会快多少。

谢谢

小智 6

非关系选项可能会显着提高搜索速度,这仅仅是因为连接在大型数据集上的速度有多慢。使用 Mongo 或 Elasticsearch 之类的工具,您可以创建一个包含所有相关信息的文档并进行搜索。从关系背景来看,这似乎违反直觉——但其想法是一起访问的信息存储在一起。

至于 elasticsearch 与 mongo,这里有几件事情需要考虑:

  • Elasticsearch 将更容易过渡到功能更齐全的搜索功能。全文搜索特定酒店?边打字边搜索?建议?“你是说”功能吗?但它也非常擅长像您描述的结构化过滤。
  • Elasticsearch 可能不应该用作您的主要数据源。它不如 Mongo 或 SQL 可靠。无论如何,它都不是一个糟糕的产品,但它的分布式特性意味着如果您非常重视数据的完整性,只需使用弹性进行搜索。
    • 这样做的分支是,您必须提前构建索引以进行搜索。这既增加了复杂性,又会延迟数据的“实时”更新。归根结底,这是搜索速度如此之快的一部分——就像 SQL 索引一样,您可以通过减慢写入速度来加快读取速度。
  • 虽然使用 Elasticsearch 或 Mongo很容易得到一些东西,但我认为 Elasticsearch 的学习曲线有点陡峭。您可以使用 Elasticsearch 做很多事情,这让筛选变得有点困难。
  • 还要了解您的生产计划(如果您将其投入生产)。Elastic 和 Mongo 的设置都比 SQL Db 更复杂。没有许可成本,但用于复制的多个盒子甚至使用托管解决方案可能会变得昂贵。