MySQL水平拆分(取模算法)

一:准备数据库表结构

create table user0(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table user1(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table user2(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table uuid(
id int unsigned primary key auto_increment)engine=myisam charset utf8;

二:准备依赖

     <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

三:配置文件

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydata
spring.datasource.username=root
spring.datasource.password=123

四:业务代码

package com.yjc.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class register {
       @Autowired
       JdbcTemplate jdbcTemplate;

       @RequestMapping("/register")
       public  String register(String name,String pwd){
              //往uuid表中添加一条空记录,主键自增
              String insertSql="INSERT INTO uuid VALUES (NULL);";
              jdbcTemplate.update(insertSql);
              //获取最后一次添加数据的主键
              Long aLong = jdbcTemplate.queryForObject("select last_insert_id()", Long.class);
              //取余,看看存到哪张表里
              String table="user"+aLong%3;
              //插入到该去的表中
              String insertUserSql = "INSERT INTO " + table + " VALUES (‘" + aLong + "‘,‘" + name + "‘,‘" + pwd + "‘);";
              jdbcTemplate.update(insertUserSql);
              return "success";
       }

       @RequestMapping("/get")
       public String get(Long id){
              //去拿张表里取数据
              String table ="user"+id%3;
              String sql = "select name from " + table + "  where id="+id;
              String name = jdbcTemplate.queryForObject(sql, String.class);
              return name;
       }
 }

五:测试

启动项目请求,模拟用户注册情况

http://localhost:8080/register?name=123&pwd=123
http://localhost:8080/get?id=8

原文地址:https://www.cnblogs.com/yjc1605961523/p/12331190.html

时间: 2024-10-20 16:59:38

MySQL水平拆分(取模算法)的相关文章

Raising Modulo Numbers_快速幂取模算法

Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, others like using Windows, and some like difficult mathematical games. Latest marketing research shows, that

位运算之——按位与(&amp;)操作——(快速取模算法)

由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. 按位与(Bitwise AND),运算符号为& a&b 的操作的结果:a.b中对应位同时为1,则对应结果位也为1. 例如: 10010001101000101011001111000 & 111111100000000 --------------------------------------------- 10101100000000 对10101100000000进行右移8位得到的是101011,这就得

【转】C语言快速幂取模算法小结

(转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余).在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快.计算范围更大的算法,产生了快速幂取模算法.我们先从简单的例子入手:求abmodc 算法1.直接设计这个算法: int ans = 1; for(int i =

快速乘法取模算法

原理: 32+16+4=52 1 LL qmul(LL x, LL y, LL mod) { // 乘法防止溢出, 如果p * p不爆LL的话可以直接乘: O(1)乘法或者转化成二进制加法 2 //快速乘法取模算法 3 4 LL ret = 0; 5 while(y) { 6 if(y & 1) 7 ret = (ret + x) % mod; 8 x = x * 2 % mod; 9 y >>= 1; 10 } 11 return ret; 12 } 原文地址:https://www

MySQL 水平拆分(读书笔记整理)

1,水平拆分的介绍 一般来说,简单的水平切分主要是将某个访问极其平凡的表再按照某个字段的某种规则来分散到多个表之中,每个表中包含一部分数据. 简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些 行切分到一个数据库,而另外的某些行又切分到其他的数据库中.当然,为了能够比较容易 的判定各行数据被切分到哪个数据库中了,切分总是都需要按照某种特定的规则来进行的. 如根据某个数字类型字段基于特定数目取模,某个时间类型字段的范围,或者是某个字符类 型字段的hash 值.如果整个系统

快速幂取模算法

什么是快速幂? 快速幂应当是快速幂取模的简称 对于一般的求幂算法,求$a^b\,\bmod\,m$,即使用循环b次的方法,复杂度是$O(b)$的,当b很大的时候,这种算法就会显得十分缓慢. 快速幂是基于以下明显的事实: $${a^b} \equiv {(a^2)^{\frac{b}{2}}} \pmod{m}\quad b\ is\ even$$ $${a^b} \equiv {(a^2)^{\frac{b}{2}}*a} \pmod{m}\quad b\ is\ odd$$ 那么我们得到这样一

由一次mycat+mysql水平拆分集群问题引发的思考

近段时间部署和测试了一个mycat+4 Percona+tokudb的水平拆分集群,前段应用是将一类奖状数据不断地写入到这个库中,只有insert操作,前几天运行状态还比较好. 从昨天开始,由于业务量突然增加了一些,磁盘IO负载变得很高,而且仔细分析之后,发现磁盘读的性能远远高于磁盘写的性能,这完全是有问题的.因为insert操作肯定主要是写操作,而且写都是顺序写,读操作应该不会太大. 经过对mycat和mysql多方面的查看,都难以解释的通,不太确定问题的方向和原因.后来与同事沟通,又回到了系

快速幂取模算法【模板】

快速幂取模其实是a^b%c,这就是著名的RSA公钥加密的方法,当a,b都很大的时候,直接求是不可取的,所以就用到了快速幂取模. 首先你得明白他的原理,其实是用到了二分的思想,把b按照二进制展开 b = p(n)*2^n  +  p(n-1)*2^(n-1)  +-+   p(1)*2  +  p(0).其中p(i) (0<=i<=n)为 0 或 1. 所以此时a^b =  a^ (p(n)*2^n  +  p(n-1)*2^(n-1)  +...+  p(1)*2  +  p(0))=  a^

memcache通过hash取模算法,实现多服务器存取值

<?php //封装一个hash算法类 class Mem{ //存储memcache的服务器个数 private $hostCount=''; //多个服务器 private $host=[]; //构造方法用来给接收值,给属性赋值 public function __construct($hostServer) { $this->hostCount = count($hostServer); $this->host = $hostServer; } //计算key的位置,返回的是当前