- 博客(106)
- 收藏
- 关注
原创 ElasticSearch 分页技术详解:实现方式与最佳实践
为了找到from位置开始的文档,ElasticSearch必须先排序并跳过前面的所有文档直到达到from的位置。由于每个 search_after查询都是独立执行的,并且基于最新快照的数据,所以在深度分页过程中可能会遇到重复文档或者错过某些文档的问题。由于需要维护一个包含所有匹配文档的有序列表,以便能够正确地跳过前面的文档并返回请求的文档部分,这会导致更高的内存使用和CPU计算成本。由于上述原因,当from值较大时,查询的响应时间会显著增加,这对于用户体验是非常不利的,特别是在需要快速响应的场景下。
2025-02-10 11:00:26
1168
原创 使用Spring boot的@Transactional进行事务管理
在 Spring Boot 中,是用于声明式事务管理的关键注解。它基于 Spring 的 AOP(面向切面编程)实现,可以简化数据库事务的管理。
2025-02-08 15:37:12
1888
原创 星火大模型接入及文本生成HTTP流式、非流式接口(JAVA)
接口文档在这个地址查看:https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E。本文以模型Spark Lite为例,重要信息(APIPassword、接口地址)在这个页面查看:https://console.xfyun.cn/services/cbm。相比非流式略微有一些不同,响应分成了多次,最后一个。
2025-01-24 10:30:13
1722
1
原创 分布式算法(五):初识ZAB协议
Zookeeper 是一种分布式协调服务,它帮助分布式系统中的进程或服务之间进行协作。配置管理:应用程序可以在 Zookeeper 中存储配置信息,并且可以在配置发生变化时得到通知。命名服务:为分布式系统中的组件提供一个统一的名字空间,类似 DNS 之于互联网。分布式同步:提供机制以确保多个节点之间的操作能够按照一定的顺序执行。组成员管理:跟踪集群中成员的状态,检测成员的加入和离开。领导选举:在一组服务器中选出一个领导者来协调某些活动。Znodes(节点)
2024-12-31 13:00:54
888
原创 分布式算法(四):Basic Paxos协议初探(角色、阶段)
在这个背景下,Paxos协议应运而生。想象一下,如果你正在使用一款流行的社交网络应用,无论是在世界的哪个角落,无论服务器集群内部发生了什么变化,你都能够顺利发布你的状态更新或与朋友交流,这就是Paxos等共识算法所保障的结果。在一个健康的Paxos系统中,少数派的意见不足以影响最终的决策结果,因为系统的设计原则是必须有超过一半的节点(即多数派)同意才能使提议生效。然而,随着节点数量的增加和地理分布的扩大,如何确保这些分散在全球各地的计算机能够像一个协调有序的整体一样工作,成为了工程师们面临的重大挑战之一。
2024-12-26 18:07:05
734
原创 分布式算法(三):分布式事务的解决方案——三阶段提交协议
文章目录一、核心实现原理优化三个阶段1.CanCommit询问阶段2.PreCommit预提交阶段3.DoCommit提交阶段二、故障恢复1.协调者发生故障心跳机制解决数据不一致问题2.部分参与者发生故障三、优缺点分析优点缺点三阶段提交协议(Three-Phase Commit, 3PC)是分布式系统中用于保证跨多个节点的数据一致性的算法。它是在两阶段提交(2PC)的基础上发展起来的,旨在解决2PC的一些局限性,如协调者单点故障和阻塞问题。3PC通过引入额外的准备阶段来尝试减少阻塞时间,并且允许参与者在某
2024-12-24 13:58:04
723
原创 分布式算法(二):分布式事务的解决方案——两阶段提交协议
两阶段提交协议(2PC)对强一致性的CP架构系统至关重要,它通过确保所有分布式节点在事务处理上达成一致,要么全部成功提交,要么全部回滚,从而维护了全局数据的一致性和完整性,同时提供了可靠的故障恢复机制,尽管可能牺牲一定的系统可用性和性能。这对于需要高度可靠和一致性的应用场景,如金融交易、分布式数据库操作等,具有不可替代的应用价值。然而,值得注意的是,虽然2PC非常适合强一致性的需求,但它也有一些缺点,特别是在高可用性和性能方面。
2024-12-23 17:28:50
926
原创 分布式算法(一):从ACID和BASE到CAP
BASE理论是“基本可用(Basically Available),软状态(Soft State),最终一致性(Eventual Consistency)”的缩写,它是对ACID的一种放松,旨在为高可用性和分区容忍性提供支持。这意味着在一个分布式的环境中,所有的节点需要同步进行更新,以保持数据的一致性。探索分布式系统中关于数据一致性和可用性的哲学——从ACID到BASE再到CAP定理,这是一个充满挑战和技术深度的话题,它不仅影响着我们如何设计和实现数据库,也深刻地改变了现代互联网应用的架构方式。
2024-12-19 18:18:13
979
原创 掌握ElasticSearch(八):聚集、文档间的关系
在这个示例中,interestsname和type。},在这个示例中,question和answer。question是父文档类型,answer是子文档类型。
2024-11-05 17:53:21
1062
原创 掌握ElasticSearch(七):相关性评分
TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种常用的统计方法,用于评估一个词对文档或语料库的重要程度。TF (Term Frequency, 词频):一个词在文档中出现的频率。IDF (Inverse Document Frequency, 逆文档频率):一个词在整个文档集合中出现的频率的倒数,用来衡量这个词的独特性。
2024-11-01 11:17:06
1425
原创 掌握ElasticSearch(六):分析过程
Elasticsearch 的分析过程是将文本数据转换成适合搜索的形式的关键步骤。这一过程主要包括四个阶段:字符过滤、分词、词条过滤和词条索引。描述:用户可以根据需要组合不同的分词器、字符过滤器和词条过滤器来创建自定义分析器。示例。
2024-10-30 11:02:48
899
原创 掌握ElasticSearch(五):查询和过滤器
在 Elasticsearch 中,查询(Query)和过滤器(Filter)是用于检索和筛选数据的重要组成部分。它们虽然都能用来查找文档,但在性能和用法上有所不同。下面详细介绍查询和过滤器的概念以及它们之间的区别。
2024-10-23 13:49:51
1553
原创 掌握ElasticSearch(四):数据类型、回复体
Elasticsearch 是一个分布式的搜索和分析引擎,适用于需要快速搜索大量数据的应用场景。当向 Elasticsearch 发送请求(例如搜索或索引操作)时,它会返回一个 JSON 格式的响应体。这个响应体包含了关于请求结果的详细信息。在 Elasticsearch 中,文档(Document)是最小的数据单元,每个文档都是 JSON 格式的数据。为了有效地索引和搜索这些文档,Elasticsearch 定义了多种数据类型来表示文档中的字段。
2024-10-23 12:59:34
1263
原创 掌握ElasticSearch(二):如何将一台电脑上的Elasticsearch服务迁移到另一台电脑上
Elasticsearch dump是一个用于将Elasticsearch索引数据导出为JSON格式的工具。你可以使用Elasticsearch dump通过命令行或编程接口来导出数据。将源电脑导出的插件放置到目标电脑的es的安装目录的plugins文件夹下。插件存放在安装目录下的plugins文件夹中。一个插件对应一个子文件夹。在目标电脑上安装同版本的Elasticsearch。拷贝原来的elasticsearch.yml配置。
2024-10-22 16:28:06
415
原创 掌握ElasticSearch(三):探索核心概念——文档、索引、分片、倒排索引
通过分片,Elasticsearch 可以将一个大的索引分成多个部分,这些部分可以分布在不同的节点上,从而实现水平扩展。Elasticsearch 支持动态映射,这意味着当我们第一次索引一个文档时,Elasticsearch 会根据文档的结构自动推断出字段的数据类型,并为这些字段创建映射。例如,如果一个字段的值总是相同的,或者某些字段不需要被搜索,动态映射可能会导致这些字段被索引,占用额外的存储空间。在 Elasticsearch 中,索引(Index)是一个非常核心的概念,它是存储相关文档的容器。
2024-10-22 15:48:30
1891
原创 掌握ElasticSearch(一):Elasticsearch安装与配置、Kibana安装
Elasticsearch是一个提供可扩展的企业级搜索服务的工具。它主要提供了大数据搜索和分析服务。相较于传统的关系数据库,Elasticsearch具有更高的性能、易扩展性和良好的容错性。传统的关系数据库在处理大数据时存在明显的短板,主要表现在性能差和扩展难的问题上。即使采用一定的方法去优化SQL,查询速度依然可能很慢,而关系数据库的集群搭建也不太容易,查询性能在很多业务场景中依然没有保障。相较于关系数据库,Elasticsearch存在几个明显的优点:高性能、易扩展和良好的容错性。
2024-10-21 19:36:26
1695
原创 Zookeeper快速入门:部署服务、基本概念与操作
持久节点 (Persistent Node)不会自动删除。可以有子节点。适用于需要长期存在的数据。临时节点 (Ephemeral Node)客户端会话结束时自动删除。不能有子节点。适用于表示客户端的存在或状态。持久顺序节点 (Persistent Sequential Node)不会自动删除。创建时自动添加序列号。适用于需要唯一标识符的场景,例如任务分配。临时顺序节点 (Ephemeral Sequential Node)客户端会话结束时自动删除。创建时自动添加序列号。
2024-10-12 21:54:00
1391
原创 Dubbo快速入门(一):分布式与微服务、Dubbo基本概念
在互联网时代,随着用户基数的急剧增长和技术的不断进步,互联网项目与传统项目相比有了显著的区别。因此,互联网项目更加注重用户体验,包括界面的美观度、功能的丰富性、加载的速度以及系统的稳定性。在互联网架构中,为了实现上述目标,通常会采用集群和分布式计算的技术方案。例如,在一个分布式系统中,为了提高系统的可用性和性能,通常会采用集群技术来部署关键组件,如Web服务器、数据库和缓存等。集群技术主要用于解决单点故障问题,提高系统的可靠性和可用性,同时也能通过负载均衡来提升系统的处理能力。
2024-09-26 10:47:46
1447
1
原创 MySQL连接查询解析与性能优化成本
也就是说一条语句在server层中执行的成本是和它操作的表使用的存储引擎是没关系的,所以关于这些操作对应的成本常数就存储在了server_cost表中,而依赖于存储引擎的一些操作对应的成本常数就存储在了engine_cost表中。当需要组合来自不同表的信息时,通常会使用连接查询。的驱动表(即,left join中左边的表,或right join中右边的表)的记录来说,如果无法在被驱动表中找到匹配ON子句中的过滤条件的记录,那么该记录仍然会被加入到结果集中,对应的被驱动表记录的各个字段使用NULL值填充。
2024-09-22 15:57:17
1093
原创 深入MySQL的索引实践及优化
索引是帮助MySQL高效获取数据的数据结构。简单来讲,数据库索引就像是书前面的目录,能加快数据库的查询速度。对于海量数据来说,它的目录也是很大的,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中。InnoDB提供的一种分类方式,InnoDB的每张表都会有一个聚集索引,有且仅有一个,这也是该表的物理存储方式;非聚集索引可以有多个;InnoDB和MyISAM会自动为主键或者声明为UNIQUE的列去自动建立B+树索引。- 聚簇索引(主键索引):根据主键构建的索引叫做聚簇索引。
2024-09-13 12:01:17
1282
原创 MySQL的启动选项与配置管理:掌握数据库的强大定制能力
MySQL是一个强大的关系型数据库管理系统,提供了丰富的服务以支持数据的存储、管理和访问。除了基本的数据操作功能之外,MySQL还允许用户通过启动选项和配置文件来调整其行为,以适应不同的应用场景。本文将详细介绍MySQL的启动选项及其配置管理方法,并通过示例来说明如何利用这些功能来优化MySQL的性能和安全性。MySQL的服务器程序和客户端程序有许多可配置的启动选项,这些选项允许用户在启动时改变程序的行为。如果同一选项在多个配置文件或组中定义,则最后读取的文件或组中的设置优先。选项名是区分大小写的,如。
2024-09-03 17:04:27
1066
原创 MySQL的服务器与客户端:架构解析与实践
MySQL是一个广泛使用的开源关系数据库管理系统,其核心架构由服务器端和客户端两大部分组成。本文旨在探讨MySQL服务器端和客户端的工作原理,理解它们是如何协同工作来完成数据的增删改查操作的。
2024-09-03 16:49:10
1499
原创 ~/.bashrc、 ~/.bash_profile、~/.profile、 /etc/profile几个配置文件的区别
/.bashrc:适用于每个用户的 bash shell,每次打开新的终端窗口时加载。:适用于每个用户的 bash shell,登录时加载,可以包含~/.bashrc。~/.profile:适用于每个用户的所有 shell,登录时加载。:适用于所有用户的系统范围配置,登录时加载。根据你的需求,你可以选择合适的地方来配置环境变量或其他个性化设置。通常,如果你只需要配置 bash shell 的个性化设置,可以使用~/.bashrc;如果需要设置全局环境变量,可以使用或~/.profile。
2024-09-02 14:33:46
1785
原创 软件开发最佳实践:接口设计、自测与效率提升
测试驱动开发(Test-Driven Development, TDD)是一种软件开发方法,它要求在编写功能代码之前先编写测试用例。这种方法有助于保证代码的质量,并促进更好的设计。接口设计是前后端通信的基础,合理的接口设计可以提高开发效率,降低维护成本。提升开发效率是每个软件团队都在追求的目标。
2024-08-28 18:58:10
1134
原创 全面解析软件开发流程:从需求分析到部署上线
后端开发者基于需求文档设计API接口,包括定义URL路径、HTTP请求方法(GET, POST, PUT, DELETE等)、请求参数及格式(如JSON、XML)、响应数据结构等。在项目启动阶段,需要确保产品团队、前端工程师、后端工程师、测试团队以及用户体验设计师(UED)等所有关键角色都能对项目需求有一个统一且深刻的理解。这一步骤旨在确保所选的技术方案能够满足项目需求,并且是可行的。在开发完成后,需要进行一系列的测试来确保系统的稳定性和性能符合预期。
2024-08-28 18:57:35
897
原创 提升代码质量的艺术:最佳实践与编码规范
在软件开发过程中,良好的编程习惯和代码规范是构建高质量软件的关键。本文将探讨一些实用的编码技巧,帮助开发者写出更加易读、易于维护的代码。将被调用的函数放置在其调用者之下,可以建立一种直观的自顶向下的逻辑流,使得阅读者能够更好地理解程序的执行顺序。避免将注释与代码混合在一起,而是将其放在合适的位置,以便于理解和维护。限制每行代码的长度,确保代码能在不拖动水平滚动条的情况下完全显示,有助于提高代码的可读性。即使循环或条件体为空,也应该使用明确的语法结构来增强代码的可读性。在面向对象的语言中,
2024-08-27 11:49:40
559
原创 回调机制在Java中的应用与实践
在软件工程中,回调是一种允许程序或对象将执行权交给另一个函数的编程模式。它使得一个函数可以被另一个函数调用,而不是直接控制整个流程。这种模式在异步编程、事件驱动系统以及多线程环境中非常有用。在Java中,我们可以使用多种方式来实现回调,其中最常用的是接口和匿名内部类,或者使用Lambda表达式(从Java 8开始)。首先,我们需要定义一个接口,这个接口将包含一个或多个方法,这些方法将在适当的时机被调用。实现回调客户端需要实现这个接口,并提供具体的方法实现。注册并触发回调现在可以在需要的地方注册这个回
2024-08-27 10:56:39
1142
原创 优化代码设计:构建高效、安全与可维护的应用程序
自定义注解可以帮助简化代码,避免在多个地方重复相同的逻辑或配置。面向切面编程(AOP)是一种编程范式,用于模块化横切关注点。通过自定义注解结合AOP可以方便地记录对数据库的操作,便于后续日志分析。示例步骤 1: 创建自定义注解Retention;Target;步骤 2: 应用自定义注解// 更新用户信息// 这里可以是调用DAO层的方法// 创建新用户// 删除用户。
2024-08-23 10:35:37
1018
原创 Java的Optional类——解决空指针异常的好工具
类是 Java 8 引入的一个容器对象,旨在解决空指针异常的问题。Optional类提供了一种优雅的方式来处理可能为 null 的值,从而避免了显式的 null 检查。这对于提高代码的可读性和减少空指针异常非常有用。
2024-08-20 14:11:38
447
原创 Java的Lambda表达式与Stream类
API,它提供了一种新的处理数据的方式,尤其适合于集合操作。流API的设计目的是为了更高效地处理数据集,尤其是当数据集很大时。它支持函数式编程风格,并且可以很容易地并行化。Lambda 表达式是 Java 8 引入的一个重要特性,它使得代码更加简洁、易于理解和维护。Lambda 表达式允许你把功能作为方法的参数,这极大地简化了函数式接口的使用。下面通过一些具体的例子来说明如何使用Stream API结合Lambda表达式。接下来,我们将通过几个具体的示例来展示如何使用 Lambda 表达式。
2024-08-20 11:46:56
1081
原创 WebSocket协议解析
掩码标志是一个位标志,用来指示WebSocket帧中的有效载荷数据是否已经被掩码(即加密)。这个标志位于WebSocket帧头部的第一个字节中,它是第7个比特位(从右向左计数)。
2024-08-19 20:02:08
1403
原创 函数代码规范
编写代码与写作其他类型的文章非常相似。在撰写论文或文章时,我们往往先将脑海中的想法直接记录下来,然后再进行精炼和打磨。初稿可能显得粗糙且杂乱无章,但我们可以不断地对其进行优化,直到它符合我们的预期。当我开始编写函数时,它们往往冗长且复杂,包含大量的缩进和嵌套循环,以及过长的参数列表。函数名可能是随意选取的,并且常常会出现重复的代码片段。不过,我会为这些函数编写一套单元测试,确保每一行代码都能被覆盖到。之后,我逐步对这些代码进行打磨:分解函数、修改命名、消除重复。
2024-08-19 15:50:10
320
原创 Java命名规范:名副其实、避免误导、做有意义的区分、易读和可搜索
在编程中,命名是至关重要的一环。一个好的命名能够提高代码的可读性、可维护性和可扩展性。本文将介绍一些关于Java命名的原则和技巧,帮助你写出更高质量的代码。
2024-08-15 17:34:26
417
原创 追求代码的整洁与美丽
追求代码的整洁与美丽是一个持续的过程,它要求我们不断地审视和改进我们的代码。通过消除重复和提高表达力,我们不仅能够编写出更易于维护的代码,还能够享受到编程带来的乐趣。通过抽象和重构,我们可以将重复的逻辑提取到单一的位置,使得代码更加清晰,易于管理。”这意味着,当我们审视自己的代码时,应当感受到一种愉悦,一种对于问题解决方案的满足感。在编程的世界里,代码不仅仅是实现功能的工具,它也是艺术的体现。一段整洁、优雅的代码就像一首好诗,让人赏心悦目。在这个改进后的版本中,我们不仅消除了重复,还提高了代码的表达力。
2024-08-14 20:56:43
314
原创 基础测试常识
在塑造高质量软件产品的旅程中,测试扮演着确保符合用户期望与需求的基石角色。本博客将介绍测试的基本理念、指导方针及多样化的测试类别,旨在构建一个清晰、高效的测试实践框架。
2024-07-23 20:38:11
329
原创 GitLab教程(六):通过rebase来合并commit
Git Rebase的基本逻辑是将一个分支的更改移到另一个分支上,同时看起来好像这些更改是在目标分支的最新提交之后直接进行的一样,以此来实现更简洁、线性的项目历史。:Rebase 可以让你的提交历史更加整洁,因为它可以将多个提交合并为一个或几个有意义的提交,从而简化项目历史,使其更易于阅读和理解。:通过将一个分支的更改重新应用到另一个分支的顶端,rebase可以创建一个看似连续的提交序列,这对于查看项目历史和回溯问题非常有帮助。
2024-06-14 18:42:47
1984
原创 GitLab教程(五):高效的工作模式——Feature Branching
特性分支(Feature Branching)是一种软件开发工作流,尤其在使用Git或其他版本控制系统时被广泛采用。这种策略鼓励开发者为每一个新功能、改进或者代码改动创建一个独立的分支进行开发,以此来组织和管理代码更改。创建分支:当开始开发一个新的功能时,首先从主分支(通常是main或master)创建一个新分支。这个新分支被称为“特性分支”,命名上通常会反映该分支所包含的特性的名称或目的,例如。独立开发:开发者在特性分支上进行代码编写、测试和修改,而不会影响到主分支上的代码。
2024-06-14 17:39:46
1116
原创 GitLab教程(四):分支(branch)和合并(merge)
命令进行合并时,Git具备一定的智能自动化处理能力:如果一个分支仅修改了文件A,而另一个分支独立地修改了文件B,Git能够无缝整合这些更改,自动完成合并过程——即最终的代码既包含了对A文件的修改也包含了对B文件的修改。同样地,若两个分支虽然都修改了同一个文件,但涉及的是文件中互不重叠的部分,比如一个改动发生在第一行,另一个则在第二行,Git同样能巧妙地自动合并这些非冲突性修改。获取了远程分支的最新变化,或者当你想要合并本地的一个分支到当前分支时,就会用到这个命令。,默认会尝试合并远程分支到当前分支。
2024-06-12 19:46:34
6422
原创 GitLab教程(三):多人合作场景下如何pull代码和处理冲突
执行命令,在clone代码时指定本地仓库的文件夹名:我这里是指定了将拉下来的代码存在中,和在上一篇博客中产生的test文件夹相区分。也就是说,现在我本地有两个文件夹,用来模拟另一个同事A的本地仓库,test文件夹模拟我自己的本地仓库。
2024-06-11 19:53:34
1027
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人