IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch的索引机制分析 -> 正文阅读

[大数据]Elasticsearch的索引机制分析

Elasticsearch一个开源的搜索搜索和分析引擎,具有存储和分析一体的非sql的文档搜索引擎。

新型的索引方式

Elasticsearch用于文档型数据的搜索,用于文档型数据的查询和分析。如果将直接将文档id绑定到关键词的正排的索引结构的k-v结构,在互联网中海量数据的使用,会产生大量的索引,占用巨大内存空间空间,降低索引的性能。
Elasticsearch摒弃了传统的结构化的数据库或者兴起的k-v结构,而采用v-k倒排索引。
什么是倒排索引?
倒排索引是Elasticsearch将文档内具有关键字的一系列文档id,与关键字形成新的k-v结构,即一个关键字对应一系列的文档id,再将其作为索引保存起来。通过这个关键字查询时,可以迅速地查询到相关的文档。
在这里插入图片描述
这种方式的好处兼顾了查询的性能和存储,大大减少了索引空间,提升性能。

索引的更新

比起数据库,动不动加锁的机制,Elasticsearch使用的索引采用的是不变的机制,好处在于:
不变的好处在于:

不需要锁。如果你从来不更新索引,你就不需要担心多进程同时修改数据的问题。
一旦索引被读入内核的文件系统缓存,便会留在哪里,由于其不变性。只要文件系统缓存中还有足够
的空间,那么大部分读请求会直接请求内存,而不会命中磁盘。这提供了很大的性能提升。
其它缓存(像 filter 缓存),在索引的生命周期内始终有效。它们不需要在每次数据改变时被重建,因为
数据不会变化。
写入单个大的倒排索引允许数据被压缩,减少磁盘 I/O 和 需要被缓存到内存的索引的使用量。

坏处在于

当然,一个不变的索引也有不好的地方。主要事实是它是不可变的! 你不能修改它。如
果你需要让一个新的文档 可被搜索,你需要重建整个索引。这要么对一个索引所能包含的
数据量造成了很大的限制,要么对索引可被更新的频率造成了很大的限制。

用更多的索引打败更新
Elasticsearch引入了版本的概念。Elasticsearch更新数据的方式,是建立新的索引作为补充。一个索引作为一个段,这是按段搜索更新的概念。Elasticsearch在查询合并后,根据版本号先后,自动过滤老版本的数据。即使删除了的数据,也只是在后缀加上.del,在查询匹配时可能被查询到,但返回结果就会被过滤掉。
当然,对于Es存在过多的段,es会在一段时间后进行将小段合并到大段,删除旧段。

近实时的搜索引擎

Elasticsearch的更新是不会立即提交到磁盘上的,相反Elasticsearch提供了一套缓存机制
在这里插入图片描述
每次的更新如果都要写入磁盘的话,将耗费很多时间,也会极大的降低磁盘的性能,因此Elasticsearch采用多缓存的机制。新建立的段不会立即写入磁盘,而是先保存到文件系统缓存和translog中,保存到文件系统缓存行为被称为refresh,refresh的数据是可见的,可以被查询到。在此之前保存的数据不可以被索引到,因此这也是Elasticsearch被成为近实时的原因。
fresh是从缓存将数据刷写到磁盘中,为了避免提交失败Elasticsearch提供了translog的机制,translog记录了索引的变动行为。分片每30分钟实行fresh一次,或者在translog满了,也会进行一次fresh。

#设置refresh的机制
{
 "settings": {
 "refresh_interval": "30s" 
 } }

如果建立大的索引,可以先建立新的索引,关闭自动更新,节约系统资源

# 关闭自动刷新
PUT /users/_settings
{ "refresh_interval": -1 } 
# 每一秒刷新
PUT /users/_settings
{ "refresh_interval": "1s" }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:48:52  更:2021-08-16 11:51:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:23:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码