技术交流28群

服务热线

135-6963-3175

微信服务号

Elasticsearch 更新时间 2020-3-10 浏览2227次

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

相关概念

集群(Cluster)一组拥有共同的 cluster name 的节点。

节点(Node) 集群中的一个 Elasticearch 实例。

索引(Index) 相当于关系数据库中的database概念,一个集群中可以包含多个索引。这个是个逻辑概念。

主分片(Primary shard) 索引的子集,索引可以切分成多个分片,分布到不同的集群节点上。分片对应的是 Lucene 中的索引。

副本分片(Replica shard)每个主分片可以有一个或者多个副本。

类型(Type)相当于数据库中的table概念,mapping是针对 Type 的。同一个索引里可以包含多个 Type。

Mapping 相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。

文档(Document) 相当于数据库中的row。

字段(Field)相当于数据库中的column。

分配(Allocation) 将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。


mongo与elasticsearch对比

相同点

1、都是以json格式管理数据的nosql数据库。

2、都支持CRUD操作。

3、都支持聚合和全文检索。

4、都支持分片和复制。

5、都支持阉割版的join操作。

6、都支持处理超大规模数据。

7、目前都不支持事务或者叫支持阉割版的事务。


不同点

1、es是java编写,通过RESTFul接口操作数据。mongodb是C++编写,通过driver操作数据。(es对java开发更有好,利于排查理解)

2、mongodb的分片有hash和range两种方式,es只有hash一种。

3、es是天生分布式,主副分片自动分配和复制,开箱即用。

      mongodb的分布式是由“前置查询路由+配置服务+shard集合”,需要手动配置集群服务。

4、内部存储ES是倒排索引+docvalues+fielddata。利用Lucene实现实时索引和搜索功能,默认支持在文档的每个字段上创建索引

      mongodb通过B+tree,我们必须定义索引用于提升查询性能,但会影响写操作。

5、es全文检索有强大的分析器且可以灵活组合,查询时智能匹配。mongodb的全文检索字段个数有限制。

6、es所有字段自动索引,mongodb的字段需要手动索引。

7、es非实时有数据丢失窗口。mongodb实时理论上无数据丢失风险。


总结es偏向于检索、查询、数据分析,适用于OLAP(A分析)系统。mongodb偏向于大数据规模下的CRUD,适用于对事务要求不强的OLTP(T事务)系统。


Elasticsearch 与 Solr 的比较总结

1、solr更早2004、es2010

2、实时建立索引时,solr会产生io阻塞,es不会,es查询性能高于solr

3、在不断动态添加数据时,solr检索效率会变低,es没什么变化。

4、solr利用zk进行分布式管理,es自身带有分布式管理功能。solr一般要部署到tomcat web服务器。

5、solr支持更多格式xml,json,csv,而es只支持json文件格式

6、单纯对已有数据进行检索solr更好,高于es。

7、都是基于lucene基础上开发,都是基于分词技术和倒排索引方式进行查询。