分布式数据库中间件对比总结_数据库中间件对比

分布式数据库中间件对比总结_数据库中间件对比简单解释一下:当有一天我们的数据库存储了海量的数据时,查询出来的数据就会变慢了,这时我们就要分库分表了。所以就出现了数据库中间件。 本来您所在的城市里是只有一条道路的,每天大概有200辆车通过这里,还不算堵,突然有一天,车辆增加到了5000辆,这时这条道路一整天都在堵着了,这时…

简单解释一下:当有一天我们的数据库存储了海量的数据时,查询出来的数据就会变慢了,这时我们就要分库分表了。所以就出现了数据库中间件。

下面举个例子说明一下:

本来您所在的城市里是只有一条道路的,每天大概有200辆车通过这里,还不算堵,突然有一天,车辆增加到了5000辆,这时这条道路一整天都在堵着了,这时政府部门开始行动起来了,增加了两条道路,把您所在的城市的一条道路变成了三条道路,每条道路只能通过不一样的车辆,这样就解决了堵的问题了。我这么说有没有理解了呢,如果理解了就给我点赞吧。如果不理解的话,也没有关系您可以通过下面的学习,回过头来再看一下这个例子那时候您可能就会明白了。

当然还有另外一款分布式数据库中间件:mycat官网

官网

ShardingSphere官网地扯

安装并启动

java环境

首先配置好java环境: cmd 命令下执行 java -version

分布式数据库中间件对比总结_数据库中间件对比

链接:pan.baidu.com/s/1ofb6h2k4… 提取码:v36b

mysql

我采用的mysql版本是:8.0.12

下载sharding-proxy4.1.1

官方网站

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进行链接,所以我们可以通过mysqlcmd进行操作:

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

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注