SmartDb 读写分离、多数据源等看似高端的技术使用和原理分析
SmartDb 支持多数据源、多数据库、读写分离是如何使用的以及如何做到的,那么这次带你去看下原理。
1、前提
通过前几篇的文章,相信你已经会使用了SmartDb的操作,但是此刻需要再次强调一个东西: 一个SmartDb对象代表着一个数据库集群( 包含 1个主库,n 个从库 , n 可以为0 )
具体可以看下SmartDb实现类源码SmartDbImpl
:
java
class SmartDbImpl implements SmartDb {
/**
* 随机获取slave库的索引
*/
private AtomicInteger roundIndex = new AtomicInteger(-1);
/**
* 主库 ( 写 库 )
*/
private SmartDbNode master;
/**
* 从库 ( 读 库 )
*/
private List<SmartDbNode> slaves;
/**
* smartdb 配置信息
*/
private SmartDbConfig smartDbConfig;
/**
* 是否存在 从库( 读 库 )
*/
private boolean existSlave;
SmartDbNode
表示一个集群中的一个数据库节点(节点表示一个数据库实例),可以看到 SmartDb对象中有 一个master和一个List的 slaves,此刻你应该能理解了
2、读写分离
默认所有的 查询 操作,都是在 slaves 节点中执行的,系统会使用 上面代码中的 roundIndex
按照顺序拿到从库的一个数据库Node节点进行 sql 查询操作的。代码如下
java
public SmartDbNode getSmartDbNode4Query() {
if (this.existSlave) {//如果存在 从库(读库)
int round = this.roundIndex.incrementAndGet();
return this.slaves.get(Math.abs(round % this.slaves.size()));
} else { // 不存在读库,则使用 主库(写库)
return this.master;
}
}
demos:
java
smartDb.queryList(User.class, "select * from user" ); // 从库(读库)读取
smartDb.execute("delete from user where id = 1"); // 写库(主库)执行:增加、删除、修改、批量、事务等
如果想在 从库(读库)进行 查询数据如何操作呢?
java
smartDb.getMaster() // 先获取 主库(写库)
.queryList(User.class, "select * from user" ); // 在 写库(主库)上读取
有没有很简单呢?
3、更多Demo
请看项目: https://gitee.com/lab1024/smartdb-demos
联系我们
1024创新实验室-主任:卓大,混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室 致力于成为中原领先、国内一流的技术团队, 以AI+数字化为驱动,用技术为产业互联网提供无限可能, 业务如下:
- 教育(就业创业大数据平台、继续教育平台、在线教育系统、题库、医学考试、专升本等)
- 供应链(网络货运、大宗贸易进销存ERP、物流TMS、B2B电商、仓储WMS、AI提效等)
- 中医大健康(诊所数字化管理、AI辅助诊疗、中医适宜技术、在线问诊、空中药房等)
- AI+软件(软件定制外包、数据大屏、国产化改造、人员外包、技术顾问、技术培训等)
- 欢迎各类合作哦,一起赚钱~
![]() | ![]() | ![]() | ![]() |
加微信: 卓大 拉你入群,一起学习 | 公众号 :六边形工程师 分享:赚钱、代码、生活 | 请 “1024创新实验室” 烩面里加肉 咖啡配胡辣汤,提神又饱腹 | 抖音 : 六边形工程师 直播:赚钱、代码、中医 |