搜索实现: ElasticSearch vs MongoDB vs 关系数据库

10

我正在设计一个大型旅行市场代理,其中有170000家酒店和3000种房间类型。

我的实体的简单表示如下:

Hotel:
    destination: Paris
    rooms:
        room_a:
            type: single
        room_b:
            type: double
RoomType:
    name: double
    paxes(people in room): 2

最基本的搜索需要用户提供目的地,所需房间数量以及每个房间内的人数信息。似乎只需要简单的 SQL 查询即可获取所有提供所需房间的酒店,但我担心我的数据量太大。
迄今为止,我仅使用关系型数据库,并没有使用过像 MongoDB 和 ElasticSearch 这样的 NoSQL 数据库,我想知道使用 MongoDB 或 ElasticSearch 相对于关系型数据库会快多少。我已经了解到 elasticsearch 的典型用法是全文搜索,但我不知道对于这种搜索,它能比普通的关系型数据库快多少。
谢谢。
2个回答

11
使用非关系型数据库可能会在搜索大型数据集时带来显著的搜索速度提升,这是因为关联操作在大数据集上可能会很慢。使用类似Mongo或Elasticsearch这样的工具,您可以创建单个文档,并将所有相关信息存储在其中进行搜索。虽然这似乎与关系型背景背道而驰,但其思想是访问一起使用的信息应该存储在一起。
至于Elasticsearch vs Mongo,以下几点需要考虑:
- Elasticsearch更容易过渡至更完整的搜索功能,如特定酒店的全文搜索、搜索即时提示、建议和“你是否意思是”的功能,同时也非常擅长结构化过滤,就像你描述的那样。 - Elasticsearch可能不应作为您的主要数据源。它比Mongo或SQL不够可靠。它并不是一个糟糕的产品,但由于其分布式的性质,如果您非常重视数据的完整性,只需将Elastic用于搜索即可。
- 这导致必须预先构建索引以进行搜索。这增加了复杂性,也可能延迟数据的“实时”更新。最终,这是搜索如此快速的一部分--就像使用SQL索引一样,您通过减缓写入来加快读取速度。
- 虽然使用Elasticsearch或Mongo都可以很容易地实现“某些东西”,但是我认为学习Elasticsearch的曲线有点陡峭。您可以使用Elasticsearch完成很多操作,这使得难以筛选。 - 还要注意您的生产计划(如果要将其投入生产)。 Elastic和Mongo都比仅使用SQL数据库更复杂。没有许可证成本,但是用于复制或甚至选择托管解决方案的多个框可能会变得昂贵。

在传统的关系型数据库中,您仍然可以遵循非关系模式,创建带有JSON字段的表并添加相关索引。 - NeverEndingQueue

3
每个数据库框架都有其优点和缺点,但是根据我的经验,Elasticsearch 有以下几个优点:
  1. 非常容易启动和运行。
  2. 具有内置的集群发现功能,可以在主要云提供商中进行水平扩展。
  3. 您的数据结构是一个嵌套对象,而 Elasticsearch 索引映射支持此功能。
  4. 性能高,您可以根据需求调整服务器 RAM:Disk 比例。
  5. 支持各种文本分析器。
  6. 您可以对文档的哪个部分进行搜索进行细粒度控制。
  7. 针对主要编程语言提供 API。
  8. 如果您想要更多功能,如监视、警报、安全等,可以订阅 Elastic 的 x-pack,这很酷。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接