搜索实现:ElasticSearch vs MongoDB vs 关系数据库
Search implementation: ElasticSearch vs MongoDB vs Relational Database
我正在设计一个大型旅游市场机构,那里有 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 的典型用例是全文搜索,但我不知道这样的搜索会快多少。
谢谢
每个数据库框架都有自己的优点和缺点,但是,根据我的经验,Elasticsearch 很好,原因如下:
- 很容易上手 运行。
- 通过主要云提供商的内置集群发现水平扩展。
- 您的数据结构是嵌套对象,elasticsearch 索引映射支持这一点。
- 高性能,您可以根据需要调整服务器 RAM:Disk 比率。
- 支持各种可用的文本分析器。
- 您可以精细控制文档的哪些部分必须可搜索。
- 可用于主要编程语言的 API。
- 如果你想要更多的功能,比如监控、警报、安全等,你可以订阅 elastic 的 x-pack,这很酷。
非关系选项可能会给您带来显着的搜索速度提升 ,因为在大型数据集上连接可能会很慢。使用 Mongo 或 Elasticsearch 之类的东西,您可以创建一个包含所有相关信息的文档并进行搜索。从关系背景来看,这似乎有悖常理——但我们的想法是,一起访问的信息存储在一起。
关于 elasticsearch 与 mongo,这里有几点需要考虑:
- Elasticsearch 将更容易过渡到功能更全面的搜索功能。全文搜索特定酒店?一边输入一边搜索?建议? "Did you mean" 功能?但它也非常擅长像您描述的那样进行结构化过滤。
- Elasticsearch 可能不应该用作您的主要数据源。它不如 Mongo 或 SQL 可靠。无论如何,它都不是一个糟糕的产品,但它的分布式特性意味着,如果您非常重视数据的完整性,只需使用弹性进行搜索即可。
- 其结果是,您必须提前建立索引以进行搜索。这既增加了复杂性,又会延迟 "real time" 数据更新。归根结底,这是搜索速度如此之快的一部分——就像 SQL 索引一样,您可以通过减慢写入速度来加快读取速度。
- 虽然使用 Elasticsearch 或 Mongo 很容易获得 东西 ,但我认为 Elasticsearch 的学习曲线有点陡峭。您可以使用 Elasticsearch 做很多事情,这使得筛选变得有点困难。
- 还要了解您的生产计划(如果您要将其投入生产)。 Elastic 和 Mongo 的设置都比 SQL Db 更复杂。没有许可成本,但用于复制或什至与托管解决方案一起使用的多个盒子可能会变得昂贵。
我正在设计一个大型旅游市场机构,那里有 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 的典型用例是全文搜索,但我不知道这样的搜索会快多少。
谢谢
每个数据库框架都有自己的优点和缺点,但是,根据我的经验,Elasticsearch 很好,原因如下:
- 很容易上手 运行。
- 通过主要云提供商的内置集群发现水平扩展。
- 您的数据结构是嵌套对象,elasticsearch 索引映射支持这一点。
- 高性能,您可以根据需要调整服务器 RAM:Disk 比率。
- 支持各种可用的文本分析器。
- 您可以精细控制文档的哪些部分必须可搜索。
- 可用于主要编程语言的 API。
- 如果你想要更多的功能,比如监控、警报、安全等,你可以订阅 elastic 的 x-pack,这很酷。
非关系选项可能会给您带来显着的搜索速度提升 ,因为在大型数据集上连接可能会很慢。使用 Mongo 或 Elasticsearch 之类的东西,您可以创建一个包含所有相关信息的文档并进行搜索。从关系背景来看,这似乎有悖常理——但我们的想法是,一起访问的信息存储在一起。
关于 elasticsearch 与 mongo,这里有几点需要考虑:
- Elasticsearch 将更容易过渡到功能更全面的搜索功能。全文搜索特定酒店?一边输入一边搜索?建议? "Did you mean" 功能?但它也非常擅长像您描述的那样进行结构化过滤。
- Elasticsearch 可能不应该用作您的主要数据源。它不如 Mongo 或 SQL 可靠。无论如何,它都不是一个糟糕的产品,但它的分布式特性意味着,如果您非常重视数据的完整性,只需使用弹性进行搜索即可。
- 其结果是,您必须提前建立索引以进行搜索。这既增加了复杂性,又会延迟 "real time" 数据更新。归根结底,这是搜索速度如此之快的一部分——就像 SQL 索引一样,您可以通过减慢写入速度来加快读取速度。
- 虽然使用 Elasticsearch 或 Mongo 很容易获得 东西 ,但我认为 Elasticsearch 的学习曲线有点陡峭。您可以使用 Elasticsearch 做很多事情,这使得筛选变得有点困难。
- 还要了解您的生产计划(如果您要将其投入生产)。 Elastic 和 Mongo 的设置都比 SQL Db 更复杂。没有许可成本,但用于复制或什至与托管解决方案一起使用的多个盒子可能会变得昂贵。