服务热线
135-6963-3175
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基础上开发,都是基于分词技术和倒排索引方式进行查询。