点击查看【bilibili】

目标

本章节以尽量短的时间,演示 PIG 框架如何整合 Apache ShardingSphere 完成分表操作 。

:::success 实现效果: 日志表根据 请求方法的不同 拆分为 GET、POST、PUT、DELETE 数据库 :::

image.png

快速上手

1. 添加 maven 依赖

  1. <dependency>
  2. <groupId>org.apache.shardingsphere</groupId>
  3. <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
  4. <version>5.1.2</version>
  5. </dependency>

2. 添加四张测试表

  1. CREATE TABLE `sys_log_GET` (
  2. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  3. `type` char(1) DEFAULT '1' COMMENT '日志类型',
  4. `title` varchar(255) DEFAULT '' COMMENT '日志标题',
  5. `service_id` varchar(32) DEFAULT NULL COMMENT '服务ID',
  6. `remote_addr` varchar(255) DEFAULT NULL COMMENT '操作IP地址',
  7. `user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理',
  8. `request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI',
  9. `method` varchar(10) DEFAULT NULL COMMENT '操作方式',
  10. `params` text COMMENT '操作提交的数据',
  11. `time` mediumtext COMMENT '执行时间',
  12. `del_flag` char(1) DEFAULT '0' COMMENT '删除标记',
  13. `exception` text COMMENT '异常信息',
  14. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  15. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  16. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  17. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  18. PRIMARY KEY (`id`),
  19. KEY `sys_log_create_by` (`create_by`),
  20. KEY `sys_log_request_uri` (`request_uri`),
  21. KEY `sys_log_type` (`type`),
  22. KEY `sys_log_create_date` (`create_time`)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='日志表';
  24. CREATE TABLE `sys_log_POST` (
  25. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  26. `type` char(1) DEFAULT '1' COMMENT '日志类型',
  27. `title` varchar(255) DEFAULT '' COMMENT '日志标题',
  28. `service_id` varchar(32) DEFAULT NULL COMMENT '服务ID',
  29. `remote_addr` varchar(255) DEFAULT NULL COMMENT '操作IP地址',
  30. `user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理',
  31. `request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI',
  32. `method` varchar(10) DEFAULT NULL COMMENT '操作方式',
  33. `params` text COMMENT '操作提交的数据',
  34. `time` mediumtext COMMENT '执行时间',
  35. `del_flag` char(1) DEFAULT '0' COMMENT '删除标记',
  36. `exception` text COMMENT '异常信息',
  37. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  38. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  39. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  40. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  41. PRIMARY KEY (`id`),
  42. KEY `sys_log_create_by` (`create_by`),
  43. KEY `sys_log_request_uri` (`request_uri`),
  44. KEY `sys_log_type` (`type`),
  45. KEY `sys_log_create_date` (`create_time`)
  46. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='日志表';
  47. CREATE TABLE `sys_log_PUT` (
  48. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  49. `type` char(1) DEFAULT '1' COMMENT '日志类型',
  50. `title` varchar(255) DEFAULT '' COMMENT '日志标题',
  51. `service_id` varchar(32) DEFAULT NULL COMMENT '服务ID',
  52. `remote_addr` varchar(255) DEFAULT NULL COMMENT '操作IP地址',
  53. `user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理',
  54. `request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI',
  55. `method` varchar(10) DEFAULT NULL COMMENT '操作方式',
  56. `params` text COMMENT '操作提交的数据',
  57. `time` mediumtext COMMENT '执行时间',
  58. `del_flag` char(1) DEFAULT '0' COMMENT '删除标记',
  59. `exception` text COMMENT '异常信息',
  60. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  61. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  62. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  63. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  64. PRIMARY KEY (`id`),
  65. KEY `sys_log_create_by` (`create_by`),
  66. KEY `sys_log_request_uri` (`request_uri`),
  67. KEY `sys_log_type` (`type`),
  68. KEY `sys_log_create_date` (`create_time`)
  69. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='日志表';
  70. CREATE TABLE `sys_log_DELETE` (
  71. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  72. `type` char(1) DEFAULT '1' COMMENT '日志类型',
  73. `title` varchar(255) DEFAULT '' COMMENT '日志标题',
  74. `service_id` varchar(32) DEFAULT NULL COMMENT '服务ID',
  75. `remote_addr` varchar(255) DEFAULT NULL COMMENT '操作IP地址',
  76. `user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理',
  77. `request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI',
  78. `method` varchar(10) DEFAULT NULL COMMENT '操作方式',
  79. `params` text COMMENT '操作提交的数据',
  80. `time` mediumtext COMMENT '执行时间',
  81. `del_flag` char(1) DEFAULT '0' COMMENT '删除标记',
  82. `exception` text COMMENT '异常信息',
  83. `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  84. `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  85. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  86. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  87. PRIMARY KEY (`id`),
  88. KEY `sys_log_create_by` (`create_by`),
  89. KEY `sys_log_request_uri` (`request_uri`),
  90. KEY `sys_log_type` (`type`),
  91. KEY `sys_log_create_date` (`create_time`)
  92. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='日志表';

3. nacos/pig-upms-biz-dev.yml 添加配置

  1. spring:
  2. shardingsphere:
  3. datasource:
  4. ds0:
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. type: com.zaxxer.hikari.HikariDataSource
  7. username: root
  8. password: root
  9. jdbc-url: jdbc:mysql://pig-mysql:3306/pig?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
  10. names: ds0
  11. props:
  12. sql-show: true
  13. rules:
  14. sharding:
  15. sharding-algorithms:
  16. table-inline:
  17. props:
  18. algorithm-expression: sys_log_$->{method}
  19. type: INLINE
  20. tables:
  21. sys_log:
  22. actual-data-nodes: ds0.sys_log_GET,ds0.sys_log_POST,ds0.sys_log_PUT,ds0.sys_log_DELETE
  23. table-strategy:
  24. standard:
  25. sharding-algorithm-name: table-inline
  26. sharding-column: method

4. 业务测试

:::warning 编辑角色、新增角色 查看数据库中日志表记录 :::

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif