课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
分库分表是程序员在做数据库优化的时候需要重点掌握的一个优化方法,下面我们就通过案例分析来了解一下,分库分表优化步骤与实现方法。
一般来说一个系统先出现瓶颈的点很可能是数据库。比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大。海量的数据会严重影响数据库的读写性能。
这个时候我们会开始优化系统,一般会经过这么几个过程:
找出SQL慢查询,针对该SQL进行优化,比如改进SQL的写法,查看执行计划对全表扫描的字段建立索引
引入缓存,把一部分读压力加载到内存中
读写分离
引入队列,把并发的请求使其串行化,来减轻系统瞬时压力
分表/分库
对于五点优化方案我们来细说一下。分表分库通常有两种拆分维度:1.垂直切分,垂直切分往往跟业务有强相关关系,比如把某个表的某些不常用的字段迁移出去,比如订单的明细数据可以独立成一张表,需要使用的时候才读取2.水平切分,比如按年份来拆分,把数据库按年或者按某些规则按时间段分成多个表。
拆分表之后每个表的数据量将会变小,带来的好处是不言而喻的。不管是全表扫描,还是索引查询都会有比较高的提升。如果把不同的表文件落在多个磁盘上那数据库的IO性能还能进一步提高。
如果纯手工拆分,比如按年份拆分成多个表,那么上层业务代码也得进行调整。每次读写都得判断该使用哪张表。如果是跨多个年份的分页查询更加难搞。人肉分表基本上不可能实现的,对于上层编码简直是个噩梦。所以针对分表分库我们通常会使用某些中间件,比如Mycat,Sharding-JDBC等中间件。使用这些组件确实能实现分表分库,并且对业务层代码屏蔽了数据库架构的改动,但是配置略显麻烦。如果你使用的是SQLServer数据库,并且目前还不需要分库,只需要分表,那么其实使用内置的分区表功能是简单的方案。只需要打开SQLServerManagementStudio简单设置几下就可以了,对于你上层应用完全是无感的,你的代码、数据库连接串都不需要改动。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。