技术选型求助一发
MYSQL 里面三张 1000w 级别的表( A:500W B:1000W C:800W )
没有分库分表,有索引但我不能动(因为是其他部门的库)
列的数量:( A:30 B:15:C:20 )
每张表每天新增不超过 1W 条数据
并没有实时查询的需求(每天 12 点更新一次数据即可)
查询 QPS:小于 100
现在通过优化 SQL 最复杂的查询速度小于 5s
但现在渐渐扛不住了 领导还是觉得太慢
所以现在求助一下
第一个问题 继续优化 mysql 还能继续压榨性能吗
第二个问题 由于没有实时查询的要求 其他部门也愿意导出数据给我 找个适合 OLAP 的数据库能解决我现在的问题吗
![]() | 1 weizhen199 2020-09-08 10:19:22 +08:00 可以,整个 clickhouse |
![]() | 2 min 2020-09-08 10:24:49 +08:00 1. 不能动索引还谈什么优化 2. 可以上 olap |
3 90928yao 2020-09-08 10:42:42 +08:00 clickhouse 更新 还有 join 有点弱 |
![]() | 4 Sasasu 2020-09-08 11:02:26 +08:00 clickhouse join 弱的话我不知道什么数据库 join 强,对任何一种 join 来说 |
5 chihiro2014 2020-09-08 11:08:01 +08:00 如果是 join 的话,那得考虑大小表的问题,这样提高性能。 |
![]() | 6 nooper 2020-09-08 11:08:59 +08:00 SQL 写的不精炼 |
![]() | 7 defage 2020-09-08 11:10:37 +08:00 这都有点像数据仓库了。你全部给它扒下来,binlog 订阅弄到一个大型宽表,或者 es 里面去。 |
![]() | 8 F281M6Dh8DXpD1g2 2020-09-08 11:14:06 +08:00 无脑推 clickhouse 的太可笑了 |
9 newtype0092 2020-09-08 11:14:11 +08:00 数据全量 copy 过来,每天增量更新,能自己建索引就简单多了吧。 |
![]() | 11 dzdh 2020-09-08 11:16:08 +08:00 pgsql 保命 |
12 pangleon 2020-09-08 11:31:40 +08:00 1. ES 2. 新建表存储负责查询需要的条件,做冗余处理,然后依据索引去各个表拉数据。 |
![]() | 13 liuhan907 2020-09-08 11:33:10 +08:00 via Android 为什么不试试 tidb+tiflash+binlog 同步呢? |
14 sacuba 2020-09-08 11:40:01 +08:00 ![]() greenplum 可以一试 对你的需求来看比较适合 |
![]() | 15 encro 2020-09-08 11:43:04 +08:00 阿里云 1H1G RDS 满足每天几万单的需求。 CREATE TABLE `stat_store_per_day` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `store_id` int(11) NOT NULL COMMENT '店铺', `date` date NOT NULL, `key` smallint(4) NOT NULL COMMENT '统计项', `value` decimal(10,2) NOT NULL COMMENT '值', `create_at` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `store_id` (`store_id`,`key`,`date`), KEY `date` (`date`), KEY `key_date` (`key`,`date`) ) ENGINE=InnoDB; 作为程序员首先要问的是“为什么不能动索引?”: 1,不知道 online ddl 怕影响线上业务? 2,怕优化变慢?没有慢日志吗? 根据我的经验不能动通常是因为当心程序员功力不够,怕动了出灾难,但是不多动几次,怎么学习,团队成员怎么成长? 所以好的团队文化是:可以动,但是要在安全,做好安全措施前提谨慎的动。 |
![]() | 16 xuanbg 2020-09-08 11:48:51 +08:00 搞个小小的数仓,从数仓出数据就不会慢了。 |
17 sampeng 2020-09-08 12:35:11 +08:00 求各位不要无脑 es 了。。你们算过成本嘛。。几千万的数据上 es 集群。。。成本划算不划算? |
![]() | 19 dog82 2020-09-08 12:39:08 +08:00 为什么不能加减索引? |
20 zhangysh1995 2020-09-08 12:59:28 +08:00 TiDB 考虑一下? |
![]() | 21 death00 2020-09-08 13:17:39 +08:00 统一之前一个人的观点,如果一天动一次,把聚合结果用定时任务专门跑一次,以后直接查聚合结果,应该就会很方便了。 |
![]() | 22 ren2881971 2020-09-08 13:22:37 +08:00 建数据仓库,把事实表按照统计维度建立仓库,然后上联机分析工具 直接查询数据仓库数据。 这样快很多。 |
23 momowei 2020-09-08 13:31:25 +08:00 oracle 是最好选择 |
![]() | 24 surfire91 2020-09-08 13:46:52 +08:00 先看看索引能不能解决问题吧,如果能不如弄个从库,从库加索引,就这点数据量搞个数仓成本有点高。 |
25 laminux29 2020-09-08 14:48:44 +08:00 既然不允许动原库索引,你就弄个副本库嘛,在副本库上做各种索引,反正不要求实时。 |
![]() | 26 jenlors 2020-09-08 14:51:39 +08:00 楼主你需要的是这个,https://github.com/long2ice/synch |
27 Still4 2020-09-08 15:23:51 +08:00 个人经验 mysql 上千万进行聚合查询效率就很差了,就算索引跟查询很契合,架不住联表 寻找其他数据库是有必要的,是否上分布式就看你们预算了 |
![]() | 28 rrfeng 2020-09-08 15:47:05 +08:00 脱离业务谈需求就是 xxx 没说数据结构,查询条件,没法优化。 |
29 tairan2006 2020-09-08 16:11:46 +08:00 直接塞 es…你这又不是实时更新,连 binlog 同步都不用,每天 12 点根据 update_time 增量更新一次完事。 |
30 zhengdai1990 2020-09-08 17:52:06 +08:00 es 呗 |
![]() | 31 blueskea 2020-09-08 18:22:28 +08:00 via Android 两点想法供参考。1.参考 kylin 做预计算,结果还存储在 MySQL 中,再配合缓存。成本较低但预计算的逻辑设计比较复杂。2.binlog 实时同步工具 canal, sdc 。离线工具 sqoop, datax 。olap 数据库 kylin clickhouse kudu es, 建议选择有成熟 jdbc 接口的。都建大宽表,空间换时间。 |
![]() | 32 jwdstefani 2020-09-10 16:31:14 +08:00 ES 好使 |