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