ElasticSearch & Mongo

5

我假设这是一个非常新手的问题。我开始尝试使用ES和MongoDB,并试图将数据从SQL数据库中移出作为一项练习。但我不禁想知道,哪些数据应该存储在MongoDB中,哪些应该存储在ES中?我能否将所有数据都存储在ES中?假设数据量很大,例如价格趋势。


这真的取决于你想要什么,通常 elasticsearch 适用于需要进行文本搜索的大量内容,它进行了优化。你可以将一切都存储在 Elasticsearch 中,但我认为这并不常见。这可能会对你有所帮助:https://www.compose.io/articles/mongoosastic-the-power-of-mongodb-and-elasticsearch-together/。 - dege
谢谢@dege,这篇文章很有帮助。 - kozureookami
我倾向于将与搜索相关的内容存储在Elasticsearch上,并将扩展数据保留在Mongo上。这使我能够在演示层向用户呈现排名前几的结果。当用户选择要获取更多详细信息的结果时,我从Mongo中提取详细信息。 - Sun Bee
2个回答

5
首先,MongoDB被称为文档存储。这个概念的关键特点是它存储动态模式的文档:
- 文档集合中的每个记录可以具有不同的结构 - 每个记录的类型可以不同 - 文档属性(列)可以具有嵌套结构
它不是无模式的,而是动态模式(或灵活的模式)。您可以在此处找到一个很好的教程来了解这个概念:https://docs.mongodb.org/manual/data-modeling/ MongoDB是最广泛使用的文档存储 - 请参见http://db-engines.com/en/system/MongoDB
它为大多数编程语言提供“驱动程序”,以实现快速开发。您可以很快地深入研究Mongo,因为有很多教程和官方Mongo University - 这是开发人员和DBA的绝佳课程。
简而言之,它支持索引、聚合、过滤、负载平衡、分片、复制(副本集)等。数据以BSON格式存储和传输(http://bsonspec.org/)。
MongoDB与RDBMS概念的良好比较可以在此官方参考中找到:https://docs.mongodb.org/manual/reference/sql-comparison/ 它有什么好处?它实现了敏捷开发,其中模式可以随着时间的推移而改变,尤其是基于表单的数据、用户生成的内容、基于位置的数据、用户配置文件等。它还可以存储大型文档(每个文档最多16MB)。
现在,Elasticsearch不是数据库。它是一个具有一些伟大聚合能力的搜索引擎(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html - 确保您检查指标、桶和管道聚合)。
典型的RDBSM并不适用于全文搜索或松散结构的数据。ES中的查询可以比任何数据库更快地返回结果(例如,在RDBMS中需要几秒钟,而在ES中只需要毫秒)。您需要记住一个关键是设计良好的索引,并且它们将占用您的磁盘空间。
有一篇非常详细的文章比较了两者的性能,您可能会发现它很有用:http://blog.quarkslab.com/mongodb-vs-elasticsearch-the-quest-of-the-holy-performances.html
您实际上可以成功使用两者 - MongoDB将存储您的数据,而ES将用作服务层(搜索、聚合等)。

简而言之:Elasticsearch不是数据库,它使用元索引进行搜索,并与诸如Mongo等数据库结合使用。这是最佳答案。我不喜欢的是为什么你还提到定价和云系统?这些都与主题无关。 - Pogrindis
你说得对,定价无关紧要。我会将其删除。干杯。 - wjp

0

MongoDB和ES之间存在很大的区别。 MongoDB是一个数据库,旨在存储数据并查询它们,而Elasticsearch是基于Lucene的索引器,您只需为搜索索引数据,不应信任Elastisearch。即使您可以在Elasticsearch中使用store:true,但不建议这样做,我不会依赖它来存储重要数据。


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