shardingsphere分表之后, 不分表与分表逻辑表的join问题

摘要: 用shardingsphere分表设计,如果一个表分片,另外一个表不分片,但需求人员的需求是需要用不分片的这个表去 join 分片的逻辑表。这个时候很可能出问题

用shardingsphere分表设计,如果一个表分片,另外一个表不分片,但需求人员的需求是需要用不分片的这个表去 join 分片的逻辑表。这个时候很可能出问题。假设用户表采用分片方式,分做了 10 个分表, 逻辑表为 t_user, 而黑名单不分表,假设为t_black_user, 黑名单是导入进来的,而且需求说了,黑名单导入不做校验。但在查询黑名单的时候,需要根据电话号码去关联t_user表,在列表中展示用户的一些基本信息。

按照通常的做法,采用如下SQL:

select a.字段, b.字段...  from t_black_user a left join t_user b on a.tel=b.tel ...

如果这么做,会产生10倍的数据量,因为shardingsphere会采用 t_black_user 分别与 t_user_1, t_user_2.... t_user_10 去left join 查询,然后合并结果,这显然是错的。


那么可能又会这么想,不用left join, 用 inner join.

select a.字段, b.字段...  from t_black_user a inner join t_user b on a.tel=b.tel ...

那么新的问题又来了,这种查询是必须两个表中都有的数据才能查询出来,必须是交集数据。但需求说了,导入的数据,可能是用户表中没有的。但也要看到。所以这种做法也不满足需求。


万般无赖之下,在开发中也用同样的分片方式, 将t_black_user 也拆封成10个分表,然后配置绑定表方式,再用left  join 方式,反而得到了正确的结果。不知道还有什么其它好办法...


分库分表本来是个好东西,就怕滥用,而且也怕需求瞎搞,一旦需求搞出很多无脑的需求,怎么分表都无法解决。我的建议是搞一个数据仓库,把数据抽取到数据仓库中,作为OLAP库,然后在这个上面进行数据分析处理,当然也可以用定时任务等方式,把数据处理到OLAP上。 但这边一根筋,条件不支持,暂时也不能做。以后在看吧。

上一篇: js, canvas实现冬奥会立春效果图
下一篇: 广电网络电话192段号码申请

Avatar

harries 评论于: 2022-08-01

ElasticSearch

Avatar

harries 评论于: 2022-08-01

用聚合去做聚合查询
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号