- 博客(85)
- 收藏
- 关注
原创 tools-db-query:数据查询辅助工具
1、背景在spring生态下,当前已经有很好的db查询工具了,即mybatisplus。对于单表查询,我们可以在不用写一行sql的情况下完成数据的各种条件查询,简单、方便且更符合程序员的习惯。但在分布式情况下,我们每个功能模块都会以接口的方式给其他模块或外部服务提供接口,而不同的接口或业务,查询的表及字段等都不同,我们需要进行大量的模式化的定义及同质化的代码开发。这就导致,如果我们在接口设计的...
2023-11-06 11:15:01
13
原创 kafka源码愫读(7)、LogManager模块源码分析
参考以下文档:https://www.zhenchao.org/2019/06/22/kafka/kafka-log-manage/
2021-02-18 19:05:38
162
原创 kafka源码愫读(6)、GroupCoordinator模块源码分析
1、GroupCoordinator及相关组件简介GroupCoordinator模块为Consumer管理器,每个GroupCoordinator管理一个或多个Consumer Group,同时管理了每个Consumer对应的Partition及其消费偏移信息;每个ConsumerGroup确定对应GroupCoordinator的计算公式为:Math.abs(groupId.hashCo...
2021-02-03 16:23:00
659
原创 kafka源码愫读(5)、ReplicaManager模块源码分析
1、ReplicaManager模块简介replicaManager主要用来管理topic在本broker上的副本信息。并且读写日志的请求都是通过replicaManager进行处理的。每个replicaManager实例都会持有一个Pool[TopicPartition, Partition]类型的allPartitions变量。Pool其实就是一个Map的封装。通过key(TopicPar...
2021-02-03 16:22:50
460
原创 kafka源码愫读(4)、KafkaController模块源码分析
1、模块组成KafkaController是kafka集群的控制管理模块,且一个集群只能有一个leader。其主要通过向ZK注册各种监听事件来管理整个集群节点、分区的leader的选举、再平衡等问题。KafkaController主要组成:KafkaController.png说明:ControllerEventManager:Controller事件管理器。KafkaCo...
2021-02-02 14:14:34
308
原创 kafka源码愫读(2)、broker初始化流程分析
Kafka 集群由多个 broker 节点构成,每个节点上都运行着一个 Kafka 实例,这些实例之间基于 ZK 来发现彼此,并由集群控制器 KafkaController 统筹协调运行,彼此之间基于 socket 连接进行通信。1、KafkaServer 类主要字段:KafkaServer 为kafka的启动类,其中包含了kafka的所有组件,如KafkaController、groupCo...
2021-02-02 11:20:16
235
原创 kafka源码愫读(3)、SocketServer模块源码分析
1、SocketServer模块说明SocketServer为kafka的网络通信管理模块,基于Reactor的模式,其中包含了1个Acceptor负责接受客户端请求,N个Processor负责读写数据,M个Handler来处理业务逻辑。在Acceptor和Processor,Processor和Handler之间都有队列来缓冲请求。SocketServer网络通信流程图如下:Soc...
2021-02-01 17:19:46
166
原创 kafka源码愫读(1)、总体架构
1、拓扑结构kafka拓扑结构.png2、基本组成Broker:一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic,Broker和Broker之间没有Master和Standby的概念,他们之间地位是平等的;Topic:每条发送到Kafka集群的消息都属于某个主题,这个主题就称为Topic。物理上不同Topic的...
2021-02-01 16:06:57
105
原创 搜索引擎ElasticSearch之(8)、性能优化
1、写入速度优化在 ES 的默认设置下,是综合考虑数据可靠性、搜索实时性、写入速度等因素的。当离开默认设置、追求极致的写入速度时,很多是以牺牲可靠性和搜索实时性为代价的。1.1、TranslogFulsh间隔调整默认情况下,translog持久化策略为每个请求都flush,其保证了写入操作的可靠性。对应配置为:index.translog.durability: request若系统...
2020-05-13 07:09:06
756
原创 搜索引擎ElasticSearch之(7)、聚合查询
1、度量聚合度量聚合从文档中提取值并进行计算,这些值通常从文档中的字段中提取出来,也可以使用脚本进行计算。数字型度量聚合是一种特殊类型的度量聚合,输出数字类型的值,聚合输出一个数字指标的为单值数字型度量聚合;输出多指标的为多值数字型度量聚合。1.1、平均值聚合平均值聚合是一个单值度量聚合,计算从聚合的文档中提取数字型值的平均值。示例1:GET /city/_doc/_search{ ...
2020-05-12 06:59:20
322
原创 搜索引擎ElasticSearch之(6)、搜索详解
1、查询参数1.1、分页查询分页查询需指定两个参数。from:指定起始偏移量,默认为0;size:指定查询结果包含的文档数。示例:GET /city/_doc/_search{ "from":0, "size":2}1.2、返回版本号当查询结果需要返回文档版本号时,需在查询顶层添加version字段,并设其值为true;示例:GET /city/_doc/_sea...
2020-05-11 08:21:48
427
原创 搜索引擎ElasticSearch之(5)、映射配置
映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类 型,每种类型都有它自己的映射。一个映射定义了文档结构内每个字段的数据类型。映射通 过配置来定义字段类型与该类型相关联的元数据的关系。1、字段数据类型1.1、核心数据类型核心数据类型包括:字符串数据类型: string数字型数据类型: long 、 integer 、 short 、 byte 、 double ...
2020-05-10 20:30:20
439
原创 搜索引擎ElasticSearch之(4)、集群管理
1、集群状态及监控状态ES提供了检查和监控节点或集群的信息,包括统计信息、服务器信息、节点参数等。1.1、集群监控可以利用集群健康api来查看集群或索引的健康状态信息。集群健康查询示例:GET /_cluster/health{ "cluster_name" : "test-cluster", "status" : "yellow", "timed_out" : fals...
2020-05-09 19:16:28
121
原创 搜索引擎ElasticSearch之(3)、配置详解
1、elasticsearch服务配置1.1、Cluster集群配置参数名称默认值说明cluster.nameelasticsearch集群名称,只有具有相同集群名的节点才能组成一个逻辑集群1.2、Node节点配置参数名称默认值说明node.name系统生成节点名称,同一集群的各节点名称必须不同,不配置则系统默认生成node.at...
2020-05-08 19:32:59
783
原创 搜索引擎ElasticSearch之(2)、索引管理
1、索引管理1.1、索引创建创建索引主要设置主分片及副分片数量。索引创建后,主分片数不能更改,可以修改副本分片数。请求格式:PUT /{索引名}{ "settings":{ "number_of_shards":{主分片数}, "number_of_replicas":{副本分片数} }}示例:PUT /city{ "settings":{ ...
2020-05-07 07:35:07
375
原创 搜索引擎ElasticSearch之(1)、架构简介及基本服务搭建
1、ElasticSearch基本术语及概念1.1、索引词(term)ElasticSearch中的索引词是为一个能被索引的精确值,索引词可以为文档的某个字段或某个字段经过分词器分词后的token单元。索引词可以通过term查询进行精确搜索。1.2、文本(text)文本为普通的非结构化文字,可被分词器分解为索引词,并通过索引词构建倒排索引。而搜索时,搜索词也会被分解为索引词,并通过倒排索引...
2020-05-06 08:36:00
555
原创 mongodb之(9)mongodb分片集群
1、分片组件mongo中分片由以下三个组件组成:Shard Server,Config Server,Router Server。分片组件.png1.1、Shard ServerShard Server为存储实际数据的分片,每个Shard 可以是一个mongod 实例,也可以是一组mongod 实例构成的Replica Set。为了实现每个Shard 内部的au...
2020-03-03 15:52:48
974
原创 mongodb之(8)mongodb部署及维护
1、副本集部署教程1.1、要求三个成员副本集提供足够的冗余以承受大多数网络分区和其他系统故障。这些副本集也具有足够的容量用于许多分布式读取操作。副本集应始终具有奇数个成员。这可确保选举顺利进行。对于生产部署,应该通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。当使用虚拟机进行生产部署时,应将每个mongod实例放在由冗余电源电路和冗余网络路径服务的单独h...
2020-01-04 14:58:19
1952
1
原创 mongodb之(7)mongodb副本集
MongoDB 中的副本集是一组mongod进程,它们维护相同的数据集。副本集提供冗余和高可用性,并且是所有生产部署的基础。通过在不同数据库服务器上提供多个数据副本,复制集可以保证对一定数量的数据库服务断开级别容错。在某些场景下,clients可以通过将读操作发送到复制集的不同服务器来提高读取并发量。同时,在不同数据中心维护数据副本可以增加分布式应用程序中数据的本地性和可用性。...
2020-01-04 14:47:46
1338
原创 mongodb之(6)mongodb集合与索引
1、集合1.1、创建集合MongoDB 中使用 createCollection() 方法来创建集合。语法格式:db.createCollection(name, options)参数说明:name: 要创建的集合名称options: 可选参数, 指定有关内存大小及索引的选项options参数:字段类型描述cappedBool(可选)...
2020-01-04 14:32:41
554
原创 mongodb之(4)mongodb聚合管道
1、聚合查询聚合查询主要使用聚合框架对集合中的文档进行变换与组合,以实现对文档的一连串处理。这些处理包含筛选(Filtering)、投射(projecting)、分组(grouping)、排序(sorting)、限制(limiting)和跳过(skipping)。聚合操作通过管道操作符进行处理,每个操作符都会接受一连串的文档,对这些文档做一些类型转换,最后将转换后的文档作为结果...
2019-12-31 21:14:06
247
原创 mongodb之(3)mongodb常用命令及查询
1、数据库管理命令1.1、查看数据show dbs:可以查看当前mongod中的所有数据库;db:可以查看当前连接对应的数据库;> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB> dbcity1.2、创建数据库use DATABASE_NAME:如果无...
2019-12-31 20:56:44
325
原创 mongodb之(2)mongod.conf参数详解
1、系统日志(systemLog)配置示例:systemLog: verbosity: 0 quiet: false traceAllExceptions: true syslogFacility: user path: /mongodb/log/mongo.log logAppend: false logRotate: rename...
2019-12-31 00:06:06
1138
1
原创 mongodb之(1)mongodb数据库简介
1、mongodb简介MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据...
2019-12-30 22:50:38
1211
原创 java并发编程(7):CompletableFuture异步框架源码详解及实例
CompletableFuture为异步编程框架,当我们在使用线程池处理任务时,我们只能通过阻塞的Future#get()获取异步的结果,当任务处理需要的时间比较长时,效率和性能就会比较差。而CompletableFuture弥补了Future,其主要是在任务处理完成后,调用应用的回调函数,这样应用就无需通过Future#get()的方式获取处理结果,而是通过任务的回调来通知应用结...
2019-11-02 10:40:58
275
原创 java并发编程(6):BlockingQueue相关源码详解
BlockingQueue的类继承结构如下,其主要实现类有:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue,LinkedTransferQueue。BlockingQueue的类继承结.png1、ArrayBlockingQueueArrayBlocking...
2019-11-02 07:23:16
98
原创 java并发编程(5):Executors源码详解
Executors为快速创建线程池的工具类,其可以创建基于ThreadPoolExecutor、ScheduledThreadPoolExecutor、ForkJoinPool及包装的不可配置的线程池。1、newFixedThreadPool()创建固定数量的普通线程池有如下实现://nThread为线程池中线程的数量public static ExecutorServic...
2019-11-01 09:06:54
78
原创 java并发编程(4):ForkJoinPool框架源码详解
1、ForkJoinPool简介ForkJoinPool运用fork-join的原理,使用分而治之的思想,将大任务进行拆分,直到拆分成无法可再拆分的最小单元,并将拆分后的任务分配给多线程执行,最终再将执行结果进行join。同时利用工作窃取算法,使得任务能及时被空闲线程处理。故ForkJoinPool适于可将大任务分割成类似的小任务的场景。1.1、ForkJoinPool类继承结...
2019-10-30 23:11:08
320
原创 java并发编程(3):ScheduledThreadPoolExecutor源码详解
1、基本概念ScheduledThreadPoolExecutor继承于ThreadPoolExecutor,其功能主要和ThreadPoolExecutor类似,也是基于线程池的任务调度。但ScheduledThreadPoolExecutor的不同点在于其可以基于时延及周期时间进行任务调度,而其实现这些功能是基于一些特殊的机制的。1.1、ScheduledExecutorS...
2019-10-12 09:10:49
130
原创 java并发编程(2):ThreadPoolExecutor源码详解
ThreadPoolExecutor的继承结构如下:ThreadPoolExecutor继承结构.png1、ExecutorService及AbstractExecutorService源码解析1.1、ExecutorService接口ExecutorService定义了线程终止、任务提交相关的接口。public interface ExecutorServi...
2019-10-11 19:41:37
101
原创 java并发编程(1):并发编程框架简介
1、Executor框架Executor框架构建线程池及任务调度处理。Executor框架.pngExecutor接口:线程执行的基本接口,用户通过此接口提交任务给线程或线程池执行;ExecutorSevice接口:线程池相关操作接口,定义了线程池的维护、任务提交及状态维护等相关接口;AbstractExecutorService抽象类:ExecutorSev...
2019-10-09 19:57:12
143
原创 搜索引擎Lucene(7):索引性能优化
1、性能调优1.1、索引-搜索时延调优索引一搜索时延是指从添加、更新或删除索引中的文档开始,直到用户在搜索中看见上述操作结果之间的时间跨度。对于很多应用程序来说,该性能指标是很重要的。但由于 Reader 通常只在被打开时的“特定时间”来展现索引,所以减少索引-搜索时延的唯一方法就是在程序中多次重新开启 Reader 。所幸的是, Luccne中的近实时搜索功能会将这个转换时...
2019-09-21 00:07:30
442
原创 搜索引擎Lucene(6):查询结果高亮及词频提取
1、结果高亮Lucene对高亮显示提供 了两种实现模式,Highlighter和FastVectorHighlighter。FastVectorHighlighter速度快,功能更完美。但其是有一定条件的,在使用FastVectorHighlighter创建索引时,需要存储Field分词信息(TermVector.WITH_POSITIONS_OFFSETS),而Highligh...
2019-09-20 07:06:02
687
原创 搜索引擎Lucene(5):搜索执行过程及搜索类型
1、搜索处理示例public class Searcher { public static void search(String indexDir, String q) throws IOException, ParseException { // 得到读取索引文件的路径 Directory dir = FSDirectory.open(P...
2019-09-19 09:19:09
250
原创 搜索引擎Lucene(4):索引的创建过程
1、索引维护创建索引的过程如下:建立索引器 Indexwriter。建立文档对象 Document。建立信息字段对象 Field。将 Field 添加到 Documeni 里面。将 Document 添加到 Indexwriter里面。关闭索引器 Indexwriter。索引结构如下:索引结构.pngIndexWriter结构:Ind...
2019-09-17 07:08:51
560
原创 搜索引擎Lucene(3):评分公式
1、评分公式评分公式.pngcoord(q,d):一个评分因子,基于有多少个查询terms 在特定的文档中被找到。通常一篇包含了越多的查询terms 的文档将比另一篇包含更少查询terms 的文档获得更高的分数。这是一个搜索时的因子是在搜索的时候起作用,它在Similarity 对象的coord(q,d)函数中计算。queryNorm(q):一个修正因子,用来...
2019-09-16 06:58:55
392
原创 搜索引擎Lucene(2):索引文件结构及格式
1、索引总体结构1.1、索引层次结构Lucene的索引结构主要分以下几个层次:索引结构.png索引(Index):在Lucene中一个索引是放在一个文件夹中的。同一文件夹中的所有的文件构成一个Lucene索引。段(Segment):一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。具有相同前缀文件的属同一个段。...
2019-09-15 22:54:30
975
原创 搜索引擎lucene(1):总体架构
1、lucene的总体架构1.1、lucene的特点高效、可扩展的全文检索库;仅支持纯文本的索引(Indexing)和搜索(Search);搜索排名——最好的结果显示在最前面;许多强大的查询类型:短语查询、通配符查询、近似查询、范围查询等;对字段级别搜索(如标题,作者,内容);可以对任意字段排序;支持搜索多个索引并合并搜索结果;支持更新操作和查询操作同时进行;...
2019-09-14 15:28:09
179
原创 java锁(8)工具类CountDownLatch、CyclicBarrier、Semaphore详解
1、CountDownLatch实现CountDownLatch的实现基于AQS的共享模式,其Sync实现如下:private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014...
2019-07-19 08:04:12
133
原创 java锁(7)改进读写锁StampedLock详解
1、StampedLock特性StampedLock是JDK 8新增的读写锁,跟读写锁不同,它并不是由AQS实现的。它的state为一个long型变量,状态的设计也不同于读写锁,且提供了三种模式来控制 read/write 的获取,并且内部实现了自己的同步等待队列。1.1、StampedLock读写锁写锁:使用writeLock方法获取,当锁不可用时会阻塞,获取成功后返回一个...
2019-07-19 07:58:56
183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人