分布式系统 读书笔记(三)跨库查询的问题和及解决
如果一个查询涉及多个库或者多张分表 结果该如何处理
1.排序,即多个来源的数据查询出来以后,在应用层进行排序的工作。查出来如果是已经排序号的,则对多路进行归并排序否则就要进行一个全排序。
2.函数处理,即使用Max,Min,Sum,Count 等函数对多个数据来源的值进行相应的函数处理
3.求平均值,从多个数据来源进行查询时,需要把SQL改为查询SUM和Count,然后对多个数据来源的Sum求和,count求和后,计算平均值,这是需要注意的地方
4非排序分页,这需要看具体实现所采取的策略,是同等步长地在多个数据源上分页处理,还是同等比例地分页处理。
同等步长地意思是:分页的每页中,来自不同数据源的记录数是一样的
数据源1 1 1 2 2 3 3 4 4 5 5 5 5 6 6 6 6
数据源2 1 1 2 2 3 3 4 4
同等比列:分页的每页中,来自不同数据源的数据数占这个数据源符合条件的数据总数的比列是一样的。
数据源1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
数据源2 1 1 2 2 3 3 4 4
5排序后分页
两个不同的数据例子
数据源1 1 3 5 7 9 11 13 15 17 19 21 23 25
数据源2 2 4 6 8 10 12 14 16 18 20 22 24 26
数据源1 1 3 5 6 7 8 10 12 13 19 21 23 25
数据源2 2 4 9 11 14 15 16 17 18 20 22 24 26
注意排序分页是合并操作中最复杂的情况,因此,在访问量很大的系统中,应该尽量避免这种方式,尤其是排序后需要翻N页的情况