oscache

es 写入数据的工作原理是什么?

99封情书 提交于 2020-08-14 07:31:12
面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es 读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。

【性能篇】关于Java性能调优你了解吗

 ̄綄美尐妖づ 提交于 2020-08-12 06:54:52
关于Java性能调优分为两方面的优化,一方面是针对Java虚拟机内存的调优,一方面是数据库DB的调优。 今天我们主要讲解Java虚拟机内存的调优,在实际开发中,几乎不可能通过单纯的调优来达到消除GC的目的,我们所做的内存调优只是尽可能的去减少内存消耗,进一步减少因为内存不足而影响Java程序性能。就如同我们手机内存一样,当内存不够的时候,用起来程序就特别的不顺畅导致用户体验极差,我们所能做的就是及时清理内存~ 养成良好的编码习惯能很大程度提高性能问题,以下是本人这几年的开发总结: 1.尽量缓存经常使用的对象 尽可能将经常使用的对象进行缓存,可以使用数组,或HashMap的容器来进行缓存,但这种方式可能导致系统占用过多的缓存,性能下降,推荐可以使用一些第三方的开源工具,如EhCache,Oscache进行缓存,他们基本都实现了FIFO/FLU等缓存算法。 2.尽量重用对象 之前有讲过,在String对象的使用中,出现字符串连接情况时应使用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理。因此生成过多的对象将会给程序的性能带来很大的影响。 3.做IO流操作的时候,在使用完毕后,及时colse以释放资源,以免造成内存泄漏,因为对这些大对象的操作会造成系统大的开销。 4. 过分的创建对象会消耗系统的大量内存 ,严重时

Elasticsearch系列---shard内部原理

醉酒当歌 提交于 2020-08-12 04:49:11
概要 本篇我们来看看shard内部的一些操作原理,了解一下人家是怎么玩的。 倒排索引 倒排索引的结构,是非常适合用来做搜索的,Elasticsearch会为索引的每个index为analyzed的字段建立倒排索引。 基本结构 倒排索引包含以下几个部分: 某个关键词的doc list 某个关键词的所有doc的数量IDF(inverse document frequency) 某个关键词在每个doc中出现的次数:TF(term frequency) 某个关键词在这个doc中的次序 每个doc的长度:length norm 某个关键词的所有doc的平均长度 记录这些信息,就是为了方便搜索的效率和_score分值的计算。 不可变性 倒排索引写入磁盘后就是不可变的,这样有几个好处: 不需要锁,如果不更新索引,不用担心锁的问题,可以支持较高的并发能力 如果cache内存足够,不更新索引的话,索引可以一直保存在os cache中,可以提升IO性能。 如果数据不变,filter cache会一直驻留在内存。 索引数据可以压缩,节省cpu和io开销。 doc底层原理 前面提到倒排索引是基于不可变模式设计的,但实际Elasticsearch源源不断地有新数据进来,那光是建立、删除倒排索引,岂不是非常忙? 如果真是不停地建立,删除倒排索引,那ES压力也太大了,肯定不是这么实现的

深入分析ES存储原理

[亡魂溺海] 提交于 2020-08-11 10:05:36
es写数据 es写数据的过程 1、 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。 2、 coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。 3、 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node。 4、 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。 1、客户端发送请求到任意一个 node,成为 coordinate node。 2、coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。 3、接收请求的 node 返回 document 给 coordinate node。 4、coordinate node 返回 document

2020最新MongoDB规范

走远了吗. 提交于 2020-08-09 14:41:57
前言 MongoDB是非关系型数据库的典型代表,DB-Engines Ranking 数据显示,近年来,MongoDB在 NoSQL领域一直独占鳌头。MongoDB是为快速开发互联网应用 而设计的数据库系统,其数据模型和持 久化策略就是为了构建高读/写的性能,并且可以方面的弹性拓展。随着MongoDB的普及和使用量的快 速增长,为了规范使用,便于管理和获取更高的性能,整理此文档。我们从 数据库设计规范、集合设计 规范、索引设计规范、文档设计规范、API使用规范、连接规范等方面进行阐述和要求。 存储选型 主要解决大量数据的访问效率问题, 减少mysql 压力。MongoDB内建了多种数据分片的特性,可 以很好的适应大数据量的需求。内建的Sharding分片特性避免系统在数据增长的过程中遇到性能 瓶颈。 复杂数据结构,以多种不同查询条件去查询同一份数据。MongoDB的BSON数据格式非常适合文 档化格式的存储及查询;支持丰富的查询表达式,可轻易查询文档中内嵌的对象和数组及子文档。 非事务并且关联性集合不强的都可以使用(MongoDB4.0+支持跨Collection事务,MongoDB4.2+支持跨Shard事务) 无多文档事务性需求及复杂关联检索 业务快速迭代,需求频繁变动业务 数据模型不固定,存储格式灵活场景 单集群读写并发过大无法支撑业务增长 期望 5 个 9

Elasticsearch系列---相关性评分算法及正排索引

倾然丶 夕夏残阳落幕 提交于 2020-08-05 21:20:06
概要 上一篇中多次提到了按相关性评分,本篇我们就来简单了解一下相关性评分的算法,以及正排索引排序的优势。 评分算法 Elasticsearch进行全文搜索时,Boolean Model是匹配的基础,先用boolean model将匹配的文档挑选出来,然后再运用评分函数计算相关度,参与的函数如我们提到的TF/IDF、Length Norm等,再加上一些控制权重的参数设置,得到最后的评分。 Boolean Model 作为全文搜索的基础,Boolean Model的结果决定文档是否要进行下一步的评分操作,使用AND、OR、NOT这种逻辑操作符来判断查找的文档,整个过程不评分,非常快速地将匹配的文档筛选出来。 由于Elastisearch各个版本相关度评分算法有异同,我们以6.3.1版本的BM25算法为准。 TFNORM/IDF 由Boolean Model之后得到的文档,我们开始计算文档的评分,每个文档的评分取决于每个关键词在文档中的权重,权重我们会从以下几个方面考虑: TFNORM 即词频长度(Term Frequency Norm),单个term在文档中出现的频率,并结合字段长度,出现次数越高,字段长度越低,分越高,计算公式: tfNorm(t in d) = (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength /

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

ぐ巨炮叔叔 提交于 2020-07-29 03:46:05
面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es-write es 读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard

ElasticSearch写入数据的工作原理是什么?

≡放荡痞女 提交于 2020-04-17 03:49:09
【推荐阅读】微服务还能火多久?>>> 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es 读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去

架构师之路(五)之InnoDB架构

亡梦爱人 提交于 2020-02-26 14:22:32
网上写MySQL架构的文章比较多,写InnoDB架构的文章比较少,今天简单说说InnoDB架构。 MySQL简要架构是怎么样的? MySQL整体分为三层: (1) 客户端 ,是各种编程语言的 connector ; (2) MySQL服务 ,内部包含各种 组件 ,实现各种 功能 ; (3) 文件系统 , 数据存储与日志 ; 其中,MySQL服务内, 可以以插件的形式,实现各种存储引擎 。 在InnoDB,MyISAM,Memory…等各种存储引擎中, InnoDB是使用范围最广的 。 画外音: 事务,行锁,聚集索引,MVCC…众多特性让InnoDB备受青睐。 InnoDB简要架构是怎么样的? InnoDB整体也分为三层: (1) 内存结构 (In-Memory Structure) ,这一层在MySQL服务进程内; (2) OS Cache ,这一层属于内核态内存; (3) 磁盘结构 (On-Disk Structure) ,这一层在文件系统上; 这三层的交互有两类: (1)通过OS Cache落地数据(上图中,两个短箭头); (2)直接O_Direct落地数据(长途中,长箭头); 画外音: 这是一个性能与一致性折衷的设计。 InnoDB内存结构包含哪些核心组件? InnoDB内存结构包含 四大核心组件 ,分别是: (1) 缓冲池 (Buffer Pool) ; (2) 写缓冲

谁再问elasticsearch集群Red怎么办?把这篇笔记给他

人盡茶涼 提交于 2020-01-08 10:16:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 可能你经历过这些Red. 。。。等等 那ES的Red是神么意思? 这里说的red,是指es集群的状态,一共有三种,green、red、yellow。具体含义: 冷静分析 从上图可知,集群red是由于有主分片不可用,这种情况一般是由于节点宕机。 有什么影响呢? 至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。 此时我们可以执行相关的命令进行状态检查。 集群节点是否都存在、查看集群状态。 curl -uelastic:pwd -XGET "http://ip:9200/_cluster/health?pretty" active_shards 是涵盖了所有索引的所有分片的汇总值,其中包括副本分片。 relocating_shards 显示当前正在从一个节点迁往其他节点的分片的数量。通常来说应该是 0,不过在 Elasticsearch 发现集群不太均衡时,该值会上涨。比如说:添加了一个新节点,或者下线了一个节点。 initializing_shards 显示的是刚刚创建的分片的个数。比如,当你刚创建第一个索引,分片都会短暂的处于 initializing 状态,分片不应该长期停留在 initializing 状态