mysql分区

MySQL分库分表方案

醉酒当歌 提交于 2020-04-07 07:15:48
1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。 2. mysql proxy:amoeba 做mysql集群,利用amoeba。 从上层的java程序来讲,不需要知道主服务器和从服务器的来源,即主从数据库服务器对于上层来讲是透明的。可以通过amoeba来配置。 3.大数据量并且访问频繁的表,将其分为若干个表 比如对于某网站平台的数据库表-公司表,数据量很大,这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。 某网站现在的数据量至多是5000万条,可以设计每张表容纳的数据量是500万条,也就是拆分成10张表, 那么如何判断某张表的数据是否容量已满呢?可以在程序段对于要新增数据的表,在插入前先做统计表记录数量的操作,当<500万条数据,就直接插入,当已经到达阀值,可以在程序段新创建数据库表(或者已经事先创建好),再执行插入操作。 4. 利用merge存储引擎来实现分表 如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码

Mysql 分区 分表相关总结之方案选择

江枫思渺然 提交于 2020-01-10 10:55:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> [TOC] ##引述 前段时间项目需要,一直在研究mysql sharding,看了一些这方面的资料,也亲自实验测试了一些数据。在此,做个概括的笔记,方便以后回顾知识,其实大多是借鉴网络上各位前辈的,然后抱着学习态度去实践,积累属于自己的东西。 ##拆分策略选择 其实拆分很灵活,有的是 垂直切分 ,将一个库拆成两个或多个,将有相关联的表放在一个库里。有的是 水平切分 将数据量大的表按照一定逻辑进行拆分。个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水平切分,目的是减轻了单个表或某些表读写的压力。 我们项目根据个人需求,采用的水平切分,没有去分库。之后要看看需要采用何种的切分了。 了解到的有: 分表、分区、MERGE引擎分表。 ###MERGE引擎分表 ####简介 先介绍merge表,此方法 只 适用于MyISAM。我数据库的表都是采用InnoDB引擎的,所以首先就被pass了,但是还是在这里简单介绍下吧。 mysql 5.1 手册里的说的 An alternative to a MERGE table is a partitioned table, which stores partitions of a single table in separate files. Partitioning enables