Mycat问题规避

前言

众所周知,mycat 是一个分布式数据库,前几年很火,其实也就火了两年,现在官网也不太活跃,但是还有一些公司在用,根据本人的使用经验,希望可以对大家有些帮助

分组统计问题

结论: 首先mycat底层依赖的数据库以mysql5.7 为例,凡是分组的对象 该字段必须查询,但是mycat对分组不友好,如何保证数据分组的正确性
a:当需求是根据表字段分组且包含子查询,此时子查询内以及外面都根据分组字段进行分组
b: 当分组的对象非表字段是自己构造的临时字段并要求该构造字段分组,包含子查询,此时子查询内不需要分组但是外面都根据分组字段进行分组
c: 主要原因是mycat分片结果的影响,分片对表字段影响很大,对构造的临时字段无影响

比例计算问题

由于mycat 分片的影响,同一个分片或许是准确,但是最终的结果是不正确,在极端某些情况也是可以的,保险起见,到拿到内存里面算,当前页回传从新赋值

分页排序问题

由于mycat分片的影响,每次有几个分片就会同时执行几条sql,每次返回取决各个分片的响应速度,不能保证唯一,是随机的,可以选择以分片规则的字段进行order by 即可保证有序

函数兼容问题

很多mysql的函数是不支持的,一定要在mycat环境进行测试,当发现查到的数据与自己期望的数据相差很大的时候,要看看自己的语法是否正确,在大多是情况下,写错了也能运行,十分不严谨

增删改查

仅仅支持单条数据的增删改查,只能选择全量的更新,替换

sum和count 问题

sum( case when age>25 then 1 else 0 end) as totalAgeNum    ok
count( case when age>25 then 1  end) as totalAgeNum          ok
count( case when age>25 then 1 else 0 end) as totalAgeNum   error (因为分片会把0当做1加和)

limit问题

每个mycat限制查询的总数,比如10000,当对于这个数,必须写一个maxQueryNmber,让limit 失效,不然总是查询10000条,数据量少的时候还发现不了,隐藏的地雷坑

索引问题

加索引尽管有效,但是收效甚微,主要还是和数据量,mycat配置和mysql的硬件配置有很大的关系

分片问题

分片不是越多越好,符合一个正态分布,一定要做压测,进行数据分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值