近1000万数据,广告系统,分库分表

最近一直忙于服务大客户,客户之大不止于客单价,还有数据量和业务成长性。最早开始合作只是为了方便管理现在的广告数据,经过半年的积累,数据量已经接近瓶颈,到了不该不足以支撑业务的时候了,经过慎重调研才知道原来广告系统数据之大,业务模型还是有点复杂。

图片

这里的广告是采用互联网投放的形式,行业Slogan:让每次点击都有效果,都有收益。系统目前的瓶颈在于Mysql单张表接近千万,Mysql单张表数据过千万查询效率基本没有。到了系统动刀子的时候了,小动还是大动?

这是一个值得思考的问题,如果是在公司那很好办根据公司的业务预估一下就好,作为一个创业者还要考虑到客户的付费意愿,综合评估改动的成本,没有完美的系统只有适合业务的系统,随着业务的发展系统要不断的改进。

图片

垂直分表 VS 水平分表

垂直分表

    • 定义:以字段为依据,根据字段属性将原始表不同字段拆分到多个表中。注意:分拆后需要将原始表中的数据同步到多个分拆后的表。

    • 场景:某一张表数据量特别大,访问频次特别高,导致数据库访问压力特别大。

    • 解决方案:对这张表进行拆分,举例:将表的字段拆分为N张表,这N张表可以位于同一个数据库,也可以位于不同的数据库,甚至不同的服务器,数据库(服务器)的访问压力就分散到不同的地方,从而大幅提升系统的性能。

    • 特点:每张分拆表的结构都不一样、数据也不一样,一般通过一列(主键/外键)关联。所有子表的并集是全量数据。

水平分表

    • 定义:以字段为依据,按照一定策略将母表的数据拆分到多个子表中。注意:分拆后需要将原始表中的数据按照分表策略同步到多个分拆后的表。

    • 场景:不拆分表字段结构,而是对table_name表的数据进行拆分,也就意味着将table_name表的数据分散存储在table_name_01、table_name_02、table_name_03、table_name_0N中,table_name_0(N)所存放的表结构相同,唯一的区别是数据不同。

    • 特点:分拆后所有表的字段数量、表结构一样、区别就是数据不一样,所有表的并集是全量数据。

图片

最终综合业务诉求选择水平拆分,预计可满足系统未来2年的扩展需求,如果未来2年业务能扩展到单张表再次接近1000万,那营收水平肯定可以支撑再次优化的技术成本。

图片

写在最后开发一个系统并不像外行讲的那么简单,几百块,几千块就可以搞个系统,这句话背后的事情只有懂行的人才明白,没有真金白银的投入,换不来业务的稳定发展。不讲系统,不讲程序开发,任何一个行业要想长远发展,从小开始到成长壮大都离不开真金白银的投入。

创业程序员卡酷,专业开发13年,经历多次从0到1的系统迭代,经验丰富,欢迎新铁老铁下单咨询。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值