es的数据存储结构;近实时查询原因

这篇具有很好参考价值的文章主要介绍了es的数据存储结构;近实时查询原因。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

es存储中大体可以看成index(表) + document(行记录)组成

es支持分布式存储,一个index会产生多个分片,保存在不同的实例上。其中分为若干个主分片副分片。当主分片挂了,会切换到副分片,主分片和副分片的数据是一致的(写的时候先找主分片,读的时候是2者都可以)。这个切换的过程由es集群节点中的leader决定。如果当前的leader挂了,会选举出一个新leader

es读和写的过程(近实时查询原因)

写:客户端会选择一个node节点**(协调节点)**请求过去,然后节点会对这个document数据进行路由,转发给对应的主分片所在node上。实际处理的node处理完之后会同步到副分片所在节点。主分片和副分片都完成之后,响应客户端处理成功。

这里的写只是写到了FileSystem Cache;即es和磁盘中间的一层缓存。将数据刷到磁盘需要一个fsync操作,这个操作是比较耗时的,要是每条数据写入都同步触发,那性能太差了。

所以在es中新增的document会被收集到indexing buffer区后被重写成一个segment然后直接写入filesystem cache中,这个操作是非常轻量级的,相对耗时较少,之后经过一定的间隔或外部触发后才会被flush到磁盘上,这个操作非常耗时。但只要sengment文件被写入cache后,这个sengment就可以打开和查询,从而确保在短时间内就可以搜到,而不用执行一个full commit也就是fsync操作,这是一个非常轻量级的处理方式而且是可以高频次的被执行,而不会破坏es的性能

elasticsearch里面,这个轻量级的写入和打开一个cache中的segment的操作叫做refresh,默认情况下,es集群中的每个shard每隔1秒自动refresh一次,这就是我们为什么说es是近实时的搜索引擎而不是实时的,也就是说给索引插入一条数据后,我们需要等待1秒才能被搜到这条数据,这是es对写入和查询一个平衡的设置方式,这样设置既提升了es的索引写入效率同时也使得es能够近实时检索数据。

读(根据id读):读取数据也是先选一个node节点**(协调节点)**发请求过去,节点会把id进行hash,转发到实际的node中,然后在主分片和副分片中随机轮询进行查询。

搜索原理

搜索:es的搜索主要依靠的就是倒排索引,开始也是客户端选择一个node节点**(协调节点)**请求过去,然后转发到所有的shard分片对应的主/副分片,每个分片将搜索对应的document idscore等信息返回给一开始的协调节点,然后协调节点排序完之后根据id拿到对应的document数据再返回给客户端。

深度分页问题

分页:es的分页在深度分页下性能会很差,比如查询10000页的1000条数据,es的协调节点会从所有分片中拉取10000条到协调节点,即总数据=分片数量X10000.然后在协调节点里处理得到最后的1000条数据。文章来源地址https://www.toymoban.com/news/detail-702188.html

到了这里,关于es的数据存储结构;近实时查询原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(42)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(44)
  • 使用Logstash同步mysql数据到Elasticsearch(亲自踩坑)_将mysql中的数据导入es搜索引擎利用logstash(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月28日
    浏览(38)
  • Elasticsearch数据存储与查询

    Elasticsearch数据存储与查询 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库开发。它可以处理大量数据,提供快速、准确的搜索结果。Elasticsearch支持多种数据类型的存储和查询,如文本、数值、日期等。它还提供了强大的分析功能,如词频统计、提取等。

    2024年02月19日
    浏览(27)
  • es elasticsearch 九 索引index 定制分词器 type结构后期弃用原因 定制动态映射 动态映射模板 零停机重建索引

    目录 索引index 定制分词器 Type底层结构及弃用原因 定制 dynamic mapping 定制dynamic mapping template 动态映射模板 零停机重建索引 生产环境应该度别名数据 索引index Put /index Stings 分片 Mapping 映射 Aliases 别名 增加 Put my_index2 {        \\\"settings\\\":{           \\\"number_of_shards\\\":3,      

    2024年02月06日
    浏览(31)
  • 如何使用ElasticSearch存储和查询数据

    1. 引言 在大多数的场景里,存储数据都是用MySQL这类关系型数据库,这类数据库的特点是数据存储安全性和一致性高,可以用于事务操作,但是随着数据量的增加,查询的速度也会随之降低,并且其扩展能力有限,因此在日志记录和查询等场景下,MySQL就显得力不从心,为了

    2024年02月14日
    浏览(37)
  • Elasticsearch ES操作:查询数据(全部、分页、单条)

    查询 条件查询 指定条数 返回结果

    2024年02月16日
    浏览(26)
  • 用elasticsearch head查询和删除es数据

    下图中的构成为 http://ip:port/ 索引名/索引类型/_search 请求方式为GET 这种方式是查询该索引下的所有数据 如果要查询更为详细,可以在查询条件后面跟ID,比如 http://ip:port/ 索引名/索引类型名/文档id 请求方式仍然是GET请求 如下图所示 下图是删除指定es下某一文档,其构成为

    2024年02月15日
    浏览(39)
  • ElasticSearch内容分享(四):ES搜索引擎

    目录 ES搜索引擎 1. DSL设置查询条件 1.1 DSL查询分类 1.2 全文检索查询 1.2.1 使用场景 1.2.2 match查询 1.2.3 mulit_match查询 1.3 精准查询 1.3.1 term查询 1.3.2 range查询 1.4 地理坐标查询 1.4.1 矩形范围查询 1.4.2 附近(圆形)查询 1.5 复合查询 1.5.0 复合查询归纳 1.5.1 相关性算分 1.5.2 算分函数查

    2024年02月05日
    浏览(40)
  • ElasticSearch第十八讲 ES-Master节点职责和ES是如何做到数据实时性的

    由主节点负责ping 所有其他节点,判断是否有节点已经挂掉 创建或删除索引 决定分片在节点之间的分配 稳定的主节点对集群的健康是非常重要的。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包