最近一直忙于服务大客户,客户之大不止于客单价,还有数据量和业务成长性。最早开始合作只是为了方便管理现在的广告数据,经过半年的积累,数据量已经接近瓶颈,到了不该不足以支撑业务的时候了,经过慎重调研才知道原来广告系统数据之大,业务模型还是有点复杂。
这里的广告是采用互联网投放的形式,行业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的系统迭代,经验丰富,欢迎新铁老铁下单咨询。