1122从业务优化MYSQL

http://blog.itpub.net/22664653/viewspace-2079576/

开发反馈一个表的数据大小已经130G,对物理存储空间有影响,且不容易做数据库ddl变更。咨询了开发相关业务逻辑,在电商业务系统中,每笔订单成交之后会有一条对应的订单物流信息,因此需要设计一个物流相关的表用来存储该订单的物流节点信息,该表使用text字段存储物流信息。
1122从业务优化MYSQL
大致的表结构:
CREATE TABLE `goods_order_express` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `express_id` int(10) unsigned NOT NULL,
  `message` varchar(200) NOT NULL,
  `status` varchar(20) NOT NULL,
  `state` tinyint(3) unsigned NOT NULL,
  `data` text NOT NULL,
  `created_time` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_expid` (`express_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4;

业务分析
当快递每到达一个中转站或者发生揽件,接收等事件,快递公司的api都会生成如下格式的信息(去掉业务相关敏感数据) 
[{“time”:”2016-03-16 11:16:20″,”ftime”:”2016-03-16 11:16:20″,”context”:”四川省成都市TD客户一公司 已发出,下一站成都转运中心”,”areaCode”:””,”areaName”:””,”status”:”在途”},{“time”:”2016-03-16 11:11:03″,”ftime”:”2016-03-16 11:11:03″,”context”:”四川省成都市TD客户一公司 已打包”,”areaCode”:””,”areaName”:””,”status”:”在途”},{“time”:”2016-03-16 11:08:09″,”ftime”:”2016-03-16 11:08:09″,”context”:”四川省成都市TD客户一公司 已揽收”,”areaCode”:””,”areaName”:””,”status”:”收件”}]
该json 串 411个字符,开发业务程序去定期轮训调用相关api信息,并把上面的json串数据 insert 或者update 到goods_order_express的data字段。而且该表从开始到现在从未删除,积累了初始到现在的所有数据。随着公司业务爆发式增长,该表未来会更大,而且增长速度会更快。数据库服务器的磁盘空间面临不足,表结构变更难以操作。
如何优化?
1 能否减小数据量写入?
   和业务分析,我们不能丢弃新增的数据。但是每一笔物流信息实际上是有生命周期的,从发货到收件完成即可完成其生命周期,也就是该数据可以不再展示了,我们基本不会查看一个已经收到货的物流信息。因此可以针对历史数据进行归档,比如将90天之前的数据备份到hbase中并且从MySQL 数据库中删除,从而维持该表的大小在一个合理的范围。
2 减少data 字段数据大小
a 缩小json串数据,保留有效数据
time 和ftime 是一样的,和开发确认ftime无功能使用,在我们的物流展示系统中 areaCode areaName也没有逻辑意义。
故对json数据做如下精简 
[{“time”:”2016-03-16 11:16:20″,”context”:”四川省成都市TD客户一公司 已发出,下一站 成都转运中心”,”status”:”在途”},{“time”:”2016-03-16 11:11:03″,”context”:”四川省成都市TD客户一公司 已打包”,”status”:”在途”},{“time”:”2016-03-16 11:08:09″,”context”:”四川省成都市TD客户一公司 已揽收”,”status”:”收件”}]
精简之后占用的字符数由411个减小为237个,减少47%的数据。
b 评估物流节点数
相信大家都有网购的经验 ,一般情况下快递大约含有15-20个节点信息
{“time”:”2016-03-16 11:16:20″,”context”:”四川省成都市TD客户一公司 已发出,下一站 成都转运中心”,”status”:”在途”} 占用85个,我们按照100个字符来评估,物流信息最大20*100=2000个字符,使用varchar(2048) 应该可以满足正常需求。
c 可能有人会说凡事总有例外,那我们从这个例外分析一下 如果一个物流有30或者40个节点信息 怎么办?
从深圳到黑龙江漠河 或者新疆乌鲁木齐到杭州,上海的节点信息估计会比较多。对于20个以上 的节点信息 我们不会去关注其中第10个 11个 14个 15个节点的信息。大家对快递的关注点是什么? 商家是否发货?快递公司是否揽件? 快递是否到达目的地的最后1公里。分析到这里,我们可以针对超过25个/30个以上的节点进行收缩处理,去掉中间非核心节点信息,在不影响用户体验的情况下,满足我们的varchar(2048)的设计。
3 分库分表
  这点是迫不得已而为之的方案。现在虽然各种中间件都比较成熟,cobar,oneproxy ,mycat等靠谱的软件,但是对于一个创业公司目前我们还缺少相对应的分布式数据库的管理工具,1024个表如何做变更?这个其实也是一个相对比较困难的问题。

4 冗余关系表

 新建一张表用来分解JSON字段的信息,使用一张表来记录这些信息

小结 
   经过一系列的分析和优化,我们最终将text字段转化为varchar(2048),发布到线上目前运行良好。回顾上面的优化过程是建立在对业务逻辑和物流相关知识有深入理解,对用户行为多加分析的基础之上的,该过程不需要高深的数据库知识。但是实际上开发往往简单粗暴的接受pd的功能设计理念,而不顾对底层基础架构的影响。其实只需要向前多走一步,我们可以做的更好,只不过这一步,可能是 优秀的程序员的一小步,是某些人的一大步。
留给大家一个问题:如何看待和解决 开发快速迭代带来的技术债?

 

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/30546

(0)
优速盾-小U的头像优速盾-小U
上一篇 2025年6月18日 18:42
下一篇 2025年6月18日 23:04

相关推荐

  • 阿里云DDoS防护如何对抗UDP和DNS攻击?高级防御策略

    阿里云ddos防护如何对抗UDP和DNS攻击?高级防御策略 2023-07-04 09:29 来源: 聚搜云 原标题:阿里云DDoS防护如何对抗UDP和DNS攻击?高级防御策略 标…

    网站百科 2024年4月10日
    00638
  • CC攻击防护详解

    cc攻击,全称Challenge Collapsar,是 DDoS攻击 的一种。CC攻击是目前应用层攻击的主要手段之一,借助代理服务器生成指向目标系统的合法请求,实现伪装和ddos…

    网站百科 2024年2月20日
    00835
  • 阿里云的CDN缓存系统简介

    cdn会把热点数据缓存到磁盘中。当有用户请求资源时,直接在节点命中,这样既提高了访问质量,又减少了源站压力。 关于如何缓存的设置,主要有几个方向可以设置 缓存过期时间,主要是指定路…

    网站百科 2025年6月18日
    00293
  • web前端常见安全问题

    1,SQL注入 2,XSS 3,CSRF 4.文件上传漏洞1,SQL注入:这个比较常见,可能大家也听说过,就是URL里面如果有对数据库进行操作的参数时,要做一下特殊的处理,否则被别…

    网站百科 2023年11月11日
    00550
  • 服务器安全之如何防护CC攻击

    海外服务器一般自带防护能力,再加上租用海外服务器性价普遍比较高:硬件配置高、大带宽、IP充足。因此成为众多租用海外服务器的首选。但是任何地区的服务器都会…

    2024年1月19日
    00549
  • seo百度营销优化技术

    说到seo百度营销技术,对于许多人来说,在互联网上行走是非常熟悉的,可以说是用互联网成长的一种营销手段。seo百度营销技术,对于网络营销来说,是极其重要的,说seo技术是网络营销技…

    网站百科 2024年2月29日
    00544
  • 云解析DNS使用教程

    云解析(Domain。 Name System,简称DNS)是一种高可用性、高可扩展的权威DNS服务和DNS管理服务。它的目的是为企业和开发者提供稳定、安全、智能的把网站…

    网站百科 2024年1月29日
    00619
  • Web网站安全

    一、防SQL注入 SQL注入,就是在web提交表单,请求参数的字符串中通过注入SQL命令,提交给服务器,从而让服务器执行注入的恶意的SQL命令的行为,是发生在开发程序的数据库层的安…

    2023年11月26日
    00614
  • OS第四章错题补充

    OS第四章错题补充 ​ 虚拟内存有三种实现方式:请求分页存储管理、请求分段存储管理、请求段页式存储管理。不管哪种方式,都需要有一定的硬件支持以下几个方面: 一定容量的内存和外存 页…

    网站百科 2025年6月18日
    00248
  • 百度seo优化优缺点的分析

    对于网站优化,相信大家在网上都已经有所耳闻。 现在互联网正处于白热化发展阶段。 要想达到很好的排名效果,就需要做网站优化。 SEO优化方法虽然有很多,但不能乱用。 ,因为有优点也有…

    2023年12月4日
    00607

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml