大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说分布式数据库中间件对比总结_数据库中间件对比,希望您对编程的造诣更进一步.
简单解释一下:当有一天我们的数据库存储了海量的数据时,查询出来的数据就会变慢了,这时我们就要分库分表了。所以就出现了数据库中间件。
下面举个例子说明一下:
本来您所在的城市里是只有一条道路的,每天大概有200辆车通过这里,还不算堵,突然有一天,车辆增加到了5000辆,这时这条道路一整天都在堵着了,这时政府部门开始行动起来了,增加了两条道路,把您所在的城市的一条道路变成了三条道路,每条道路只能通过不一样的车辆,这样就解决了堵的问题了。我这么说有没有理解了呢,如果理解了就给我点赞吧。如果不理解的话,也没有关系您可以通过下面的学习,回过头来再看一下这个例子那时候您可能就会明白了。
当然还有另外一款分布式数据库中间件:mycat官网
官网
安装并启动
java环境
首先配置好java环境: cmd 命令下执行 java -version
:
链接:pan.baidu.com/s/1ofb6h2k4… 提取码:v36b
mysql
我采用的mysql版本是:8.0.12
下载sharding-proxy4.1.1
如果后端连接MySQL数据库,需要下载mysql-connector-java-5.1.47 解压缩后,将mysql-connector-java-5.1.47.jar
拷贝到${sharding-proxy}\lib
目录。
你也可以在mvnrepository.com/进行搜索mysql-connector-java
,然后下载8.0.12的jar包。这两个jar包我都试过,可以正常运行。
启动sharding-proxy4.1.1
首先解压apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz
,解压后会看到有以下目录结构:
第一步:修改conf/server.yaml
authentication:
users:
root:
password: root # sharding-proxy数据库的root密码为root
sharding:
password: sharding
authorizedSchemas: sharding_db
props:
max.connections.size.per.query: 1
acceptor.size: 16 # 用于设置接收客户端请求的工作线程个数,默认为CPU核数*2
executor.size: 16 # 工作线程数量,默认值: CPU核数
proxy.frontend.flush.threshold: 128 # The default value is 128.
# LOCAL: Proxy will run with LOCAL transaction.
# XA: Proxy will run with XA transaction.
# BASE: Proxy will run with B.A.S.E transaction.
proxy.transaction.type: LOCAL
proxy.opentracing.enabled: false # 是否开启事务, 目前仅支持XA事务,默认为不开启
proxy.opentracing.enabled: false # 是否开启链路追踪功能,默认为不开启
query.with.cipher.column: true
sql.show: false # 是否开启SQL显示,默认值: false
第二步:修改逻辑数据源-分库分表 : conf/config-sharding.yaml
schemaName: sharding_db # 逻辑库名称
# 数据源配置
dataSources:
ds_0:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
username: root # 所对应的数据库账号
password: 123123 # 对应的有数据库密码
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
shardingRule:
tables:
t_order:
actualDataNodes: ds_${0}.t_order_${0..1}
tableStrategy:
inline:
shardingColumn: order_id
algorithmExpression: t_order_${order_id % 2}
keyGenerator:
type: SNOWFLAKE
column: order_id
bindingTables:
- t_order
defaultDatabaseStrategy:
inline:
shardingColumn: user_id
algorithmExpression: ds_${0}
defaultTableStrategy:
none:
注意: 数据库的话,记得自己创建好了。
上面采用的是:单库两张表的分法。奇数分一张表,偶数分一张表。
actualDataNodes :
-
ds_${0}.t_order_${0..1}
这个会分成两张表:t_order_0,t_order_1
-
如果是
ds_${0}.t_order_${0..2}
就会分成三张表:t_order_0,t_order_1,t_order_2
最后一步:执行 bin/start文件
windows系统就执行start.bat, linux系统就执行start.sh。
sharding-proxy
sharding-proxy中间件默认采用的数据库端口是:3307。
在上面conf/config-sharding.yaml
我采用的是mysql
进行链接,所以我们可以通过mysql
cmd进行操作:
mysql -uroot -P3307 -p
查看当前sharding-proxy的库
show databases;
创建一张表为:t_order
然后往这张表里加入不同的数据,然后再连接上conf/config-sharding.yaml
里配置的数据库。可以看到如下:
t_order_0 表的数据
t_order_1 表的数据
通过上面的两张表可以看到来,是通过order_id进行划分的,采用奇偶分表法。
sharding-Proxy 分库分表
第一步:修改 conf/server.yaml
authentication:
users:
root:
password: root
sharding:
password: sharding
authorizedSchemas: demo # 逻辑库
# authorizedSchemas: sharding_db
props:
max.connections.size.per.query: 1
acceptor.size: 16 # 用于设置接收客户端请求的工作线程个数,默认为CPU核数*2
executor.size: 16 # 工作线程数量,默认值: CPU核数
proxy.frontend.flush.threshold: 128 # The default value is 128.
# LOCAL: Proxy will run with LOCAL transaction.
# XA: Proxy will run with XA transaction.
# BASE: Proxy will run with B.A.S.E transaction.
proxy.transaction.type: LOCAL
proxy.opentracing.enabled: false # 是否开启事务, 目前仅支持XA事务,默认为不开启
proxy.opentracing.enabled: false # 是否开启链路追踪功能,默认为不开启
query.with.cipher.column: true
sql.show: true # 是否开启SQL显示,默认值: false
第二步:修改 conf/config-sharding.yaml
schemaName: demo # 使用逻辑库
# schemaName: sharding_db
dataSources:
ds_0:
url: jdbc:mysql://127.0.0.1:3306/demo0?serverTimezone=UTC&useSSL=false
username: root
password: 123123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
ds_1:
url: jdbc:mysql://127.0.0.1:3306/demo1?serverTimezone=UTC&useSSL=false
username: root
password: 123123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
shardingRule:
tables:
t_order:
actualDataNodes: ds_${0..1}.t_order_${0..1}
tableStrategy:
inline:
shardingColumn: order_id
algorithmExpression: t_order_${order_id % 2}
keyGenerator:
type: SNOWFLAKE
column: order_id
t_order_item:
actualDataNodes: ds_${0..1}.t_order_item_${0..1}
tableStrategy:
inline:
shardingColumn: order_id
algorithmExpression: t_order_item_${order_id % 2}
keyGenerator:
type: SNOWFLAKE
column: order_item_id # 主键
bindingTables:
- t_order,t_order_item
defaultDatabaseStrategy:
inline:
shardingColumn: user_id
algorithmExpression: ds_${user_id % 2}
defaultTableStrategy:
none:
从上面可以看出: 分库是通过user_id
进行分库的,如下:
defaultDatabaseStrategy:
inline:
shardingColumn: user_id
algorithmExpression: ds_${user_id % 2}
分表是通过order_id
进行分表的,如下:
tables:
t_order:
actualDataNodes: ds_${0..1}.t_order_${0..1}
tableStrategy:
inline:
shardingColumn: order_id
algorithmExpression: t_order_${order_id % 2}
keyGenerator:
type: SNOWFLAKE
column: order_id
t_order_item:
actualDataNodes: ds_${0..1}.t_order_item_${0..1}
tableStrategy:
inline:
shardingColumn: order_id
algorithmExpression: t_order_item_${order_id % 2}
keyGenerator:
type: SNOWFLAKE
column: order_item_id
创建库
在3306端口的mysql数据库中创建好两个数据库:demo0和demo1。
启动sharding-Proxy
由于我是在windows系统下进行的:所以我这边是鼠标双击:bin/start.bat
。
连接逻辑库(sharding-Proxy数据库的)。
由于sharding-Proxy
的数据库端口是:3307,可以通过cmd进行连接:
mysql -uroot -P3307 -p
查看库
通过查看数据库可以看出:目前存在上面配置好的逻辑库。里面是没有表的。需要我们进行创建表。
创建t_order表
先使用 use demo
;
然后我们进行创建表:
CREATE TABLE `t_order` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`status` varchar(50) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=279205305122816001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
往刚创建的t_order表添加一些测试数据:
insert into t_order(order_id,user_id,status) value(1,2,'22');
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13583.html