(九十九)大白话下一个难题,如果需要进行垮库的分页操作,应该怎么来做?

今天我们要来给大家分享的一个案例拓展,是关于分库分表后的跨库/跨表的分页问题,首先我们先来聊聊这个所谓的分页是个什么场景。那比如说还是说之前的那个订单的场景,假设用户现在要查询自己的订单,同时订单要求要支持分页,该怎么做?

其实按我们之前所说的,基本上你只要按照userid先去分库分表的(userid, orderid)索引映射表里查找到你的那些orderid,然后搞一个分页就可以了,对分页内的orderid,每个orderid都得去按orderid分库分表的数据里查找完整的订单数据,这就可以搞定分库分表环境的下分页问题了。

这仅仅是一个例子,告诉你的是,如果要在分库分表环境下搞分页,最好是保证你的一个主数据粒度(比如userid)是你的分库分表的粒度,你可以根据一个业务id路由到一个表找到他的全部数据,这就可以做分页了。

但是此时可能有人会提出一个疑问了,那如果说现在我想要对用户下的订单做分页,但是同时还能支持指定一些查询条件呢?对了,这其实也是很多APP里都支持的,就是对自己的订单查询,有的APP是支持指定一些条件的,甚至是排序规则,比如订单名称模糊搜索,或者是别的条件,比如说订单状态。

举个例子吧,比如说最经典的某个电商APP,大家平时都玩儿的一个,在我的订单界面,可以按照订单状态来搜索,分别是全部、待付款、待收货、已完成、已取消几个状态,同时就是对订单购买的商品标题进行模糊搜索。

那么此时你怎么玩儿分页呢?因为毕竟你的索引映射表里,只有(userid, orderid)啊!可是这又如何呢?你完全可以在这个索引映射表里加入更多的数据,比如(userid, orderid, order_status, product_description),加上订单所处的状态,以及商品的标题、副标题等文本。

然后你在对我的订单进行分页的 时候,直接就可以根据userid去索引映射表里找到用户的所有订单,然后按照订单状态、商品描述文本模糊匹配去搜索,完了再分页,分页拿到的orderid,再去获取订单需要展示的数据,比如说订单里包含的商品列表,每个商品的缩略图、名称、价格以及所属店铺。

那如果是针对运营端的分页查询需求呢?这还用说?上次都提过了,数据直接进入ES里,通过ES就可以对多条件进行搜索同时再进行分页了,这很好搞定!

当然,网上是有人说过一些所谓的跨库的分页方案,比如说一定要针对跨多个库和多个表的数据搞查询和分页,那这种如果你一定要做,基本上只能是自己从各个库表拉数据到内存,自己内存里做筛选和分页了,或者是基于数据库中间件去做,那数据库中间件本质也是干这个,把各个库表的数据拉到内存做筛选和分页。

实际上我是绝对反对这种方案的,因为效率和性能极差,基本都是几秒级别的速度。

所以当你觉得似乎必须要跨库和表查询和分页的时候,我建议你,第一,你考虑一下是不是可以把你查询里按照某个主要的业务id进行分库分表建立一个索引映射表,第二是不是可以可以把这个查询里要的条件都放到索引映射表里去,第三,是不是可以通过ES来搞定这个需求。

尽可能还是按照上述思路去做分库分表下的分页,而不要去搞跨库/表的分页查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值