分表后⾮sharding_key的查询怎么处理呢?

1. 可以做⼀个mapping表,⽐如这时候商家要查询订单列表怎么办呢?不带user_id查询的话你总不能扫全表吧?所以我们可以做⼀个映射关系表,保存商家和⽤户的关系,查询的时候先通过商家查询到⽤户列表,再通过user_id去查询。

2. 打宽表,⼀般⽽⾔,商户端对数据实时性要求并不是很⾼,⽐如查询订单列表,可以把订单表同步到离线(实时)数仓,再基于数仓去做成⼀张宽表,再基于其他如es提供查询服务。

3. 数据量不是很⼤的话,⽐如后台的⼀些查询之类的,也可以通过多线程扫表,然后再聚合结果的⽅式来做。或者异步的形式也是可以的。

List<Callable<List<User>>> taskList = Lists.newArrayList();

for (int shardingIndex = 0; shardingIndex < 1024; shardingIndex++) { t

askList.add(() -> (userMapper.getProcessingAccountList(shardingIndex)));

}

List<ThirdAccountInfo> list = null;

try {

list = taskExecutor.executeTask(taskList);

} catch (Exception e) {

//do something

}

public class TaskExecutor {

public <T> List<T> executeTask(Collection<? extends Callable<T>> tasks) throws Exception {

List<T> result = Lists.newArrayList();

List<Future<T>> futures = ExecutorUtil.invokeAll(tasks);

for (Future<T> future : futures) {

result.add(future.get());

}

return result;

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空...
    hongru阅读 884评论 0 1
  • 业务背景及需求 根据业务发展,需要一个进件平台,该平台提供统一的第三方渠道接入接口规范和公司内部业务系统接入规范,...
    javacoo阅读 2,273评论 1 19
  • 异步编程之RPC框架 在程序设计中为了应对复杂业务场景我们通常会讲系统设计模块化。不同模块之间免不了相互通信,如...
    Adam_7a99阅读 1,358评论 0 0
  • 前文回顾 抢红包案例分析以及代码实现(一) 抢红包案例分析以及代码实现(二) 抢红包案例分析以及代码实现(三 ) ...
    程序员BUG阅读 252评论 0 1
  • demo背景: 现如今互联网无时无刻不在面临着高并发问题,比如早年的小米手机出新产品时,大量的买家使用各种终端设备...
    狼不造阅读 2,236评论 0 0