分库分表之后如何通过非分片键操作

本文探讨了在分库分表后如何处理非分片键的操作,如定时删除数据和非分片键查询。提出了四种解决方案:1) 直接查询所有分片,2) 指定数据库节点读取,3) 异构索引,以及4) 实时数仓。同时,指出了分库分表带来的事务支持和复杂查询等弊端,并提出了解决策略。
摘要由CSDN通过智能技术生成

1、场景

今天看到一个场景,比如一个表,表名字是award_use_risk,作用是记录奖品使用的记录,用作风控。表结构如下:

这个表,只是分库,没有分表,db分成4个库,分别是db0-db4。

我的第一反应是根据terminal no或者prize guid,具体看业务逻辑进行分表操作,这样增加、修改、删除都可以通过分片算法定位到哪个库。

后来看到业务场景里面,需要定时删除前一天的风控数据,这种情况下,条件里面只有时间,没有分片键,如何定位每个库呢?

梳理一下:

  1. 根据prize guid进行分片路由,比如prize guid%1024/256,结果0-3,正好我们是四个库,没有问题
  2. 如果删除前一天的所有风控记录,怎么办,这个时候没有prize guid,如何分片?delete from award_use_risk where gmt_create 大约昨天,我们要的就是这个sql语句在每个库执行一遍,不能路由,因为路由不确定哪个库执行,哪个库没有执行。

2、思路

为了确定删除的时候在哪个库,我们不能用prize guid,只能用确定的数字0-3去定位每个库执行一遍,这样我们的分片路由键就必须是一个确定范围的数字,0,1,2,3,称之为data id。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值