目前有个表的数据比较大( 1T 左右,3 亿多行)使用了表分区
/*!50100 PARTITION BY RANGE (DAY(`date_id`))
(PARTITION day1 VALUES LESS THAN (2)
ENGINE = InnoDB,
PARTITION day2 VALUES LESS THAN (3)
ENGINE = InnoDB,
……
预先分了 31 个区,数据按天落到分区内,查询效率还行
目前有个问题,因为单机存不下了,每天会删 15 天前的数据,但数据量比较大,删除需要执行 3 小时(已经是按 date_id 字段去删了),很是影响业务,还容易造成主从挂掉
想过的方案: MySQL 按分区删数据倒是很快,想过每天创建明天的分区,但还是因为数据量大 ALTER TABLE 会卡死
其它问题:
1.为什么不分库、分表
因为主要是 OLAP 操作,需要各种 group by/count,分库分表不合适
2.为什么要用 MySQL,不使用 PostgreSQL 或者 TiDB
首先不知道目前这个量级和问题,其它数据库是否能解决,再者是很多上下游、周边系统只支持 MySQL 不过也存了 ES 一份(其实 ES 运维压力并不比 MySQL 小)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.