当前位置: 首页 > wzjs >正文

中山市哪家公司做网站seo是什么技术

中山市哪家公司做网站,seo是什么技术,网站开发和软件开发哪个难,网站建设团队介绍ShardingJdbc-水平分库 水平分库 表结构相同、记录不同、所属库不同多个库中表记录数和才是总的记录数通常根据主键ID进行分表,这里采用奇偶策略 案例 建立库 sharding_demo-1、sharding_demo-2每个库建立表 user_1、user_2 表结构相同id 为主键,big…

ShardingJdbc-水平分库

水平分库

  • 表结构相同、记录不同、所属库不同
  • 多个库中表记录数和才是总的记录数
  • 通常根据主键ID进行分表,这里采用奇偶策略

案例

  • 建立库 sharding_demo-1、sharding_demo-2
  • 每个库建立表 user_1、user_2 表结构相同
  • id 为主键,bigint 类型
  • clientId,bigint 类型
  • 分库规则
    • client_id 为偶数的记录存储到 sharding_demo-1 库
    • client_id 为奇数的记录存储到 sharding_demo-2 库
  • 分表规则
    • id 为偶数的记录存储到 user_1表
    • id 为奇数的记录存储到 user_2表

建表语句

库(sharding_demo-1、sharding_demo-2)自行创建

CREATE TABLE `user_1`  (`id` bigint NOT NULL,`client_id` bigint NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`age` int NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

在这里插入图片描述

项目代码

自行创建 SpringBoot 项目 ShardingJDBCDemo

  • 导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.study</groupId><artifactId>ShardingJDBCDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>ShardingJDBCDemo</name><description>ShardingJDBCDemo</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- mysql 数据库连接依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 数据库连接池依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version></dependency><!-- MybatisPlus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!-- shardingsphere 必须的依赖 sharding-jdbc  !!! --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version></dependency><!-- 简化实体get/set依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
  • 创建用户实体类
package com.study.shardingjdbcdemo.demo.entity;import lombok.Data;@Data
public class User {private Integer id;private String name;private Integer age;private Integer clientId;
}
  • 编写 mapper
package com.study.shardingjdbcdemo.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.study.shardingjdbcdemo.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}
  • 启动类增加mapper扫描
package com.study.shardingjdbcdemo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.study.shardingjdbcdemo.demo.mapper")
public class ShardingJdbcDemoApplication {public static void main(String[] args) {SpringApplication.run(ShardingJdbcDemoApplication.class, args);}}

水平分库分表配置

application.yml 配置详解

# 水平分库分表   多库多表
server:port: 8081spring:main:# 一个实体类对应两张表,覆盖allow-bean-definition-overriding: trueshardingsphere:datasource:names: ds1,ds2 # 多数据源ds1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3307/sharding_demo-1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: r#dcenter9ds2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3307/sharding_demo-2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: r#dcenter9sharding:
#      default-database-strategy: # 默认分库策略  所有表的分库策略
#        inline:
#          # 分库列
#          sharding-column: id
#          # 分库算法  id 偶数存储到 user_1 奇数存储到 user_2
#          # 除2取余数 要么是0要么是1 然后给+1 对应的就是user_1 user_2
#          algorithm-expression: ds$->{id % 2 + 1}tables:user:# 分表规则 哪个库(ds1)哪张表(user)以及表名称规则(user_1、user_2)#  ds1  ds2  user_1 user_2actual-data-nodes: ds$->{1..2}.user_$->{1..2}
#          key-generator:
#            column: id
#            type: SNOWFLAKE# 分表策略table-strategy:inline:# 分表列sharding-column: id# 分表算法  id 偶数存储到 user_1 奇数存储到 user_2# 除2取余数 要么是0要么是1 然后给+1 对应的就是user_1 user_2algorithm-expression: user_$->{id % 2 + 1}database-strategy: # 个性化指定某个表(user)的分库策略inline:# 分库列sharding-column: client_id# 分库算法  client_id 偶数存储到 ds1 奇数存储到 ds2# 除2取余数 要么是0要么是1 然后给+1 对应的就是ds1 ds2algorithm-expression: ds$->{client_id % 2 + 1}props:# 打印SQL日志sql:show: true     
说明:与水平分表相比, 只是额外配置多配置了一个数据源(ds2)以及 user 表的 分库策略 (database-strategy)

测试结果

奇数测试

insert_client2_id1:插入 clientId 为 2、id 为 1 的数据

    @Testvoid insert_client2_id1() {User user = new User();user.setId(1);user.setName("user_" + 1);user.setClientId(2);user.setAge(18);userMapper.insert(user);}
  • 运行结果
  1. clientId 为 2,根据奇偶策略,偶数应存储到库 ds1(sharding_demo-1)
  2. id 为 1,根据奇偶策略,奇数应存储到表 user_2
  3. 最终存储到 sharding_demo-1 库 的 user_2 表

在这里插入图片描述
在这里插入图片描述

说明:日志中也可以看出,使用的是ds1(sharding_demo-1)插入的表为 user_2

偶数测试

insert_client1_id2:插入 clientId 为 1、id 为 2 的数据

    @Testvoid insert_client1_id2() {User user = new User();user.setId(2);user.setName("user_" + 2);user.setClientId(1);user.setAge(20);userMapper.insert(user);}
  • 运行结果
  1. clientId 为 1,根据奇偶策略,偶数应存储到库 ds2(sharding_demo-2)
  2. id 为 2,根据奇偶策略,奇数应存储到表 user_1
  3. 最终存储到 sharding_demo-2 库 的 user_1 表

在这里插入图片描述

在这里插入图片描述

说明:日志中也可以看出,使用的是ds2(sharding_demo-2)插入的表为 user_1

查询测试

selectById

  1. 查询 id为1 且 clientId为2 的记录
  2. 查询 id为2 且 clientId为1 的记录
    @Testvoid selectById() {userMapper.selectOne(new QueryWrapper<User>().eq("id",1).eq("client_id",2));userMapper.selectOne(new QueryWrapper<User>().eq("id",2).eq("client_id",1));}
  • 运行日志
    在这里插入图片描述
说明:1. clientId = 2 且 id = 1, 数据库 ds1 (sharding_demo-1) ,查询的表为 user_22. clientId = 1 且 id = 2, 数据库 ds2 (sharding_demo-2) ,查询的表为 user_13. 查询和插入均遵守分表奇偶策略,完全正确 !!!

综上所述,ShardingSphere-ShardingJdbc-水平分库奇偶策略 Demo 则告一段落,希望对大家有所帮助!

http://www.dtcms.com/wzjs/437490.html

相关文章:

  • 只用php做网站百度竞价排名怎么做
  • 家装公司装修百度seo关键词排名 s
  • 静态网站可以申请域名吗明星百度指数排行
  • 柳州哪家公司做网站好外贸网络推广
  • wordpress添加边栏seo网络优化是什么意思
  • 企业网站建设对网络营销的影响主要表现在( )找小网站的关键词
  • 英国电商网站乔拓云智能建站官网
  • wordpress首页添加站点统计小工具icp备案查询官网
  • 个人如何做问答类网站优化网站排名茂名厂商
  • 合肥 网站建设公司哪家好推广标题怎么写
  • 郑州网站建设方案书一键搭建网站工具
  • 网站建设交流百度指数的基本功能
  • 微信公众号网站建设游戏如何推广网站方法
  • 谷歌收录提交入口镇江搜索优化技巧
  • 道滘镇网站建设公司淘宝联盟怎么推广
  • 广东建设企业网站怎么样国外免费发产品的b2b平台
  • 网站 模板 php培训机构加盟店排行榜
  • 日本亲子游哪个网站做的好处长尾词挖掘免费工具
  • 深圳比较好的设计工作室上海seo顾问
  • 公司app与网站建设方案大一html网页制作作业
  • 怎么样开始做网站发布推广信息的网站
  • 如何让公司网站网络营销策划书800字
  • 网站套餐可以分摊吗吗怎么推广自己的网站?
  • 网站建设顺序seo比较好的优化方法
  • 做微商在哪个网站打广告好推广app软件
  • 和县网站建设seo专员是什么职位
  • 溧阳网站建设影视网站怎么优化关键词排名
  • 深圳网站建设公司收费标准手机优化大师下载2022
  • 做不做生意都要知道的网站百度搜索链接
  • 网站开发方案设计seo搜索优化服务