首页 > 数据库 >DB-Router 数据库路由组件

DB-Router 数据库路由组件

时间:2024-03-21 16:35:25浏览次数:28  
标签:分库 不同 数据库 DB 拆分 分表 Router 数据 路由

1. 数据库表主要为水平拆分,将大量的日志数据拆分到不同的表中

首先我们要知道为什么要用分库分表,其实就是由于业务体量较大,数据增长较快,所以需要把用户数据拆分到不同的库表中去,减轻数据库压力。
分库分表操作主要有垂直拆分和水平拆分:
垂直拆分:指按照业务将表进行分类,分布到不同的数据库上,这样也就将数据的压力分担到不同的库上面。最终一个数据库由很多表的构成,每个表对应着不同的业务,也就是专库专用。
水平拆分:如果垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。如:user_001、user_002

2.包含的技术知识点

  • 是关于AOP切面拦截的使用,这是因为需要给使用数据库路由的方法做上标记,便于处理分库分表逻辑。
  • 数据源的切换操作,既然有分库那么就会涉及在多个数据源间进行链接切换,以便把数据分配给不同的数据库。
  • 数据库表寻址操作,一条数据分配到哪个数据库,哪张表,都需要进行索引计算。在方法调用的过程中最终通过 ThreadLocal 记录。
  • 为了能让数据均匀的分配到不同的库表中去,还需要考虑如何进行数据散列的操作,不能分库分表后,让数据都集中在某个库的某个表,这样就失去了分库分表的意义。

我需要用到的技术包括:AOP、数据源切换、散列算法、哈希寻址、ThreadLocal以及SpringBoot的Starter开发方式等技术

Threadlocal



3. 设计实现





4. 测试验证


资料自https://bugstack.cn/md/road-map/db-router.html#_1-threadlocal

标签:分库,不同,数据库,DB,拆分,分表,Router,数据,路由
From: https://www.cnblogs.com/xiaolibiji/p/18087629

相关文章

  • react router v6实现嵌套路由
    做一个简单的笔记有两种方式可以实现使用标签BrowserRouter来实现使用APIcreateBrowserRouter来实现注意:createBrowserRouter是6.4版本才引入的这是官方文档注意,这两个是不兼容的使用标签BrowserRouter来实现创建路由//src/router/index.tsxconstrouter=[......
  • react router v6报错 useRoutes() may be used only in the context of a <Router> comp
    在使用reactrouterv6版本的时候,按照之前的方法使用src/main.tsx是这样的,几乎不动import*asReactfrom"react";import*asReactDOMfrom"react-dom/client";import"~/assets/index.css";importAppfrom"~/App.tsx";ReactDOM.createRoot(......
  • c/c++|gdb 单点调试 | 多点调试|查看栈中信息|具体变量
    设置断点,有什么好处,废话就不说了,可以去看手册设置断点,参考bxxx.cpp:n某个源文件的某行bfunc1调试某个函数编译g++test_gdb_watch.cpp-g设置断点bpowerr出现报错Missingseparatedebuginfos,use:debuginfo-installglibc-2.17-326.el7_9.x86_64libg......
  • gdb调试
    在开发定位过程中,肯定会用到gdb去跟踪定位分析问题,下面是记录一些常用的命令,方便后续查找。1:比如我要自己编译一个小程序,然后想用gdb去跟踪,在GDB下调试一个小程序的基本步骤如下:          1.编写源代码://hello.c#include<stdio.h> int......
  • MySQL InnoDB Instant schema 变更注意点
    在MySQL8.0.12中为DDL引入了新的算法,在修改表的定义的时候不会阻塞。第一个instant操作是在表的最后增加一个列,这是腾讯游戏团队贡献的。在8.0.29中,官方增加在任意位置增加或删除列的instant操作。本文要讲的是盲目使用该特性会带来的危害。 默认算法从MySQL8.0......
  • python轻量数据库TinyDB使用
    安装pipinstalltinydb特性1.轻量易用2.JSON数据存储,使用json格式存储数据,类似mongodb数据库。3.支持查询和过滤4.支持事务5.可插件拓展示例fromtinydbimportTinyDB,Query​#创建数据库db=TinyDB('my_db.json') #会在本地创建一个"my_db.json"文件作为数据......
  • GDB
    GDBGDB能够允许查看程序执行时的内部情况,或者在程序出现崩溃的瞬间正在做什么。GDB可以做四种主要的功能来帮助捕获错误:启动程序,指定可能影响其行为的变量或条件使程序在指定条件或者位置停止检查程序停止时发生了什么更改程序中的内容,以便可以尝试更正当前已了解到的错......
  • Modbus转Profinet网关解决Modbus轮询速度慢的问题
    当面临Modbus轮询速度慢的情况时,可以通过使用Modbus转Profinet网关(XD-MDPN100)来解决这一问题。Modbus转Profinet网关可以帮助提高数据传输的效率和速度,使传输更加快捷和稳定。Modbus转Profinet网关(XD-MDPN100)通过将Modbus协议转换为Profinet协议,可以实现不同设备之间的无缝通信,避......
  • Android 逆向(四) - adb常用逆向命令
    Android逆向(四)-adb常用逆向命令本篇文章继续记录下adb的一些常用逆向命令.1:adbshellps该命令可以查看进程信息.用法:adbshellps|grep[pname]zh@zh:~/workSpace$adbshellpsUSERPIDPPIDVSZRSSWCHANADDRSNAME......
  • OSPF-1类Router LSA学习
    前面我们又复习了一遍OSPF概述,在OSPF建立关系后有几种交互报文,通过LSU类型报文包含LSA信息实现路由信息传递,常见了1、2、3、4、5、7类LSA,分别对应不同功能使用。这里先看下1类LSA-RouterLSA。一、LSA概述LSA,全称为LinkStateAdvertisement,即链路状态通告,是OSPF(OpenSho......