`

mysql之分表

阅读更多
分表是一种设计方法。而不是数据库本身所提供的功能。

在大型数据量的环境下,经常会看到这样的命名:

xxx_001
xxx_002
xxx_003

------------------------------------------------------------

产生背景:

当一张的数据达到几百万时,查询一次所花的时间会变多。尤其是范围查询。
如果有联合查询的话,可能会死在那儿了。
分表的目地就在于此,缩小查询范围,减少时间,减轻数据库的负担。


实例分析
MySQL如何将数据高效分表?

有一个大数据表(数据量上千万),现在想做分表处理,
现在设计的做法是使用php程序,根据每列数据的主键user_id值计算出00-63的64个hash值,散列到64个表中,
请问在将数据导至新的分表时,除了将每一条数据计算出hash值,再插入到新表的方法外,有没有更高效的方法?


-
类似的事情做过一次,当时数据会更多一点,有几亿,按userid 取模100分表的,大概过程是这样的:
1、我可以很容易获得我的useid的最大最小值:min_userid,max_userid。这样粗略认为总表的的userid范围为userlist = [min_userid...max_userid]
2、随便用个脚本把userlist处理(mod或者hash)为100个分组:arr0 ... arr99
arr0为[0,10,20,30 ...]
3、根据 2 的结果拼接100个sql语句.
insert into tb_user_0 (select * from tb_user_all where userid in(arr0));
insert into tb_user_1 (select * from tb_user_all where userid in(arr1));
...
insert into tb_user_99 (select * from tb_user_all where userid in(arr99));
4、批量执行。当时几亿不到20分钟就都搞定了。要比逐条数据处理快很多。
注:userid是有索引的。

-------


================================================================================
怎么样实现MYSQL数据库分表?


假设一个论坛帖子按板块分为N个表

thread_bbs1
thread_bbs2
thread_bbs3
....
thread_bbsN

那一个用户发布的帖子就会散落在N个表里,如果有个业务需要查看用户的所有帖子总数并按时间排序用户的所有发帖,就要join所有的表?

应该怎么样合理的分表呢?

-
Han Du
这个问题不在于如何分表和查询,而在于如何做 数据冗余。

你需要将用户发帖的基本信息用另一些表来存储,比如叫做 thread_user*,这些表按照用户 id 分表,内容包括用户 id、帖子 id、发帖时间等你需要的信息。

每次创建帖子的时候需要同时写两份,thread_bbs* 和 thread_user*,读的时候按需读取对应的表就可以。
-
按照用户的唯一ID去路由分表。
-
分表只是为了分散存储压力,查询的话可以借鉴@Han Du 的方法,建个索引表,存储基本信息。通过索引表去统计和排列,需要具体数据的时候再join。
很多开源的系统,尤其是国外的优秀商城产品,看下数据库设计会发现他们很擅长使用索引表
-
















-




MySQL如何将数据高效分表?
http://www.houziquan.com/question/94

怎么样实现MYSQL数据库分表?
https://segmentfault.com/q/1010000000583058

mysql 分库分表的方法(总结的,概括的)
http://www.cnblogs.com/joe-blog/p/5477380.html













-



分享到:
评论

相关推荐

    MySQL分表及分表后插入sql

    MySQL分表及分表后插入sql语句,表为订单表,可以参考一下

    zabbix 5.0 mysql 数据库分表操作详细流程

    其中有每个命令的使用说明与注释。并增加了清理数据的方式。以及导入输入的注意事项

    mysql分表创建

    文件`mysql分表创建.sql`很可能包含了创建分表的SQL脚本,如创建新表、插入数据、设置分区等操作。具体操作时,应确保理解分表策略,合理选择分片键,避免数据热点,并测试分表后的查询性能。 总之,MySQL分表是...

    TP5+MySQL通用分表代码

    - 分表情况,2:日期分表,按照目标表里面的记录日期的字段,按照日期【日、周、月、年】拆分成多个表【本代码仅考虑unix时间戳来分表,其它不支持,您可以自己思考,自己修改代码】 - 注意,支持【子表】,填入...

    Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。.zip

    本文将深入探讨基于Node.js实现的MySQL分表分库中间件,它在分布式集群环境中起到至关重要的作用。 首先,Node.js是一种流行的JavaScript运行环境,它允许开发人员使用JavaScript进行服务器端编程。Node.js的异步非...

    mysql分表分库demo

    MySQL 分表分库 Demo MySQL 分表分库是指将大型数据库表分割成多个小表,以提高数据库的性能和可扩展性。随着业务数据的增长,数据库表中的数据不断增加,如果不加以控制,数据库的性能将会下降,影响业务的发展。 ...

    PHP操作mysql数据库分表的方法_.docx

    本文主要讨论如何使用PHP操作MySQL数据库进行分表。 分表是一种常见的数据库扩展策略,它通过将一个大表拆分成多个小表来提高查询效率和系统性能。在PHP中,我们可以编写SQL语句或者使用ORM(对象关系映射)框架来...

    mysql 分表

    关于mysql的分表技术实现方法。以及分表设计, 及简单的代码实例。

    Python与MySQL分表分库实战

    本篇文章将深入探讨"Python与MySQL分表分库实战"这一主题,帮助你理解如何有效地利用这两种技术来优化数据库性能和处理大数据。 首先,我们需要理解“分表分库”这一概念。随着数据量的增长,单一数据库可能会面临...

    MySQL数据库之分库分表方案_ITPUB博客.mhtml

    MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml

    MySQL分库分表技术

    **MySQL分库分表技术** 随着互联网业务的快速发展,数据量呈现爆炸性增长,单个数据库的性能瓶颈问题日益突出。在这种背景下,MySQL的分库分表技术应运而生,旨在解决高并发、大数据量场景下的性能挑战。本篇将深入...

    Python+MySQL分表分库实战

    MySQL分库分表是数据库架构设计中用于处理大规模数据量以及高并发请求的一种技术手段。通过将数据拆分到不同的数据库服务器中,能够有效降低单个数据库的负载,提高系统的扩展性和性能。Python作为一种流行的编程...

    MySQL 分库分表的实现原理及演示案例

    在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散存储到多个数据库或表中,以此来达到减轻单个数据库服务器的压力,提高查询效率和系统性能的目的...

    MySQL分区分表方案实践手册

    《MySQL分区分表方案实践手册》是一本深入探讨MySQL数据库中分区与分表技术的专业书籍。MySQL作为广泛应用的关系型数据库管理系统,随着数据量的增长,性能优化成为了一个关键问题。分区分表是解决大数据存储和查询...

    MySQL分表和分区最佳攻略word

    MySQL分表和分区最佳攻略 word版本,

    一个MySQL分库分表php类

    一个MySQL分库分表php类。当一个表数据记录过大时就会出现性能瓶颈,而一般对应的解决办法是要么做分区表,要么分表,分区表就不说了,分表又分为垂直分割和水平分割,具体区 别请自行搜索。一般而言,分库分表属于...

    Python+MySQL分表分库实战 - v1.0 - 运维生存时间 -(2016).mobi

    Python后端运维工程师的可靠参考书,重点介绍如何优化mysql数据库性能。

    MySQL数据库分表批量主键查询代理-mysql-partitions-proxy.zip

    "MySQL数据库分表批量主键查询代理-mysql-partitions-proxy"项目就是为了应对这一挑战而设计的。这个开源工具旨在优化数据库的查询效率,尤其在面对分表场景下的主键批量查询时,它能提供一个代理服务,有效地协调和...

Global site tag (gtag.js) - Google Analytics