这个问题有点复杂,有个不是太成熟的解决方案,供你参考:
取第一页的数据很简单,从A、B两个服务中分别获取pageSize条数据,这样可以得到两个数据集,dataA和dataB,然后可以在内存中将dataA和dataB合并成一个数据集,并重新排序,截取前pageSize数据,该数据集可以直接返回给UI了,同时要记录分别从dataA和dataB中获取的数据条数,记为indexA和indexB,保存到内存中。
获取第二条数据时,从A、B两个服务中分别获取自indexA和indexB开始的pageSize条数据,同样,在内存中合并,并记录新的indexA和indexB,供取下一页数据时使用。
这样,在你的A、B两个服务中的接口可以如下定义:
search(int startIndex, int pageSize[, conditions])
上述解决方案的问题在于,取第N页的数据时,需要第N-1页的数据状态,如果用户都是顺序操作,当然没有问题,如果用户希望直接调整到第N页,数据量比较大的时候这个性能就很差了,当然了,可以考虑将这些查询状态数据存储在主服务的缓存中,但这个牵涉到的数据同步更新就会比较复杂了。
我暂时只能想到这些,供你参考。
非常感谢,正是我想要找的答案
目前只提供上一页和下一页,使用你的方法正合适:
下一页时,从两个数据源中分别取pageSize条记录,重新排序后取前pageSize条
上一页时,重新排序后取后pageSize条
接口和你的相同,只是在取上一页时pageSize是负数,或者再添加一个参数表示上一页或下一页
1、使用数据库的同名特性,把A(或B)的表映射到B(或A),然后创建一个视图,再走数据库系统的分页功能。
2、直接在一个数据库里连接另外一个数据库,把俩表数据构建一个视图,然后再走数据库系统的分页功能。
谢谢回答,不过Y系统需要通过X系统提供的API接口search获取数据,不能直接访问到X系统的数据库
@BXTX: 那你这个问题是无解的,没办法简单、高效的执行这个操作。
不过,你还是可以:
1、两边分别读取数据,然后综合起来再分页
2、最好:数据分开分页,别走结合分页
建议:如果一定要结合分页,实现数据库系统的内部关联。
m貌似有点难度的样子。
谢谢回答,是有点难度,数据量小时是可以将所有数据取出来在内存中分页,数据量多时就不知怎么搞了,希望能有个好办法
你的内存需要大一点
不说别的,你需要的是1个同步后的索引,这个索引里有所有数据.剩下的就是这个索引怎么实现的问题了
你后台实时跑一个程序,进行这个两个库的数据查询操作,然后存到redis等里面
貌似不能直接实现,不过你可以借助第三方来实现,例如redis等.