本文已参与「新人创作礼」活动,一起开启掘金创作之路。
MySQL的Text类型
| 数据类型 | 存储范围 |
|---|---|
| TINYTEXT | L + 1 bytes,where L < 2^8 |
| TEXT | L + 2 bytes,where L < 2^16 |
| MEDIUMTEXT | L + 3 bytes,where L < 2^24 |
| LONGTEXT | L + 4 bytes,where L < 2^32 |
MySQL是单进程多线程模型,一个SQL语句无法利用多个cpu core去执行,这也就决定了MySQL比较适合OLTP业务系统,同时要针对MySQL去制定一些建模规范和开发规范,尽量避免使用Text类型,它不但消耗大量的网络和IO带宽,同时在该表上的DML操作都会变得很慢。 建议将复杂的统计分析类的SQL迁移到实时数仓OLAP中,例如目前使用比较多的clickhouse,阿里云的ADB,AWS得到Redshift都可以,做到OLTP和OLAP类业务SQL分离,保证业务系统的稳定性。
备注
OLTP(On-line transaction processing)联机事务处理,OLAP(On-line Analytical Processing)联机分析处理,从字面上来看OLTP是做事务处处理,OLAP是做分析处理,从对数据库操作来看,OLAP主要是对数据库的增删改,OLAP是对数据库的查询。
OLTP主要用来记录某类业务事件的发生,如购买行为,当行为产生后,系统会记录是谁在何时何地做了何事,这样的一行(或多行)数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功,像公司常见的业务系统如ERP,CRM,OA等系统都属于OLTP。当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做OLAP了。
| OLTP | OLAP | |
|---|---|---|
| 业务目的 | 处理业务,如订单、合同等 | 业务支持决策 |
| 面向对象 | 业务处理人员 | 分析决策人员 |
| 主要工作负载 | 增删改 | 查询 |
| 主要衡量指标 | 事务吞吐量 | 查询响应速度(QPS) |
| 数据库设计 | 3NF或BCNF | 星型/雪花模型 |
| 可以认为OLAP是依赖于OLTP的,因为OLAP分析的数据都是由OLTP所产生的,也可以看作 OLAP是OLTP的一种延展,一个让OLTP产生的数据发现价值的过程。 |