思考问题:
1、估计百度有5亿的用户,这些用户怎么存储?
2、是不是会有一个用户表里有5亿条数据?
3、这么大的数据库做增删改查的时候速度会怎么样?
海量数据的解决方案:
1、SQL语句的优化
2、大表拆小表的方式
为什么要使用mysql分区分表?
日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。
给大家扩充一下什么是分区 分表
分区: 分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机 器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。 就好像一个图书馆,有好多本书,你要是去看书,假如这些书都在一堆,怎么办呢?这时候,管理员来了,他把这些书分类摆在相应的书架上,这样你就能很容易的找到你想要的书了.
分表: 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它。 较好比武侠剧里的一个门派,有好多弟子,要分布到好多地方,以便于维护江湖稳定,收集情报,他们都有各自的身份令牌,职责,和能力,需要的时候又可以聚集到一起,门派长老可以根据他们的名字得到他们的资源
mysql分表和分区有什么联系呢?
1.都能提高mysql的性高,在高并发状态下都有一个良好的表现。
2.分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。
3.分表技术是比较麻烦的,需要手动去创建子表,app服务端读写时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。
4.表分区相对于分表,操作方便,不需要创建子表。
暂时就先到这,想要了解更多,敬请期待