自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1180)
  • 收藏
  • 关注

原创 Redis实操(20429字总结)

之前都是通过看视屏,博客,公众号的形式来学习,还是很零散的,这次买了工作以来第一本技术书《Redis深度历险:核心原理与应用实践》,先粗略读了一遍,现在用笔记的形式把重点再记录下。 2020-7.26注:List的结构中:当数据量大的时候 Redis将链表和ziplist结合起来组成了quicklist1.2.2 5种基础数据结构stringRedis的字符串是动态字符串,是可以修改的字符串,采用预分配冗余空间的方式来减少内存的频繁分配。当字符串长度小于1MB是,扩容

2020-07-26 16:23:05 1159 2

原创 从JMM数据原子操作来分析volatile

并发编程的三个性质:原子性,可见性,有序性JMM数据原子操作:volatile 进行i++操作会出问题的分析两线程同时对i做i++,线程1往内存写经过总线时被线程2感知到了,线程2做i++的操作已经做完了,然而因为感知到i变了,做i无效化重新读,所以线程2做的那次i++的操作执行了但是没起作用问题在讨论原子性操作时,我们经常会听到一个说法:任意单个volatile变量的读写具有原子性,但是volatile++这种操作除外。所以问题就是:为什么volatile++不是原子性

2020-06-24 11:01:42 362 1

原创 关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

2、此时我们可以删除一个pod,如web-2,再进行观察,可以看到,只有被删除的web-2,才会重新生成,更新到指定的版本。1、更新nginx的版本为 1.7.9 ,然后可以通过如下看到,所有pod都没有进行更新。而还有一种更新的策略为, OnDelete,即只有在 pod 被删除时会进行更新操作。3、最后,没有问题的,再依次将所有的pod进行删除,完成所有的更新。前面提到的普通的滚动更新,都是修改完sts立即就会发生更新操作。

2024-03-28 16:44:49 342

原创 elasticsearch中设置查询的请求超时时间

注意:Elasticsearch 集群实际是需要给 coordinate node 返回 shards number * (from + size) 条数据,然后在单机上进行排序,最后给客户端返回这个 size 大小的数据的。注意:这个缓存的键值要求很严格,请求的 JSON 必须一字不易,缓存才能命中。因为我们的项目是用的php,为了防止调用搜索时,请求处理时间太长,导致php-fpm占满,所以需要对外部接口设置请求的超时时间,避免过多的超时请求,我们可以用过对es的参数限制,设置超时时间。

2024-02-26 17:30:50 948

原创 Linux I/O 基本原理

(其实还有 boot block,可能会包含一些 bootstrap 代码,在机器启动的时候被读到,这里忽略)其中 inode blocks 放的都是每个文件的 inode,data blocks 里放的是每个文件的内容数据。既然 superblock 这么重要,那肯定不能只有一份,坏了就没了,它在系统中是有很多副本的,在 superblock 损坏的时候,可以使用。zfs 的写操作是事务的,意味着要么就没写,要么就写成功了,不会像其他文件系统那样,应用打开了文件,写入还没保存的时候断电,导致文件为空。

2024-02-26 17:29:59 392

原创 一文搞懂match、match_phrase与match_phrase_prefix的检索过程

用于执行全文查询的标准查询,包括模糊匹配和短语或接近查询。重要参数:控制Token之间的布尔关系:operator:or/and与match查询类似,但用于匹配确切的短语或单词接近匹配。重要参数:Token之间的位置距离:slop 参数与match_phrase查询类似,但是会对最后一个Token在倒排序索引列表中进行通配符搜索。重要参数:模糊匹配数控制:max_expansions 默认值50,最小值为1。

2024-02-22 20:49:18 660

原创 Elasticsearch Update By Query详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。索引的 Mappings 发生变更:字段类型更改,分词器及字典更新。索引的 Setting 发生变更:索引的主分片数发生改变。只能创建新的索引,并设定正确的字段类型,在重新导入数据。改变 Mapping , 增加子字段,使用英文分词器。# 修改 Mapping,增加子字段,使用英文分词器。2.2 案例二:更改已有字段类型的 Mappings。# 创建新的索引并且设定新的Mapping。

2024-02-22 16:07:29 1344

原创 elasticsearch index sorting 索引预排序

(本地测试,对某索引进行reindex操作,重索引至具有索引排序的索引,es记录的峰值写入速度约为3200/s,重索引至无索引排序的索引,es记录的峰值写入速度约为6000/s)搜索性能尚未进行大规模压测。答案是肯定的,在检索阶段:查找top k文档时,默认需要遍历所有文档才可以找到所有的相关文档,但当配置了索引排序后,如果检索排序与索引排序一致,则每个分片上只需要检索前k个文档即可,这样便可以提前结束查询,减少计算和性能损耗。索引预排序只能在索引创建时配置,中途不可以更改或添加;

2024-02-22 15:54:21 571

原创 Linux / OS X tar incompatibility – tarballs created on OS X give errors when untarred in Linux

【代码】Linux / OS X tar incompatibility – tarballs created on OS X give errors when untarred in Linux。

2024-02-22 14:49:14 374

原创 关于idea全局搜索不全的坑

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/ZyhMemory/article/details/116265194。在Registry中找到ide.usages.page.size进行修改即可,我这里修改的是10000。idea全局搜索默认只显示100个,超出显示100+,不过谁能注意到这个…在Action中输入Registry。通过设置修改一下初始大小。

2024-02-22 14:45:04 406

原创 (四)elasticsearch 源码之索引流程分析

本文简单描述了es索引流程,包括了http请求是如何解析的,如何确定分片的。但是仍有许多不足,比如没有讨论远程节点是如何处理的,lucene执行引擎的细节,后面博客会继续探讨这些课题。

2024-02-06 17:50:09 985

原创 (三)elasticsearch 源码之启动流程分析

node.start中启动各个组件。start方法会调用组件的doStart方法。es 使用 guice注入框架,guice是个非常轻量级的依赖注入框架,既然各个组件都已经注入好了,我们现在可以启动了。另一个比较重要的服务,discovery.start(),具体实现类是 Coordinator。具体的我们看两个比较重要的服务 transportService.start();简单了解下es(elasticsearch,下同),现在我们来看下启动代码。下面是启动流程图,我们按照流程图的顺序依次描述。

2024-02-06 16:26:07 936

原创 对比 elasticsearch 和 mysql

redo log采用的是WAL(Write-ahead logging,预写式日志),所有修改先写入日志,再更新到Buffer Pool,保证了数据不会因MySQL宕机而丢失,从而满足了持久性要求。doc_values,将_source 转化为表结构放在磁盘上,方便聚合,排序,或者脚本操作,默认支持除了text类型的所有类型。fielddata,如果想对text类型的字段进行聚合,排序,或者执行脚本,就必须设置fielddata属性。比如histogram aggs,terms aggs。

2024-02-06 15:44:29 1221

原创 Elasticsearch 通信模块的分析

创建一个新的Netty Server 的好处是可以实现与HttpServerTransport的解耦,把RPC 接受的逻辑和HttpServerTransport分开, 同时也可以对RPC 信息的序列化可以进一步优化。Client 在发送请求给远方的Node 的时候会把在信息的header里面标注为request 这个状态,所以这个回调函数判断到底是远方Node 发来的请求还是返回执行的结果是就是根据这个 TransportStatus.isRequest(status) 状态。

2024-02-06 15:29:31 1441

原创 (五)elasticsearch 源码之查询流程分析

上文我们讨论了es(elasticsearch,下同)索引流程,本文讨论es查询流程,以下是基本流程图本文简单描述了es是如何进行文档查询的,es会先去各个分片上获取符合查询条件的文档id等信息,然后再fetch文档内容。本文没有涉及dfs,后面博客会继续探讨这些课题。

2024-02-05 16:44:22 1046

原创 Elasticsearch内核剖析

大家都知道Elasticsearch是一个开源的分布式搜索和分析引擎,也是一种NoSQL数据库。由于Elasticsearch填补了开源领域分布式搜索引擎的空白,而且难能可贵的是,Elasticsearch提供了非常友好的操作性,上手极其容易,这些特征促使其在过去5年在市场上快速崛起。目前在开源的搜索系统中基本处于垄断地位。虽然Elasticsearch在业界快速崛起,在很多大中小型公司都有广泛的应用,但是很多都只是简单使用,最深入的也仅仅是性能调优和点对点的问题调查,很少缺乏系统性的内核探究。

2024-01-31 15:45:23 675

原创 ElasticSearch 6.x 字段类型

在ElasticSearch中,没有专门的数组(Array)数据类型,但是,在默认情况下,任意一个字段都可以包含0或多个值,这意味着每个字段默认都是数组类型,只不过,数组类型的各个元素值的数据类型必须相同。比如,某个字段的取值最大值不会超过100,那么选择byte类型即可。对于float、half_float和scaled_float,-0.0和+0.0是不同的值,使用term查询查找-0.0不会匹配+0.0,同样range查询中上边界是-0.0不会匹配+0.0,下边界是+0.0不会匹配-0.0。

2024-01-31 15:37:58 123

原创 【转】Elasticsearch干货(三):对于数值类型索引优化

本文我们了解了Elasticsearch和Lucene不同版本中对数值类型range查询的优化,我们牢记以下两点来避免不必要的缓慢查询。对于数值类型的数据,我们是要确定该字段是需要range还是term。比如id,有些情况下我们只需要对它做term查询,这种情况下使用keyword来存储会更好。如果需要使用数值类型(非keyword),并且range的结果集很大的情况下,建议升级到Elasticsearch5.4+之后版本。Elasticsearch深入理解专栏。

2024-01-31 15:23:34 156

原创 Elasticsearch高性能优化实践

第一步,先向所有的分片发请求,各分片只返回文档的相似度得分和文档的 ID,然后协调节点按照各分片返回的分数进行重新排序和排名,再取出需要返回给客户端的 Size 个文档 ID。_source 元数据:就是说,我们在创建一个 Document 的时候,使用的那个放在 Request Body 中的 Json 串(所有的 Field),默认情况下,在 Get 的时候,会原封不动的给我们返回回来。当我们进行查询操作的时候,被删除的数据还会参与检索中,然后根据 .del 文件进行过滤。

2024-01-31 14:51:58 988

原创 理解“query then fetch”和“dfs query then fetch”

为何文档“drunk”分数为1.0,而其余的分数是0.3?难道这些文档不应该是相同的分数么,因为他们都同等地匹配了“d”。答案是肯定的,但是这个分数本身也有比较合理的地方。

2024-01-31 14:45:56 734

原创 ES客户端接入方式

总结起来,Transport Client(传输客户端)是一个独立的 Java 客户端,而 Node Client(节点客户端)是通过将客户端节点加入到集群中来实现与集群通信的方式。它是通过在客户端应用程序中创建一个本地节点(Local Node)来实现的,该节点会加入集群并参与集群的协调工作。在 Elasticsearch (ES) 中,有两种常见的客户端接入方式:Transport Client(传输客户端)和 Node Client(节点客户端)。

2024-01-30 20:33:52 675

原创 让Elasticsearch飞起来!百亿级实时查询优化实战

如果你的业务遍布全国各地,四海八荒,如果你数据要存储到多个机房,如果你的 Index 有几万个甚至更多( Index 特别多,集群庞大会导致 Cluster State 信息量特别大,因为 Cluster State 包含了所有 Shard、Index、Node 等所有相关信息,它存储在每个 Node 上,这些数据发生变化都会实时同步到所有 Node 上,当这个数据很大的时候会对集群的性能造成影响)。

2024-01-30 20:31:14 936

原创 Linux如何生成指定大小的文件

记得以前做Windows开发的时候,有个API叫SetEndOfFile,可以用来将文件内部游标所在位置设为文件末尾,可以用来截取或者 扩展文件,这个函数本质上相当于直接操作文件分区表的结构,用它来作文件扩展是不需要频繁的填充文件,linux下肯定也有对应的东西,即 ftrunc/truncate这两个函数。文件系统对于这样创建的文件有特殊处理,叫稀疏文件,现在创建大文件光速了,再也不用纠结等半天了。seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。

2024-01-29 14:45:15 273

原创 Lucene 查询原理

Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何完成高效的数据检索。在数据库中因为有索引的存在,也可以支持很多高效的查询操作。不过对比lucene,数据库的查询能力还是会弱很多,本文就将探索下lucene支持哪些查询,并会重点选取几类查询分析lucene内部是如何实现的。

2024-01-29 14:39:53 1061

原创 ES 分布式搜索的运行机制

•使用 from + size 分页时,假设你只需要前 10k 条数据里的最后十条,那么每个分片也会取 10k 条数据,如果你的索引有 5 个主分片,那么汇总时就有 5 * 10k = 50k 条数据,这 50k 条数据是在内存里进行排序和最后的分页的,所以深度分页也是比较吃资源的。•当数据量没有足够大的情况下(比如搜索类型数据 20GB,日志类型数据 20-50GB),设置一个 shard 主分片是比较推荐的,只设置一个主分片,你会发现搜索时省掉好多事情。5.分片的 query 结果(只有元数据,例如。

2024-01-26 15:37:14 381

原创 ElasticSearch 开发总结(九)——SearchType:DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH

这种搜索方式,大概分两个步骤,第一步,先向所有的shard发出请求,各分片只返回排序和排名相关的信息(注意,不包括文档document),然后按照各分片返回的分数进行重新排序和排名,取前size个文档。问题1:假如集群一个节点有10个分片,词语“土豆”在分片的相关性从分片0到分片9依次降低(即分片0存储词语“土豆”相关性最大,分片9相关性最小),如果搜索词语“土豆”需要10个分片的计算;问题2:如果针对特定的分片进行搜索,因为词语“土豆”在每个分片的相关性不一致,可能返回的结果也存在偏差。

2024-01-26 15:36:36 367

原创 How to show index creation time with _cat/indices API in Elasticsearch

【代码】How to show index creation time with _cat/indices API in Elasticsearch。

2024-01-26 14:19:05 306

原创 Elasticsearch使用经验和云上竞品对比

上面介绍了 Tablestore 作为数据查询加速系统相对于 ES 系统的优势,以及一些成熟案例。ES 是一款非常优秀的开源搜索系统,短短几年时间内就把老一代开源搜索系统 Solr 远远甩在了后面,现在选型搜索系统基本就不用考虑 Solr 了,Solr已趋近淘汰边缘。当前 ES 发展重心在日志、监控、安全、企业搜索等场景方面,在数据库查询加速上的进展相对较慢,如果是数据库查询加速场景,使用 Tablestore 会相对更有优势。

2024-01-25 17:34:07 945

原创 Elasticsearch内核解析 - 查询篇

Elasticsearch中的查询流程比较简单,更多的查询原理都在Lucene中,后续我们会有针对不同请求的Lucene原理介绍性文章。

2024-01-25 17:33:36 959

原创 Elasticsearch内核解析 - 数据模型篇

在上面的介绍中,我们解释了Elasticsearch是如何通过增加系统字段来扩充Lucene的功能,开篇提出的Lucene的多个不足中,前四个都在文章中做了说明,最后一个没法通过增加系统字段实现,我们将会在下一篇《Elasticsearch写流程简介》中介绍如何通过其他方式来实现,下一篇见。另外,我们招人:Elasticsearch和Lucene的开发,有兴趣的可以私信联系我。

2024-01-25 16:24:38 1187

原创 从Elasticsearch来看分布式系统架构设计

上述两种架构,各有优势和不足,对于某些架构中的不足或缺陷,思路不同,解决的方案也大相径庭,但是思路跨度越大,收益一般也越大。上面只是介绍了分布式数据(存储/搜索/分析等等)系统在存储层的两种不同架构方式,希望能对大家有用。但是分布式系统架构设计所涉及的内容广,细节多,权衡点众,如果大家对某些领域或者方面有兴趣,也可以留言,后面再探讨。

2024-01-25 16:05:00 888

原创 Elasticsearch内核解析 - 写入篇

Elasticsearch内核解析 - 写入篇 - 知乎目前的Elasticsearch有两个明显的身份,一个是分布式搜索系统,另一个是分布式NoSQL数据库,对于这两种不同的身份,读写语义基本类似,但也有一点差异。上面简单介绍了下NoSQL数据库和搜索系统的一些异同,我们会在后面有一篇文章,专门用来介绍Elasticsearch作为NoSQL数据库时的一些局限和特点。下一篇《Elasticsearch内核解析 - 查询篇》中再详细介绍。上面大概对比了下搜索和NoSQL在写方面的特点,接下来,我们看一下El

2024-01-25 15:50:34 1235

原创 剖析Elasticsearch的IndexSorting:一种查询性能优化利器

前两周写过一篇《基于Lucene查询原理分析Elasticsearch的性能》,在最后留了一个彩蛋,说下一篇会介绍一种可以极大的优化查询性能的技术。本文就来介绍这种技术——IndexSorting。因为IndexSorting是在ES6.0之后才作为实验性的功能加入,相关的介绍资料还比较少,所以大部分人对它不够了解。另一方面是,想要理解它为什么能够优化性能、适合哪些场景、内部如何实现、有何副作用等,也需要花一翻功夫。所以本文专门对IndexSorting进行一个介绍,并分析它的作用、实现、适用场景等。

2024-01-25 15:03:32 1256

原创 sed 原地替换文件时遇到的趣事

哈喽大家好,我是咸鱼在文章《》中咸鱼向大家介绍了文本三剑客中的 sedsed 全名叫,流编辑器,用程序的方式来编辑文本那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事。

2024-01-25 15:02:44 355

原创 基于Lucene查询原理分析Elasticsearch的性能

Elasticsearch是一个很火的分布式搜索系统,提供了非常强大而且易用的查询和分析能力,包括全文索引、模糊查询、多条件组合查询、地理位置查询等等,而且具有一定的分析聚合能力。因为其查询场景非常丰富,所以如果泛泛的分析其查询性能是一个非常复杂的事情,而且除了场景之外,还有很多影响因素,包括机型、参数配置、集群规模等等。本文主要是针对几种主要的查询场景,从查询原理的角度分析这个场景下的查询开销,并给出一个大概的性能数字,供大家参考。

2024-01-24 17:27:14 707

原创 Elasticsearch中的数值类型索引

最近杂七杂八的事情比较多,好久没更新文章了🤦‍♀️,今天就好好来理一理之前没搞清楚的关于ES数值索引的问题。ES主要是用于解决文本检索的场景,ES会默认将所有的输入内容当作字符串来理解,对于字段类型是keyword或者text的数据比较友好。但是如果输入的类型是数字,ES还会把数字当作字符串吗?排序问题还有范围查询问题怎么解决呢?本文我们了解了Elasticsearch和Lucene不同版本中对数值类型range查询的优化,我们牢记以下两点来避免不必要的缓慢查询。

2024-01-24 16:36:13 621

原创 Lucene 源码分析——BKD-Tree

本篇文件介绍了Bkd-Tree在Lucene中的实现,即生成满二叉树的过程,再以后介绍索引文件.dii、.dim中会继续讲一些细节的东西。另外在随后的文章中会介绍Bkd-Tree插入和更新的内容。

2024-01-24 16:14:09 851

原创 Elasticsearch分布式一致性原理剖析(三)-Data篇

Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。前两篇文章介绍了ES中集群如何组成,master选举算法,master更新meta的流程等,并分析了选举、Meta更新中的一致性问题。本文会分析ES中的数据流,包括其写入流程、算法模型PacificA、SequenceNumber与Checkpoint等,并比较ES的实现与标准PacificA算法的异同。问题背景数据写入流程。

2024-01-23 20:36:17 1356

原创 Elasticsearch分布式一致性原理剖析(二)-Meta篇

Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。前一篇的内容包括了ES的集群组成、节点发现与Master选举、错误检测与集群扩缩容等。本篇将在前一篇的基础上,重点分析ES中meta更新的一致性问题,为了便于读者理解 ,本文还介绍了Master管理集群的方式、meta组成、存储方式等等。Master如何管理集群Meta组成、存储和恢复ClusterState的更新流程。

2024-01-23 19:35:57 1558

原创 Elasticsearch分布式一致性原理剖析(一)-节点篇

Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。ES目前是最流行的分布式搜索引擎系统,其使用Lucene作为单机存储引擎并提供强大的搜索查询能力。学习其搜索原理,则必须了解Lucene,而学习ES的架构,就必须了解其分布式如何实现,而一致性是分布式系统的核心之一。本篇将介绍ES的集群组成、节点发现与Master选举,错误检测与扩缩容相关的内容。

2024-01-23 17:54:10 1238

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除