Search implementation: ElasticSearch vs MongoDB vs Relational Database

时间:2018-02-01 18:03:07

标签: mongodb elasticsearch search relational-database

I am designing a big travel market agency, where I have 170000 hotels and 3000 room types.

A simple representation of my entities is:

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

The most basic search action requires from the user the destination and the number of required rooms and the paxes(people) in each room.

It seems to me a simple SQL query to get all the hotels that provide the required rooms, but I am concerned about the size of my data.

Until now, I have used only relational databases and I have no previous experience with NoSQL databases such as MongoDB and ElasticSearch and I would like to know how much faster it would be to use MongoDB or ElasticSearch vs a relational database. I have read that the typical usecase for elasticsearch is full text search but I do not know how much faster it would be for a search like this.

Thank you

2 个答案:

答案 0 :(得分:2)

每个数据库框架都有自己的优点和缺点,但根据我的经验,Elasticsearch有以下几个原因:

  1. 很容易启动并运行。
  2. 使用内置群集发现水平扩展主要云提供商。
  3. 您的数据结构是嵌套对象,而elasticsearch索引映射支持此功能。
  4. 高效,您可以根据您的要求调整服务器RAM:磁盘比率。
  5. 支持各种文本分析器。
  6. 您可以精细控制文档的哪个部分必须可搜索。
  7. 可用于主要编程语言的API。
  8. 如果您想要更多功能,如监控,警报,安全等,您可以订阅弹性的x-pack,这非常酷。

答案 1 :(得分:0)

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

对于elasticsearch与mongo,需要考虑以下几点:

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