随笔分类 -  DB及框架

摘要:一、Druid数据源连接池概念 ​ 对于连接来说,建立连接和销毁连接是非常耗时的,因此使用池化思想,将连接放入连接池中,便于复用。 ​ 1、Druid 中连接的概念 ​ 由于将连接放入了连接池,那么就存在两个维度的连接,一个是在连接池中真实的物理连接,一个是应用角度获取到的连接,即逻辑连接。物理连接 阅读全文
posted @ 2023-12-24 14:00 李聪龙 阅读(601) 评论(0) 推荐(0)
摘要:一、架构分析 ​ Druid类图如下所示: ​ 两大核心类:DruidDataSource和DruidAbstractDataSource ​ 连接有效性check:从连接池中获取连接后会做有效性check,在类中有ValidConnectionChecker接口,对应有不同数据库的实现 ​ 异常处 阅读全文
posted @ 2023-12-24 13:58 李聪龙 阅读(891) 评论(0) 推荐(0)
摘要:一、Druid基本配置 1、基于Spring配置文件的方式 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai datasource: druid: driver-class-name: com.mys 阅读全文
posted @ 2023-12-11 13:39 李聪龙 阅读(141) 评论(0) 推荐(0)
摘要:## 一、分布式事务的实现策略和模式 ### (一)分布式事务理论模型 ​ 1、分布式事务理论模型 ​ (1)强XA和弱XA ​ 强XA就是要求任何一次读都能读到某个数据的最近一次写的数据。系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。简言之,在任意时刻,所有节点中的数据是一样的。 ​ 阅读全文
posted @ 2023-08-28 22:42 李聪龙 阅读(123) 评论(0) 推荐(0)
摘要:## 一、使用分布式缓存Redis ### (一)分布式缓存和Redis ​ 1、多级缓存 ​ 在一个简单的请求链路中,会经过Nginx、Redis、Tomcat、数据库,其中Nginx、Redis、Tomcat都有缓存存在,这也是常说的多级缓存。 ​ ​ 2、缓存的作用与应用场景 ​ 使用缓存主要 阅读全文
posted @ 2023-07-07 16:18 李聪龙 阅读(197) 评论(0) 推荐(0)
摘要:一、使用Elastic Stack构建搜索能力 (一)搜索场景和解决方案 ​ 搜索是互联网系统的底层基础能力。 ​ 1、搜索引擎的基本特性和应用场景 ​ 搜索引擎的业务特征:以文本为中心,以读取为主操作,面向文档,灵活的、非结构化数据模式、内容关联性 ​ 搜索引擎的技术特征:海量文档数据、可扩展、容 阅读全文
posted @ 2023-04-20 19:20 李聪龙 阅读(142) 评论(0) 推荐(0)
摘要:一、引入ShardingSphere (一)分库分表理论和解决方案 ​ 1、对于 IM 聊天记录的存储的选型: ​ 关系型数据库仍然是业务数据基石,因为关系型数据存有稳定性、可靠性和事务性的优势 ​ 但是如果用关系型数据库,就会存在单表容量问题:如MySQL单表千万级 ​ 为了解决单表瓶颈问题,就需 阅读全文
posted @ 2023-04-13 20:54 李聪龙 阅读(304) 评论(0) 推荐(0)
摘要:一、使用Mybatis-Plus对数据访问进行扩展 1、MyBatis-Plus开发模式 (1)为什么用Mybatis-Plus ​ Mybatis的问题: ​ 通过原生SQL语句操作业务数据,自动化程度不高;通过繁杂的XML配置来映射字段和属性,影响开发效率;对字段名称的识别和校验不友好,易出错且 阅读全文
posted @ 2023-03-12 11:24 李聪龙 阅读(384) 评论(0) 推荐(0)
摘要:一、使用Springboot开发 WebAPI 1、Maven使用 (1)packaging的使用 ​ 通常的做法是先指定一个pom文件,做一个整体的框架,然后在pom中添加不同的子项目。 ​ 那么在父工程的pom文件中就需要指定packaging为pom <groupId>com.lcl.gala 阅读全文
posted @ 2023-03-11 21:52 李聪龙 阅读(186) 评论(0) 推荐(0)
摘要:一、单机搭建 1、安装与启动 # 1.下载社区版 MongoDB 4.1.3 # 下载地址:https://www.mongodb.com/download-center#community wget https://fastdl.mongodb.org/linux/mongodb-linux-x8 阅读全文
posted @ 2022-11-16 20:28 李聪龙 阅读(127) 评论(0) 推荐(0)
摘要:一、多套数据源 1、独立数据库连接信息 Spring Boot 的默认配置文件是 application.properties ,由于有两个数据库配置,独立配置数据库是好的实践,因此添加配置文件 jbdc.properties ,添加以下自定义的主从数据库配置: # db01 spring.data 阅读全文
posted @ 2022-06-18 16:58 李聪龙 阅读(12507) 评论(0) 推荐(2)
摘要:一、数据库表设计 (一)配置规范 1. MySQL 数据库默认使用 InnoDB 存储引擎。 2. 保证字符集设置统一,MySQL 数据库相关系统、数据库、表和字段的字符集都用 UTF8,应用程序连接、展示、客户端等可以设置字符集的地方也都统一设置为 UTF8 字符集。 3. Mysql数据库的事务 阅读全文
posted @ 2022-06-17 21:17 李聪龙 阅读(1016) 评论(0) 推荐(0)
摘要:在Druid连接池的工作过程中,会用到一些计数器对Druid的情况进行判断。然后根据计数器的数据采取一系列操作,整理如下: 1.统计类的计数器 变量名 类型 说明 connectCount long getConnectionInternal被调用之后就会增加,意味着连接被get的次数。 close 阅读全文
posted @ 2022-05-20 23:44 李聪龙 阅读(806) 评论(0) 推荐(0)
摘要:DruidPooledConnection中的状态: 字段 类型 所在类 默认值 说明 closed volatile boolean DruidPooledConnection false 关闭状态,recycle到连接池中的连接会修改为true。但是这个状态通常只在checkStateInter 阅读全文
posted @ 2022-05-19 20:17 李聪龙 阅读(602) 评论(0) 推荐(0)
摘要:有关于Druid的removeAbandoned机制,在getConnection源码中介绍过。removeAbandoned实际上就是Druid的泄露检测机制。主要的参数有: 参数 说明 removeAbandoned 如果连接泄露,是否需要回收泄露的连接,默认false; logAbandone 阅读全文
posted @ 2022-05-19 00:36 李聪龙 阅读(256) 评论(0) 推荐(0)
摘要:Druid中的Connection在使用之后,要进行回收,而回收连接的方法就是recucle方法。 回收的主要目的是将连接的状态清空/重置之后,放置到连接池的connections数组的尾部,然后发送连接池lock的notEmpty条件变量通知消息,让等待的消费者线程来获取连接。 一、回收过程 回收 阅读全文
posted @ 2022-05-17 23:08 李聪龙 阅读(901) 评论(0) 推荐(0)
摘要:在阅读DruidDataSource源码的过程中,发现DruidConnectionHolder有个特别的属性PreparedStatementPool statementPool。 根据经验可知,这是DruidPreparedStatement进行缓存的cache。我们在使用PreparedSta 阅读全文
posted @ 2022-05-17 00:00 李聪龙 阅读(3369) 评论(0) 推荐(0)
摘要:由于微服务对应的库表拆分,导致原来在一个库中的数据可能被分散到多个数据库中,一个业务流程可能涉及多个数据库,如何保证在多个库中的数据的事务问题,是一个常见的微服务问题,一般会有强一致性和最终一致性两种解决方案,强一致性表示必须同时成功或同时失败,最终一致性表示只要最终的状态是同时成功或者同时失败即可 阅读全文
posted @ 2022-05-16 16:36 李聪龙 阅读(1038) 评论(0) 推荐(0)
摘要:shrink方法是DestroyTask线程中回收连接的具体执行方法。 首先获得锁: try { lock.lockInterruptibly(); } catch (InterruptedException e) { return; } 之后,要判断初始化状态是否完成,如果采用异步初始化,可能De 阅读全文
posted @ 2022-05-15 03:04 李聪龙 阅读(345) 评论(0) 推荐(0)
摘要:DruidDataSource连接池实现了javaX.sql包中DataSource接口的全部方法。getConnection也来自于javaX.sql.DataSource接口。 而DruidPooledConnection也实现了接口java.sql.Connection。 这样就能在各种场景中 阅读全文
posted @ 2022-05-14 00:56 李聪龙 阅读(2523) 评论(0) 推荐(0)