以下是我要解决的问题:
我需要能够显示存储在多个数据库分片中的分页,排序数据表。
分页和排序是众所周知的问题,当数据来自单一来源时,我们大多数人都可以通过多种方式解决这些问题。但是如果你在分片之间分割你的数据,或者使用DHT或分布式文档数据库或者你喜欢的任何NoSQL,那么事情会变得更加复杂。
这是一个非常小的数据集的简单图片:
碎片|数据
1 |一个
1 | d
1 |摹
2 |乙
2 | Ë
2 | ^ h
3 | ç
3 | ˚F
3 |我
分页到页面(页面大小= 3):
Page |数据
1 |一个
1 |乙
1 | ç
2 | d
2 | Ë
2 | ˚F
3 |摹
3 | ^ h
3 |我
如果我们想要显示用户页面2,我们将返回:
d
Ë
˚F
如果所讨论的表的大小类似于1000万行或1亿行,则不能只将所有数据下载到Web /应用程序服务器上以对其进行排序并返回正确的页面。而且你显然不能让每个单独的分片排序并分页自己的数据片段,因为分片彼此不了解。
为了使问题复杂化,我需要呈现的数据不能过时,因此提前预先计算一组有用的排序并存储结果以供以后检索是不切实际的。
答案 0 :(得分:9)
有几种解决方案,其中一些可能对您不可行,但也许其中一种解决方案会坚持下去:
O(log(n))
查询,因此它比(1)慢,但如果负载不是很重,仍然可能相当快。