数据库hash分库

简介:

 昨天新项目上线,数据库最初的逻辑是根据UID 取模分库分表。(ps 在测试环境下还是使用的单库单表),结果上线第二天,发现所有的数据都存在于一个库中。

   以上我们可以先不给出解决方式:

   原因很简单,应用端没有分库分表的逻辑(开发人员的离职,导致该部分空白)。

   DBA没有检查数据的均衡(其实这个时候的DBA 已经被派去做数据统计部分,忙着赶工)。

   总体来说还是应用端和DBA缺少沟通。

   个人是通过python 解决数据问题的。

import MySQLdb
import sys
try:
    conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='xxx')
    cursor=conn.cursor()
    cursor.execute("select * from xxx.user_equip_diamonds")
    uinfo=cursor.fetchall()
    for context in uinfo:
        co=int(context[5]%9)
        if co in (4,5,6,7,8,9):
            cursor.execute("insert into test.user_equip_diamonds select * from dragon0.user_equip_diamonds where id=%d" % (int(context[0])))

    cursor.close()
    conn.commit()
    conn.close()
finally:
    conn.close()
    sys.exit(1)

    其中数据是根据primary key 进行分类的(防止重复键的产生)。    

    上线一天数据也就几万条。所以很快就搞定啦

    通过SQL的方式也是可以的

 select id from XXXX.XXXX where user_id%9 in (4,5,6,7,8,9);
     可以建立一张temporary table 专门存储 id ,然后利用子查询或者 join ,对表进行迁移 

    算是工作的简单总结吧!

    (以后对于新上线的应用 可以简单比较分库中的数据量来发现问题,或者 试着插入测试数据来确定是否有问题)






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1036774,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
存储 算法 数据可视化
MySQL数据库 -- 索引结构 (B+ tree 与 Hash)
索引(index)是帮助MySQL高效获取数据的数据结构 , 在Mysql中有两个最常用的索引 -- B+tree索引 和 Hash索引 B-Tree(B树)是一种多叉路平衡查找树,相对于二叉树,B树每个节点可以有多个分支 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中
105 0
|
11月前
|
存储 算法 关系型数据库
一次数据库分表分库的真实场景应用
一次数据库分表分库的真实场景应用
71 0
|
SQL 存储 算法
SpringBoot整合ShardingSphere实现分表分库&读写分离&读写分离+数据库分表
SpringBoot整合ShardingSphere实现分表分库&读写分离&读写分离+数据库分表
1280 0
SpringBoot整合ShardingSphere实现分表分库&读写分离&读写分离+数据库分表
|
SQL 存储 cobar
分库分布的几件小事(一)数据库如何拆分
为何要分库分表、分库分表的方式
|
存储 算法 数据库
浅析数据库算法与数据结构(二) HASH算法
从一堆数据中很快的查找出某一个数据位置,或者用某一个字段的值,来查找出整条记录,这样的情况在数据库中是非常普遍的情况。所以一定要有非常高效的算法能够实现这样的场景,由于数据库存储的记录又非常的多,所以,最好算法复杂度能够是O(1)。这样,查找的速度不会随着数据的增长而原来越慢。那么HASH算法就是这样一个很好的算法
188 0
浅析数据库算法与数据结构(二) HASH算法
|
XML 存储 SQL
深入浅出MySQL(九)一看就懂的基于MYCAT的数据库分表分库案例
深入浅出MySQL(九)一看就懂的基于MYCAT的数据库分表分库案例
155 0
|
数据库 索引
数据库面试题【三、索引有B+索引和hash索引】
数据库面试题【三、索引有B+索引和hash索引】
79 0
|
关系型数据库 分布式数据库 数据库
|
存储 数据库
PolarDB-X 1.0-常见问题-分库分表问题-为什么在PolarDB-X的数据库中创建一张单表,它会在每一个分库中都创建同样的表,但数据只存储在第一个分库上?
PolarDB-X 1.0设计为,创建单表时会给所有的分库里面都创建同样的表,但数据只存储第一个分库的表里面,目的是为了在单表转到广播表的时候,可以不用初始化表结构,仅需要同步数据。
135 0
|
关系型数据库 数据库 RDS
PolarDB-X 1.0-常见问题-分库分表问题-删除数据库时,PolarDB-X各物理分库是否会被自动删除?是否会影响RDS上的数据库?
在控制台上删除PolarDB-X的数据库时,只会删除之前由PolarDB-X所创建的数据库,不会影响原本在RDS上创建的数据库。
198 0

热门文章

最新文章