19、数据库为什么要进⾏分库和分表呢?都放在⼀个库或者⼀
数据库简单吗张表中不可以吗?
分库与分表的⽬的在于,减⼩数据库的单库单表负担,提⾼查询性能,缩短查询时间。
通过分表,可以减少数据库的单表负担,将压⼒分散到不同的表上,同时因为不同的表上的数据量少了,起到提⾼查询性能,缩短查询时间的作⽤,此外,可以很⼤的缓解表锁的问题。分表策略可以归纳为垂直拆分和⽔平拆分:
⽔平分表:取模分表就属于随机分表,⽽时间维度分表则属于连续分表。如何设计好垂直拆分,我的建议:将不常⽤的字段单独拆分到另外⼀张扩展表. 将⼤⽂本的字段单独拆分到另外⼀张扩展表, 将不经常修改的字段放在同⼀张表中,将经常改变的字段放在另⼀张表中。对于海量⽤户场景,可以考虑取模分表,数据相对⽐较均匀,不容易出现热点和并发访问的瓶颈。
库内分表,仅仅是解决了单表数据过⼤的问题,但并没有把单表的数据分散到不同的物理机上,因此并不能减轻 MySQL 服务器的压⼒,仍然存在同⼀个物理机上的资源竞争和瓶颈,包括 CPU、内存、磁盘 IO、⽹络带宽等。
分库与分表带来的分布式困境与应对之策
数据迁移与扩容问题----⼀般做法是通过程序先读出数据,然后按照指定的分表策略再将数据写⼊到各个分表中。
分页与排序问题----需要在不同的分表中将数据进⾏排序并返回,并将不同分表返回的结果集进⾏汇总和再次排序,最后再返回给⽤户。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论