自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Dubbo服务调用过程 笔记

前面消费者提到过代理对象是通过JavassistProxyFactory 动态生成的,所以当调用sayHelloService.sayHello(name);时,实际上是调用proxy里面的返回的 InvokerInvocationHandler包装过的,基于前面已经包装过的directory,现在就是 InvokerInvocationHandler (MockClust...

2020-03-11 11:31:49 405

原创 Dubbo消费者启动过程 笔记

dubbo源码需要先了解dubbo的SPI机制,官网说明如下http://dubbo.apache.org/zh-cn/docs/source_code_guide/dubbo-spi.html入口 ReferenceBean的afterPropertiesSet(),跳过前面一些检查直接看getObject() if (this.shouldInit()) { ...

2020-03-10 18:49:14 583

原创 Dubbo生产者启动过程 笔记

dubbo源码需要先了解dubbo的SPI机制,官网说明如下http://dubbo.apache.org/zh-cn/docs/source_code_guide/dubbo-spi.htmlspring有个配置接口叫NamespaceHandlerResolver用于实现spring自己的SPI功能,有一个实现类DefaultNamespaceHandlerResolver,会在Spr...

2020-03-10 13:56:51 768

原创 Windows Anaconda使用Sentence-BERT获取句子向量

Anaconda是一个流行的Python数据科学平台,它包含了许多科学计算和数据分析的库,包括和。虽然不是必需的,但使用Anaconda可以简化环境管理和依赖安装的过程。可以从下载并安装Anaconda。为了避免不同项目之间的依赖冲突,建议为每个项目创建一个独立的虚拟环境。在虚拟环境中,通过pip安装和默认情况下,pip会从 pypi 的官方服务器下载包,这可能会因为网络问题导致速度较慢。可以切换到国内的镜像源来加速下载。

2025-04-08 20:32:37 372

原创 es分页边界数据重复问题处理

上述方案都可以解决翻页数据重复的问题,由于是c端查询,随着用户数量凉的增加,使用快照方式会导致服务器内存紧张,遂放弃2和3,如果在业务能够容忍新数据暂时查询不出来,可以使用1方案来解决。使用es提供的Scroll,基于初始搜索时刻的固定快照,内存较高,需维护完整的搜索上下文,需要手动管理(clear-scroll)以避免内存泄漏,适用于数据导出、批量处理。使用es提供的Point in time,提供基于创建时刻的数据快照,自动过期释放资源,,会占用内存,占用内存较低,适用于实时搜索、分页浏览。

2025-04-02 20:29:31 377

原创 es自定义ik分词器中文词库实现热更新

2.6、在es的config下面创建analysis-ik目录,{es-path}\config\analysis-ik。2.8、编辑 IKAnalyzer.cfg.xml,将web服务中的数据接口地址填进去。2.4、在es插件目录下新建ik目录,{es-path}\plugins\ik。2.7、将ik目录下config里面的文件拷贝到analysis-ik目录中。经过测试ik读取web地址的频率是每分钟一次,暂时没找到强制刷新的方法。索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效。

2025-04-02 17:41:17 609

原创 es 第28节-深入掌握集群组建与集群设置

到这里就完成了3个节点的es集群配置,由于es的弹性扩展,当我们的集群资源不足时,可以动态的添加节点,es会自动帮助我们平衡节点上的数据,利用这个自动平衡节点数据的特性,我们可以很方便的做机房迁移,只要在新机房把节点部署起来并连接上集群,待数据都分配到新节点上后,可以依次关闭老机房的节点,但是自动平衡数据也有缺点,如果单个节点上的数据过大,集群间的网络带宽可能会被打满。# 1:有很多参数调节的设置,无需在集群启动之前设置,可以在集群启动之后,依据实际需求动态调整,即刻生效。大规模无需超过100。

2025-04-01 22:23:38 970 1

原创 Java使用Californium 实现CoAP协议交互代码案例

CoAP(Constrained Application Protocol)是一种专为资源受限设备设计的互联网协议,特别是在物联网(IoT)环境中。它旨在允许这些设备在低功耗、低带宽和不稳定的网络连接条件下进行通信。CoAP协议基于REST架构风格,类似于HTTP,但针对的是更小、更简单的设备。CoAP非常适合用于智能家居、智能城市以及其他需要大量小型传感器和执行器相互通讯的场景。由于其高效性和适应性,使得即使是资源极为有限的设备也能参与到更大的网络和服务生态系统中。

2025-03-31 09:22:23 397

原创 记一个阿里云CDN域名配置不当引起服务鉴权失效问题

2、排查服务器代码中前置拦截器,查看是否拦截器中从cookie获取出错,或者是拦截器中的中间件出错,经过排查在结合现有的现象表明,请求不携带JWT也会使用第一个登录该域名的用户信息身份完成操作。问题现象:用户使用新域名登录后,返回的不是该用户的身份信息,不管是哪个账号,登录后返回的都是第一个使用该域名登录的用户信息,并且原先有鉴权的接口,现在通过该域名访问都不需要写在JWT凭证就能访问成功。3、开始怀疑是域名引起的问题,开始绕过域名使用ip直接访问服务器,结果发现请求正常了,确认是域名引起的。

2025-03-27 22:41:29 337

原创 es 第27节-运用Script脚本实现复杂需求

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。# ES的脚本类同传统数据库的UDF,可以自定义一些规则表达式,目的是满足日益复杂的应用需求。# Lucene,继承原生lucene内置能力,性能好,简洁直接,性能同比其它,最好。

2025-03-27 22:18:18 992

原创 MQTT协议笔记

消息格式MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,专为低带宽、高延迟或不可靠的网络设计,广泛应用于物联网(IoT)设备之间的通信。

2025-03-26 15:30:57 556

原创 ES 使用geo point 查询离目标地址最近的数据

将带有经纬度坐标的省市区数据存入es中,mappings字段使用geo point类型,索引及查询dsl如下。使用mysql计算可优化的地方在于,新版本mysql提供了空间几何字段类型POINT,优化后新表结构如下。将带有经纬度坐标的省市区数据存入mysql中,使用mysql直接计算,表结构及查询sql如下。需求描述:项目中需要通过经纬度坐标查询目标地所在的行政区。解决思路有两种,使用mysql和es分别查询。计算每个点与目标点之间的距离(单位为米)。1、使用mysql进行查询。2、使用es进行查询。

2025-03-13 15:15:38 399

原创 Elasticsearch Java High Level Client [7.17] 使用

es 的 HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。es 7 high Level client 主要的集成问题还是在与springboot的版本冲突,这点解决掉就可以了,官方文档里都能找到使用说明。pom依赖文件如下,在 dependencyManagement 里解决springboot引起的版本冲突-2.3 search 分页。2.4 aggs 聚合统计。2.5 新增单条数据。

2025-03-13 14:17:17 429

原创 Elasticsearch Java API Client [8.17] 使用

下面是按照了城市维度分组,统计了每个城市下面业务类型数量、网络类型数量、sdk版本数量、平台数量、手机型号数量,以及最后一个是带条件过滤在统计的数据平均值。es8出了个新的JavaClient,相较于HighLevelClient少了对es源代码的引用,更加的轻便了,这里记录下使用方式。建议使用模版的方式创建索引,比如我下面的dsl语句规定了索引内字段的类型。有单个新增和批量新增,使用批量时最好把索引的更新频率设置一下。聚合没有太多的通用性,按照自己业务的需求写就可以。本地运行的是es 8.6.2版本。

2025-03-10 20:59:43 414

原创 go执行java -jar 完成DSA私钥解析并签名

起因,最近使用go对接百度联盟api需要使用到DSA私钥完成签名过程,在百度提供的代码示例里面没有go代码的支持,示例中仅有php、python2和3、java的代码,网上找了半天发现go中对DSA私钥解析支持不友好,然后决定使用在java中完成签名计算过程,生成可执行jar后由外部传入参数获取签名数据。

2025-02-20 15:52:55 356

原创 es 第26节-文本分词深入探查

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!# Token filter:基于前面文本分词之后的词项,做一些过滤信息,处理一些词项,达到归一化处理,语法关键字: filter。# 倒排索引是ES存储的基础,文本信息分词之后基于排索引构建索引库,即使没有分词,也是一个独立此项,也会基于倒排存储;# Whitespance,按照空格拆分词,不转换其中任何的字符,中文分词时,也是按照空格分词。

2025-01-24 11:11:31 1131

原创 es 第25节-运用Rollup减少数据存储

支持计算聚合函数:avg、max、min、sum、bucket_script 管道聚合、cardinality、filter、geo_bounds、geo_centroid、median_absolute_deviation、missing、percentiles、rare_terms、scripted_metric、terms、value_count、weighted_avg。# 1.与Rollup类似,将数据转换变化,基于聚合的思维,区别在于,可以不受时间限制,主要是在已有的聚合上做一次预聚合;

2025-01-21 23:15:12 996 1

原创 es 第24节-运用SQL简化DSL查询

###2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!第1个,统计第95百分位的飞行时间平均时间;####1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。#ES提供的SOL查询近可能的靠近SOL的表达能力,但与标准的SOL还是有点差距。#分页查询,注意返回结果中的cursor,cursor相当于游标,用于翻页。

2025-01-18 23:06:25 773

原创 es 第23节-运用Pipeline实现二转聚合统计

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!2.基于前置的分桶聚合,之后进行管道聚合。# 每个数据聚合阶段是一个环节,多个环节串联一起来,形成一个管道模型,上一个环节的聚合结果是下一个环节的输入数据。# 有些应用场景,分桶聚合之后的数据需要进行一些过滤,基于管道聚合很容易实现,有点类似与数据库中的。# 基于一定的窗口,计算前后分桶数据差值,如:redis监控中,总命令数差值,默认是递增的。

2025-01-10 22:49:38 871

原创 es 第22节-Bucket特殊分桶聚合实战

hard_bounds,用于限制分桶的范围,可以缩小分桶数,与extended bounds 内部执行逻辑不一样,善于应用在分桶数非常多的场景,可以大大减小非必要的分桶,减少资源消耗;# extended_bounds,扩展多余分桶数,配合查询条件限制,分桶的范围包括在 min~max之间,用于补足没有数据的间隔分桶。#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!基于日期的直方图分桶;

2025-01-07 22:23:15 640

原创 es 第21节-Bucket常用分桶聚合实战

shard_min_doc_count,限制分片最小满足的文档数量,或者词项数量,此值默认是0,必须小于 min_doc_count,建议值:(shard_min_doc_count=min_doc_count/分片数)# depth_first,深度优先,擅长分桶数据小的,分桶比较固定的,建议 10000 以内,即 topX 类型,默认。与mysqltemp表完全不是一种逻辑;# size,返回分桶数量,默认 10,限制不能超过 65535,如果超过,需要设置超过参数,见后面设置。

2025-01-03 23:15:48 1173

原创 es 第20节-运用指标聚合快速统计数值

注意 taxful_total_price字段是float类型,数据本身只有2为小数,统计后会产生多小数,这是因为es底层是java写的,java自带的问题。#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!超过这个值,计数可能会变得有点模糊。# carintility:背后的算法Hyperloglog,该算法是非精确型的,默认3000个,ES最高支持40000个,超过了就是非精确型的。

2025-01-01 22:43:00 985

原创 es 第19节-运用异步机制执行重度查询

batched_reduce size,控制分片查询响应数,默认5,无需要等待所有分片执行查询完成,即可执行查询结果合并;#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!# wait_for_completion_timeout,等待超时时间,默认 1s,如果是 1s内返回结果,则直接返回结果;相反,则会返回异步任务元数据信息。# 写一个聚合查询,这里数据量太少,很快就执行完了,就当它比较慢吧。

2024-12-30 22:41:52 1051

原创 什么是 ANT 表达式,以及如何在java中使用

ANT 表达式(也称为或)是一种用于匹配文件路径或目录结构的简单模式匹配语法。它最初由 Apache Ant 构建工具引入,广泛应用于各种构建工具、配置文件、文件系统操作等场景中,用于指定文件或目录的匹配规则。ANT 表达式的语法非常直观,允许使用通配符来匹配文件名、目录名或路径中的某些部分。它类似于 Unix Shell 的路径匹配规则,但有一些特定的扩展和差异。

2024-12-27 11:15:56 685

原创 es 第18节-分页查询使用避坑的一些事

快照查询基于缓存机制,将查询的所有数据ID缓存起来,下次查询,从缓存中直接找寻,避免重复执行查询,是目前业界做深度查询最佳的方式;# Search after,基于排序字段,查询下一页,基于上一页最后一条数据的排序字段值,作为参照,可以保证数据查询量大大减少。# Search after,基于排序字段,查询下一页,基于上一页最后一条数据的排序字段值,作为参照可以保证数据查询量大大减少。# 深度翻页真的需要这么多吗?# ES是分布式的,相比传统数据库多了分片机制,查询一次,要查询多个分片;

2024-12-24 22:18:57 1185

原创 es 第17节-查询结果排序深入解读

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!# ES默认数据写入,非Text类型都会存储为列式,应用领域数据排序与数据聚合设置索引字段属性,docvalues:true/false,是否启用。# sort.mode,设定写入排序字段取值,max/min,支持多个字段,默认max。# sort.order,设定写入排序字段,排序顺序,支持多个字段,默认asc。

2024-12-20 23:03:41 286

原创 es 第16节-运用启发式特性引导用户查询

string_distance,关键字,词项字符计算距离的方式,支持多种高级的数学算法,建议专业性去看此方面论文,默认internal,其他值 damerau_levenshtein, levenshtein, jaro_winkler, ngram。# max_errors,关键字,最大错误短语数量,默认 1,控制匹配到的返回短语错误数据量,调整值,会增加返回的数据。# confidence,关键字,置信度,控制返回结果的数据量,取值 0~1,默认1,有命中的就返回,无命中的不返回。

2024-12-16 22:40:00 1076

原创 es 第15节-词项查询与跨度查询实战运用

inner_hits:可选参数,用于配置返回的固定文档的详细信息。# span,跨度查询,基于分词词项的精确位置,控制问隔,设定相似度来执行,相比match 匹配类查询,提供了更加底层灵活的查询机制,同时也是非常复杂。# prefix_length,关键字,控制容错词的起始位置,从左开始,设置的值应该小于 value 的字符长度,建议设置的更加精确,性能更好。# 有很多应用场景,我们对于输入的内容并无严格的校验,导致入库的内容有错别字,此时需要一定的纠错查询,ES 针对此需求,设计了糊纠错查询。

2024-12-12 23:25:38 1058

原创 es 第14节-全文文本分词查询

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!# cross_fields,多字段查询时,部分分词在第一个字段里,其它的分词在另外的字段里phrase,短语匹配,等同match_phase。# 多个查询检索条件有先后,先基于第⼀个条件查询,之后在结果集上执⾏后⾯的查询条件,类似于 if,then 逻辑。# ordered,关键字,查询的内容是否必须符合顺序,取值true/false,默认false。

2024-12-08 22:31:29 767

原创 RabbitMQ 实现分组消费满足服务器集群部署

由于 fanout 交换机会将消息广播到所有绑定的队列,因此 group_a_queue 和 group_b_queue 都会接收到这条消息。接下来,创建一个配置类来声明交换机、队列和绑定关系。为每个消费者组创建单独的消费者类。每个消费者组内的多个消费者会竞争性地从队列中消费消息。中配置 RabbitMQ 的交换机、队列和绑定关系。消费,但每个组内的多个消费者只会有一个成员消费该消息。交换机不使用路由键,它会将消息广播到所有绑定的队列。交换机,并为每个消费者组创建一个独立的队列。注解来监听队列中的消息。

2024-12-06 16:43:47 852

原创 es 第13节-多条件组合查询实战运用

# 多字段组合查询,数据排序依赖很多字段共同的分值,有些不必要的字段,可以设定一个固定值,仅仅用来作为过滤条件,防止过度干预排序分值计算,从而影响排序。## bool逻辑条件是组合查询,最常用的,也是必须掌握的,DSL查询与SQL不一,传统查询里面的多条件组合通过观关键字组合,这里采用的是以下关键字。## ES 查询默认排序,采取的是依据关键字的关联度计算分值,默认算法是 BM25,多个字段查询时,可以跟不同的字段设定不同的权重,来调整排序。

2024-12-05 22:16:56 1061

原创 es 第12节-选择合适的数据查询方式

分片查询路由 https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-shard-routing.html。# preference,分片查询优先度,主分片与副本分片,包括本节点与其它节点,默认基于ES统计数据,此参数用于控制查询时,分片的路由选择,具体的可以参考最后参考文献连接。# ECS 参考规范 https://www.elastic.co/guide/en/ecs/1.8/index.html。

2024-11-28 23:06:16 911

原创 EMQX实现消费组方法

EMQX Broker 是一个高性能的MQTT消息服务器,广泛用于物联网和实时通信场景。在MQTT协议中,消费者通常指的是订阅了某个主题的客户端。虽然MQTT协议本身没有直接定义“消费者分组”的概念,但EMQ X Broker 提供了一些高级特性,可以帮助实现类似的功能。

2024-11-26 15:27:06 588

原创 java socket bio 改造为 netty nio

近日公司接入一款健康监测设备,厂家提供的服务端server demo代码中使用的是java 原生socket,demo代码中在发现连接后使用独立线程处理后续通信,由于设备的特殊性,需要把端口暴露在公网,每当被恶意连接时创建了大量线程,占用系统资源造成了服务宕机,因此需要进行改造。经过改造后使用了4个worker线程进行读写,消除了原先恶意连接造成线程数无线扩大的问题。

2024-09-29 11:25:51 663

原创 json字符串转Java 泛型对象

【代码】json字符串转Java 泛型对象。

2024-09-04 20:24:11 622

原创 es数组包含查询

es中字段A 值是一个list [a, b, c, d],当入参为[a, b, c, d, e] 或 [a, b, c, d] 就可以匹配到;如果是 [a, b, c] 就匹配不到。该方法比较耗cpu。

2024-09-04 20:17:31 663 1

原创 Springboot 集成websocket 并支持服务集群

2、新建websocket连接类。3、新建session管理类。5、新建转发消息接收类。

2024-08-13 17:51:14 629 1

原创 使用Fastjson 序列化对象含有$ref引用解决方法

Fastjson序列化对象成字符串时,如果对象中存在引用关系,例如一个对象的属性引用了另一个对象,那么在序列化过程中,Fastjson会使用。当Fastjson遇到一个已经序列化过的对象时,它会检查该对象是否已经在序列化过程中被引用过。如果是,则不会再次序列化该对象,而是使用。来表示这种引用关系。这样做的目的是为了节省存储空间和提高序列化效率,因为通过引用而不是重复存储相同的数据可以大大减少序列化后的数据大小。来指向之前序列化过的对象。这样可以避免重复序列化相同的数据,从而提高效率。

2024-08-04 10:38:38 780

原创 es 第11节-使用Ingest加工索引数据

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。##### 索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效。## 更新数据使用 pipeline。##### 对历史数据无效!##### 一定要重建索引!## 索引设置 pipeline。

2024-07-03 14:20:07 205

原创 es 第10节 如何正确使用Reindex重建索引

### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。##### 索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效。# 1、重建是创建新索引,原有的保留。##### 对历史数据无效!##### 一定要重建索引!## 限制重建数据的范围、数量。

2024-07-02 16:59:48 208

空空如也

空空如也

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

TA关注的人

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