VS-MongoDB对比Elasticsearch

MongoDB 对比Elasticsearch

首先,这里有一个重要区别:MongoDB是一个通用数据库,Elasticsearch是一个由Lucene支持的分布式文本搜索引擎。人们一直在谈论使用Elasticsearch作为通用数据库,但知道这不是它的原创设计。我认为通用的NoSQL数据库和搜索引擎正在进行整合,但就目前来看,两者来自两个截然不同的阵营。

我们公司正在使用MongoDB和Elasticsearch。我们将数据存储在MongoDB中,并专门为其全文搜索功能使用Elasticsearch。我们只发送一个我们需要查询的mongo数据字段的一个子集给弹性的。我们的用例与您的不同之处在于,我们的Mongo数据始终在变化:记录或记录字段的子集可以每天更新数次,这可能要求将该记录重新编入索引以使其具有弹性。仅仅因为这个原因,使用弹性作为唯一的数据存储对我们来说不是一个好的选择,因为我们无法更新选择字段; 我们需要重新索引整个文档。这不是一个有弹性的限制,这是Lucene如何工作的,弹性背后的底层搜索引擎。就你而言,记录赢得’ 一旦存储就不需要改变,无需做出选择。话虽如此,如果数据安全是一个问题,我会考虑使用Elasticsearch作为您数据的唯一存储机制。

就速度而言,不仅Elastic / Lucene与Mongo的查询速度相当,在您的情况下,“在任何时候使用哪个字段进行过滤”的情况下,“Elastic / Lucene”可能是幅度更快,尤其是随着数据集变大。不同之处在于底层查询实现:

1.  Elastic / Lucene

使用向量空间模型倒排索引进行信息检索,这是比较记录相似性和查询的高效方法。当你查询Elastic / Lucene时,它已经知道答案; 它的大部分工作都在于根据最有可能符合您的查询条件的结果对您进行排名。这是一个重要的观点:搜索引擎,而不是数据库,不能保证你的确切结果; 他们通过与您的查询有多接近来对结果进行排名。大部分时间恰好如此,结果接近确切。

2. Mongo

方法是更通用的数据存储的方法; 它比较JSON文件和另一个文件。您可以通过任何方式获得出色的性能,但您需要精心制作索引以匹配您将要运行的查询。具体而言,如果您有多个字段供您查询,则需要仔细制作复合键以便尽可能快地减少将被查询的数据集。例如,您的第一个键应该过滤掉大部分数据集,第二个键应该进一步过滤掉剩下的内容,等等。如果您的查询与所定义索引中的键和顺序不匹配,您的性能将会下降很多。另一方面,Mongo是一个真正的数据库,所以如果准确性是你所需要的,那么它将给出的答案将被发现。

原创于 【模棱博客】