Elasticsearch 概念整理
Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。
- Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。
Elasticsearch为什么搜索快
- Elasticsearch之所以搜索速度快,主要得益于其采用的一系列高效技术和策略。
- 分布式存储:Elasticsearch通过分布式存储技术,将数据存储在多个节点上,从而减少单个节点的压力,提高整体性能。这种分布式架构可以充分利用集群的计算资源和存储能力,提高查询速度12。
- 索引分片:Elasticsearch将每个索引划分成多个分片,允许查询操作并行化,从而提高查询速度。每个分片可以独立进行搜索操作,进一步提高了查询的并发性和效率12。
- 倒排索引:Elasticsearch使用倒排索引这种数据结构,将文档中的每个词与该词出现在哪些文档中进行映射,并存储这些信息。当搜索请求发生时,Elasticsearch可以快速查找包含所有搜索词的文档,从而返回结果12。
- 索引优化:通过索引优化技术,Elasticsearch可以使查询速度更快。这包括对数据进行预处理,将结果预存储到索引中,避免在查询时重新计算1。
- 高效的查询引擎:Elasticsearch使用了高效的查询引擎,支持各种类型的查询,并对复杂查询提供了优化策略,从而提高查询速度1。
- 异步请求处理:Elasticsearch使用了异步请求处理机制,能够在请求到达时立即返回,避免长时间的等待,提高用户体验1。
- 内存存储技术:ES使用了内存存储技术,能够在读写数据时大大减少磁盘访问次数,提高数据存储和查询效率1。
- 缓存和缓存预热:Elasticsearch内置了各种类型的缓存,如字段数据缓存、过滤器缓存等,用于加速查询。此外,还支持缓存预热,即在查询之前将数据加载到缓存中,从而减少查询时间3。
- 使用近似搜索算法:Elasticsearch支持近似搜索算法,如布隆过滤器、Levenshtein距离等,可以在某种程度上减少倒排索引的检索范围,提高查询效率3。
这些技术和策略共同作用,使得Elasticsearch在处理大量数据和高并发查询时,仍然能够保持快速响应和高性能,满足用户对实时、高效查询的需求12。
构建倒排索引的过程如下:
文档解析: - 将每个文档拆分成单个的词语(词项)。
- 可以使用分词器和词法分析器来处理文本。
记录词语和文档的映射:
- 对于每个词语,记录其所在的文档ID。
- 如果词语在文档中多次出现,可以记录其词频和具体位置(偏移量)。
构建倒排列表: - 为每个词语创建一个倒排列表。
- 将包含该词语的所有文档ID加入到倒排列表中。
倒排索引的查询:
使用倒排索引进行查询时,流程如下: - 查询解析:
- 将查询字符串解析成单个词语。
- 查找倒排列表:
- 对于每个查询词语,从词典中找到对应的倒排列表。
- 合并结果:
- 根据查询类型(如AND、OR等),合并多个倒排列表以得到最终的结果文档集合。
优势:
18. 高效检索:倒排索引允许快速定位包含特定词语的文档,比起逐一扫描所有文档效率高得多。
19. 灵活查询:支持多种复杂查询,如布尔查询、短语查询和范围查询。
20. 可扩展性:适用于大规模文档集合,能够处理大量数据和高并发查询
ES和MongoDB的主要区别在于它们的设计目标、应用场景、数据存储方式以及特性。
比较名称 | es | mongoDb |
---|---|---|
数据库类型 | ES是一个基于Lucene搜索引擎构建的分布式文档存储数据库 | MongoDB是一个面向文档存储的数据库 |
数据存储方式 | ES使用分片和副本机制进行数据存储,支持分布式架构,可以扩展到数百台服务器,支持海量数据的存储和检索 | MongoDB采用分片机制进行数据存储,支持水平扩展,可以轻松地扩展到数百台服务器,支持海量数据的存储和检索 |
特性 | ES支持全文检索和近实时搜索,可以对海量数据进行复杂的搜索和分析,具有近乎实时的索引和查询能力,支持多语言处理和丰富的查询语法 | MongoDB具有面向集合存储、模式自由、动态查询、完整索引支持等特点,支持二进制数据及大型对象存储,支持复制和故障恢复,自动分片以支持云级别的伸缩性 |
数据库存储结构 | ES是一个全文搜索引擎,数据以索引方式存储,每个文档被索引,以便进行快速全文搜索 | MongoDB数据以BSON(二进制JSON)格式存储,每个文档可以包含不同的字段和数据类型 |
数据查询 | ES则提供了更强大的全文搜索和分析能力,支持全文搜索、模糊搜索、聚合、分析和自定义查询等 | MongoDB提供了类似传统SQL数据库的查询语言,可以进行灵活的查询和聚合操作 |
数据一致性 | ES则采用了分布式一致性模型,写操作在主分片上执行并复制到其他分片 | MongoDB在默认配置下采用强一致性模型,写操作在主节点上执行并复制到副本集中的所有节点 |
适用场景 | ES适用于需要进行全文搜索和实时分析的应用,比如日志分析、电商搜索和实时监控等,适合存储和搜索大量的文本数据 | MongoDB适用于大部分Web应用程序,特别是需要灵活数据模型和高度可扩展性的场景,更适合存储和查询结构化数据 |
数据可扩展性 | ES支持水平扩展,可以通过添加更多的节点来提高搜索和分析性能 | MongoDB支持水平扩展,可以通过添加更多的节点来提高处理能力和存储容量 |
注: ES和MongoDB虽然都是文档存储型数据库,但它们的设计目标、应用场景、数据存储方式以及特性有所不同。选择使用哪种数据库应根据具体需求来决定。