- 博客(278)
- 收藏
- 关注
原创 JVM 垃圾回收日志 与 算法深度解读
GC的时机在分代模型的基础上,GC从时机上分为两种:Scavenge GC 和 Full GCScavenge GC (Mionr GC)触发时机:新对象生成时,Eden空间满了理论上Eden区大多数对象会在Scavenge GC 回收,复制算法的执行效率会很高,Scavenge GC时间比较短Full GC整个jvm进行整理,包括Young、old和perm主要触发时机:ol...
2020-03-14 21:25:51
227
原创 JVM 内存区域的划分以及作用详解
什么叫运行时数据区呢,看下图就知道了,今天的重点就围绕这张图讲。 1、程序计数器(寄存器) 当前线程所执行的字节码行号指示器 字节码解释器工作依赖计数器控制完成 通过执行线程行号记录,让线程轮流切换各条线程之间计数器互不影响 线程私有,生命周期与线程相同,随JVM启动而生,JVM关闭而死 线程执行Java方法时,记录其正在执行的虚拟...
2020-03-14 15:13:32
277
原创 JVM CMS收集器
CMS收集器CMS收集器,以获取最短回收停顿时间为目标,多数应用于互联网站或者B/S系统的服务器端上。 CMS是基于“标记-清除” 算法实现的,整个过程分为4个步骤 1)初始标记 (CMS initial mark) 2)并发标记(CMS concurrent mark) 3)重新标记(CMS remark) 4)并发清除(CMS con...
2020-03-14 15:06:09
368
原创 28.Elasticsearch的底层模块深入解析之gateway
gateway,elasticsearch底层的一个module,这个module,你也可以认为是什么呢?认为是es代码中的一个模块gateway这个模块是负责干什么的,module,java,j2ee,java web,用户管理模块,订单管理模块。。。用户管理模块,就是类似一个module,是用来管理用户信息的elasticsearch底层模块,英文,module,类似用户管理模块,订单...
2020-03-13 11:12:31
3789
原创 27.Elasticsearch的底层模块深入解析之shard allocation
1、shard allocation的介绍两种node:master node,data nodemaster node的一个很重要的功能,比如说,你现在创建了一个索引,然后这个索引是不是有很多的shard,可能你自己指定了几个primary shard,每个primary shard还有一些replica shard。master node,其实就是决定哪些shard分配给哪些node,...
2020-03-13 10:48:42
1952
原创 26.Elasticsearch生产集群中的索引管理(五)
1、mergees里的一个shard,就是一个lucene index,每个lucene index都是由多个segment file组成的。segment file负责存储所有的document数据,而且segment file是不可变的。一些小的segment file会被merge成一个大的segment file,这样可以保证segment file数量不会膨胀太多,而且可以将删除的数...
2020-03-13 09:47:11
142
原创 25.Elasticsearch生产集群中的索引管理(四)
1、circuit breakeres有很多的断路器,也就是circuit breaker,可以用来阻止各种操作导致OOM内存溢出。每个断路器都有一个限制,就是最多可以使用多少内存。此外,还有一个父断路器指定了所有断路器最多可以使用多少内存。(1)父短路器indices.breaker.total.limit,可以配置父短路器的最大内存限制,默认是jvm heap内存的70%(2)...
2020-03-13 09:27:13
462
原创 24.Elasticsearch生产集群中的索引管理(三)
1、indice statindice stat对index上发生的不同类型的操作都提供了统计。这个api提供了index level的统计信息,不过大多数统计信息也可以从node level获取。curl -H "Content-Type:application/json" -XGET 'http://elasticsearch02:9200/twitter/_stats?pretty...
2020-03-12 14:04:31
181
原创 23.Elasticsearch生产集群中的索引管理(二)
1、mapping管理下面这个命令是在创建索引curl -H "Content-Type:application/json" -XPUT 'http://elasticsearch02:9200/twitter?pretty' -d ' { "mappings": { "properties": { "message": { "t...
2020-03-12 11:26:47
173
原创 22.Elasticsearch生产集群中的索引管理(一)
1、创建索引(1)创建索引的语法用settings给这个索引在创建时可以添加一些设置,还有可以初始化一些type的mappingcurl -H "Content-Type:application/json" -XPUT 'http://elasticsearch02:9200/twitter?pretty' -d '{ "settings" : { "ind...
2020-03-12 11:04:02
293
原创 JVM 垃圾回收算法与垃圾收集器介绍
垃圾判断算法引用计数算法(Reference counting)给对象添加一个引用计数器,当有一个地方引用它,计数器加1,当引用失效,计数器减1,任何时刻计数器为0的对象就是不可能在被使用 引用计数算法无法解决对象循环引用的问题 2. 根搜素算法(GC Roots Tracing)在实际的生产语言中,都是使用根搜索算法判定对象是否存活 算法基本思路就是通过一系列...
2020-03-09 20:36:43
279
原创 21.Elasticsearch生产集群部署之重要的操作系统设置
1、系统的重要配置理想情况下,es应该单独在一个服务器上运行,能够使用服务器上的所有资源。为了达到上述目标,我们需要配置操作系统,来允许用户运行es并且获取比默认情况下更多的资源。在生产环境中下面的一些设置必须配置一下:(1)禁止swapping(2)确保拥有足够的虚拟内存(3)确保拥有足够的线程数量开发模式 vs 生产模式默认情况下,es会假设你是在开发模式下运行的。如果...
2020-03-05 13:12:38
251
原创 20.Elasticsearch生产集群部署之jvm和服务器内存分配的最佳实践以及原理分析
除了之前讲解的一些配置,根据你的集群环境特殊的配置,我们这一讲来讲解最重要的内存的分配,提出一些问题,生产环境部署es,不可避免要回答一个问题,比如我的机器上有64G的内存,或者32G的内存,那么一般来说我应该分配多少个G的内存给es的jvm heap1、jvm heap分配es默认会给jvm heap分配2个G的大小,对于几乎所有的生产环境来说,这个内存都太小了。如果用这个默认的heap...
2020-03-05 12:31:08
634
原创 19.Elasticsearch生产集群部署之绝对不能随意调节jvm和thread pool的原因
es中有很多的配置都让大家忍不住去调优,因为也许大家都太过于迷恋性能优化了,都认为优化一些配置可以大幅度提升性能,就感觉性能调优像个魔法一样,是个万能的东西。但是其实99.99%的情况下,对于es来说,大部分的参数都保留为默认的就可以了。因为这些参数经常被滥用和错误的调节,继而导致严重的稳定性问题以及性能的急剧下降。1、jvm gcjvm使用垃圾回收器来释放掉不用的内存,千万不要去调节默认...
2020-03-05 12:08:48
162
原创 18.Elasticsearch生产集群部署之针对集群重启时的shard恢复耗时过长问题定制的重要参数
shard recovery配置以及集群重启时的无意义shard重分配问题在集群重启的时候,有一些配置会影响shard恢复的过程。首先,我们需要理解默认配置下,shard恢复过程会发生什么事情。如果我们有10个node,每个node都有一个shard,可能是primary shard或者replica shard,你有一个index,有5个primary shard,每个primary sha...
2020-03-05 11:50:37
360
原创 16.Elasticsearch生产集群部署之必须根据自己的集群设置的一些重要参数
1、es的默认参数es的默认参数是非常好的,适合绝大多数的情况,尤其是一些性能相关的配置。因此刚开始部署一个生产环境下的es集群时,几乎所有的配置参数都可以用默认的设置。比如mysql或者oracle这种关系型数据库,也许是需要非常重的调优,但是es是真的不用。如果我们现在面临着一些es的性能问题,通常建议的解决方案是更好的进行数据结构的布局,或者增加更多的节点和机器资源。在es的性能调优...
2020-03-03 21:56:56
344
原创 9.熟练掌握ES Java API基于search template实现按品牌分页查询模板
搜索模板的功能,java api怎么去调用一个搜索模板page_query_by_brand.mustache{ "from": {{from}}, "size": {{size}}, "query": { "match": { "brand.keyword": "{{brand}}" } }}SearchResponse...
2020-03-02 17:37:38
236
原创 8.熟练掌握ES Java API基于maget实现多辆汽车的配置与价格对比
mget,一次性将多个document的数据查询出来,放在一起显示PUT /car_shop/cars/2{ "brand": "奔驰", "name": "奔驰C200", "price": 350000, "produce_date": "2018-01-05"}Settings settings = Settings.builder() ...
2020-03-02 17:37:08
372
原创 7.熟练掌握ES Java API基于upsert实现汽车最新价格的调整
做一个汽车零售数据的mapping,我们要做的第一份数据,其实汽车信息PUT /car_shop{ "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "cars": { "properties": { "brand"...
2020-03-02 17:36:22
435
原创 6.熟练掌握ES Java API_client集群自动探查
、client集群自动探查默认情况下,是根据我们手动指定的所有节点,一次轮询这些节点,来发送各种请求的,如下面的代码,我们可以手动为client指定多个节点 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocket...
2020-03-02 17:13:03
249
原创 5.进阶之使用动态映射模板定制自己的映射策略
我们本来没有某个type,或者没有某个field,但是希望在插入数据的时候,es自动为我们做一个识别,动态映射出这个type的mapping,包括每个field的数据类型,一般用的动态映射,dynamic mappingdynamic mapping这里有个问题,如果说,我们其实对dynamic mapping有一些自己独特的需求,比如说,es默认来说,如经过识别到一个数字,field: ...
2020-03-02 17:01:04
225
原创 4.进阶之基于completion suggest实现搜索提示
不用你把所有你想要输入的文本都输入完,搜索引擎会自动提示你可能是想要搜索的那个文本1.创建索引PUT /news_website{ "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "news": { "properties...
2020-03-02 16:46:18
365
原创 3.进阶之使用search template将搜索模板化
搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,就直接调用模板,给传入一些参数就可以了1、search template入门GET /blog_website/blogs/_search/template{ "source": { "query": { "match": { ...
2020-03-02 16:21:20
1186
原创 2.进阶之深入剖析搜索结果的highlight高亮显示
、一个基本的高亮例子PUT /blog_website{ "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "blogs": { "properties": { "title": { "type": "...
2020-03-02 10:27:02
536
原创 1.进阶之基于term vector深入探查数据的情况
1、term vector介绍获取document中的某个field内的各个term的统计信息term information: term frequency in the field, term positions,start and end offsets, term payloadsterm statistics: 设置term_statistics=true; total term...
2020-03-02 10:02:59
396
原创 35.数据建模实战之通过数据冗余实现用户与博客的关联
1、构造冗余的用户和博客数据第二种建模方式:用冗余数据,采用文档数据模型,进行数据建模,实现用户和博客的关联PUT /website/users/1{ "name": "小鱼儿", "email": "xiaoyuer@sina.com", "birthday": "1980-01-01"}PUT /website/blogs/...
2020-03-02 09:51:58
222
原创 34.数据建模实战之通过应用层join实现用户与博客的关联
1、构造用户与博客数据在构造数据模型的时候,还是将有关联关系的数据,然后分割为不同的实体,类似于关系型数据库中的模型案例背景:博客网站, 我们会模拟各种用户发表各种博客,然后针对用户和博客之间的关系进行数据建模,同时针对建模好的数据执行各种搜索/聚合的操作PUT /website/users/1{ "name": "小鱼儿", "email": "xiaoyuer@s...
2020-03-01 18:40:02
412
原创 33.数据建模实战之关系型数据库与document类型数据模型对比
关系型数据库的数据模型es的document数据模型public class Department { private Integer deptId; private String name; private String desc; private List<Employee> employees;}public cla...
2020-03-01 16:49:18
244
原创 32.聚合数据分析之海量bucket优化机制:从深度优先到广度优先
当buckets数量特别多的时候,深度优先和广度优先的原理我们的数据,是每个演员的每个电影的评论每个演员的评论的数量 --> 每个演员的每个电影的评论的数量评论数量排名前10个的演员 --> 每个演员的电影取到评论数量排名前5的电影{ "aggs" : { "actors" : { "terms" : { "field"...
2020-03-01 16:46:14
228
原创 31.聚合数据分析之fielddata预加载机制以及序号标记预加载
如果真的要对分词的field执行聚合,那么每次都在query-time现场生产fielddata并加载到内存中来,速度可能会比较慢我们是不是可以预先生成加载fielddata到内存中来???1、fielddata预加载POST /test_index/_mapping/test_type{ "properties": { "test_field": { ...
2020-03-01 11:33:39
151
原创 30.聚合数据分析之fielddata filter的细粒度内存加载控制
POST /test_index/_mapping/my_type{ "properties": { "my_field": { "type": "text", "fielddata": { "filter": { "frequency": { "min": 0.01,...
2020-03-01 11:32:30
168
原创 29.聚合数据分析之fielddata内存控制以及circuit breaker短路器
1、fielddata核心原理fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的一个index的一个field,所有doc都会被加载,而不是少数doc不是index-time创建,是query-time创建2、fielddata内存限制indices.fielddata.cache.size...
2020-03-01 11:31:29
227
原创 28.聚合数据分析之string field聚合实验以及fielddata原理初探
1、对于分词的field执行aggregation,发现报错。。。GET /test_index/test_type/_search { "aggs": { "group_by_test_field": { "terms": { "field": "test_field" } } }}{ "error...
2020-03-01 11:30:06
298
原创 27.聚合数据分析之doc value机制内核级原理深入探秘
1、doc value原理(1)index-time生成PUT/POST的时候,就会生成doc value数据,也就是正排索引(2)核心原理与倒排索引类似正排索引,也会写入磁盘文件中,然后呢,os cache先进行缓存,以提升访问doc value正排索引的性能如果os cache内存大小不足够放得下整个正排索引,doc value,就会将doc value的数据写入磁盘文件中...
2020-03-01 11:27:47
238
原创 26.聚合数据分析之基于doc value正排索引的聚合内部原理
聚合分析的内部原理是什么????aggs,term,metric avg max,执行一个聚合操作的时候,内部原理是怎样的呢?用了什么样的数据结构去执行聚合?是不是用的倒排索引?搜索+聚合,写个示例GET /test_index/test_type/_search { "query": { "match": { "search_fi...
2020-03-01 11:26:57
210
原创 24.聚合数据分析值易并行聚合算法、三角选择原则、近似聚合算法
1、画图讲解易并行聚合算法:max易并行算法.png有些聚合分析的算法,是很容易就可以并行的,比如说max有些聚合分析的算法,是不好并行的,比如说,count(distinct),并不是说,在每个node上,直接就出一些distinct value,就可以的,因为数据可能会很多不易并行的算法.pnges会采取近似聚合的方式,就是采用在每个node上进行...
2020-03-01 11:16:03
307
原创 21.用function score自定义相关度分数算法
我们可以做到自定义一个function_score函数,自己将某个field的值,跟es内置算出来的分数进行运算,然后由自己指定的field来进行分数的增强给所有的帖子数据增加follower数量POST /forum/article/_bulk{ "update": { "_id": "1"} }{ "doc" : {"follower_num" : 5} }{ "upda...
2020-02-29 13:55:16
281
原创 20.四种常见的相关度分数优化方法
1、query-time boostGET /forum/article/_search{ "query": { "bool": { "should": [ { "match": { "title": { "query": "java spark", ...
2020-02-29 13:36:14
366
原创 19.Lucenne的相关度分数算法
1.lucene practical scoring functionpractical scoring function,来计算一个query对一个doc的分数的公式,该函数会使用一个公式来计算score(q,d) = queryNorm(q) · coord(q,d) · ∑ ( ...
2020-02-29 13:28:34
152
原创 55.内核原理探秘_最后优化写入流程实现海量磁盘文件合并(segment merge,optimize)
每秒一个segment file,文件过多,而且每次search都要搜索所有的segment,很耗时默认会在后台执行segment merge操作,在merge的时候,被标记为deleted的document也会被彻底物理删除每次merge操作的执行流程(1)选择一些有相似大小的segment,merge成一个大的segment(2)将新的segment flush到磁盘上去(3)写...
2020-02-27 17:14:24
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅