专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

sharding-proxy之操作

单库单表

第一步:修改conf/server.yaml

authentication:
 users:
   root:
     password: root
   sharding:
     password: sharding
     authorizedSchemas: test

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: test # 逻辑库名称

dataSources:
 ds_0:
   url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
   username: root # demo_ds_0数据库的账号
   password: 123123 # demo_ds_0数据库的账号对应的密码
   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}:会在demo_ds_0这个数据库中创建二张表:t_order_0和t_order_1
  • algorithmExpression: t_order_${order_id % 2}:分表,主要是把添加的数据放入到哪张表中。这里采用取模的方式进行分表。在这里要 注意一下 : order_id必须是整数,不能是字符串,如果是字符串的数字的话,可以通过如下进行转换:Integer.parseInt(order_id)
  • algorithmExpression: ds_${0} : 分库,因为这里是单库,所以这里不采用任何的方式进行分库。

第三步:启动sharding-proxy

  • windows系统下运行:bin/start.bat
  • linux系统执行:bin/start.sh
  • 默认的端口是:3307

第四步:创建相应的表

sharding-proxy启动成功之后,进行cmd命令行界面,输入如下信息:

mysql -uroot -P3307 -p

然后就是输入你在配置conf/server.yaml文件中的users中的root里的password密码了。

然后使用:show databases; 查看当前有什么逻辑库。

67_1.png

上图的逻辑库是:conf/server.yaml中的authorizedSchemas所对应的test

然后再执行:use test;

你可以执行:show tables;查看当前库有没有表。

下面创建对应的表:

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;

上面的表结构字段比较少,你可以根据自己的需求来进行添加。

最后一步:测试

往刚刚创建的表添加一些测试数据:

insert into t_order(order_id,user_id,status) value(1,2,'22');

上面的数据会放入到t_order_0表还是t_order_1表呢?

在配置conf/config-sharding.yaml文件时,里面的分表结构是这样的:algorithmExpression: t_order_${order_id % 2},可以看出是通过添加数据的order_id取模 2 进行划分表的。那这样的话,上面添加的数据可以得出:order_id = 1 取模 2 之后是 1 ,所以上面添加的数据是放入到了t_order_1这张表中。

再来一次试一下:

insert into t_order(order_id,user_id,status) value(2,2,'22');

这条order_id 取模 2 之后是 0,所以该数据放在t_order_0这张表中。

单库单表扩展

上面采用分表是分成两张表,假设我们有100万的数据量,如果你采用的mysql数据库的话,当数据表中数据量越大了,会影响到你查询出来的语句很慢。而我们上述分成了两张表,100万的数据量,每张表分得50万的数据。这样子总比一张表好是吧。

那怎么样分成更多的表呢?

分成十张表

分成十张表的规则就是:

修改conf/config-sharding.yaml:

shardingRule:
 tables:
   t_order:
     actualDataNodes: ds_${0}.t_order_${0..9}
     tableStrategy:
       inline:
         shardingColumn: order_id # 分表字段
         algorithmExpression: t_order_${order_id % 10}
     keyGenerator:
       type: SNOWFLAKE
       column: order_id

这里主要是使用order_id的尾数进行划分表。

我目前能想到的就是十张表,你如果能使用单库划分十张以上的表的话,可以跟我说一下,谢谢。

多库单表

第一步:修改conf/server.yaml

authentication:
 users:
   root:
     password: root
   sharding:
     password: sharding
     authorizedSchemas: test

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: test

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
 ds_1:
   url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
   username: root
   password: 123123
   connectionTimeoutMilliseconds: 30000
   idleTimeoutMilliseconds: 60000
   maxLifetimeMilliseconds: 1800000
   maxPoolSize: 50

shardingRule:
 tables:
   tasklist:
     actualDataNodes: ds_${0..1}.tasklist_${0..9}
     tableStrategy:
       inline:
         shardingColumn: id
         algorithmExpression: tasklist_${id % 10}
     keyGenerator:
       type: SNOWFLAKE
       column: id
 bindingTables:
   - tasklist
 defaultDatabaseStrategy:
   inline:
     shardingColumn: sucaiid
     algorithmExpression: ds_${Integer.parseInt(sucaiid) % 2}
 defaultTableStrategy:
   none:

自行在3306端口的mysql中创建好demo_ds_0demo_ds_1两个数据库。

第三步:启动sharding-proxy

  • windows系统下运行:bin/start.bat
  • linux系统执行:bin/start.sh
  • 默认的端口是:3307

第四步:创建相应的表

sharding-proxy启动成功之后,进行cmd命令行界面,输入如下信息:

mysql -uroot -P3307 -p

然后就是输入你在配置conf/server.yaml文件中的users中的root里的password密码了。

然后使用:show databases; 查看当前有什么逻辑库。

67_2.png

上图的逻辑库是:conf/server.yaml中的authorizedSchemas所对应的test

然后再执行:use test;

你可以执行:show tables;查看当前库有没有表。

下面创建对应的表:

CREATE TABLE `tasklist` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `sucaiid` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=279205305122816001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

上面的表结构字段比较少,你可以根据自己的需求来进行添加。

最后一步:测试

往刚刚创建的表添加一些测试数据:

insert into t_order(id,user_id,sucaiid) value(2,21,'22');

该数据存放在:demo_ds_1数据库中的tasklist_2数据表中。

介绍

上面的多库多表:双库双表,每个库中划分十张表。首先是根据sucaiid划分库,然后再根据id划分表。表的数据结构是一样的

文章永久链接:https://tech.souyunku.com/46810

未经允许不得转载:搜云库技术团队 » sharding-proxy之操作

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们