这是我要解决的问题:
我需要能够显示存储在多个数据库分片中的分页、排序数据表。
分页和排序是众所周知的问题,当数据来自单一来源时,我们大多数人都可以通过多种方式解决这些问题。但是,如果您要跨分片拆分数据或使用 DHT 或分布式文档数据库或任何您喜欢的 NoSQL 风格,事情就会变得更加复杂。
这是一个非常小的数据集的简单图片:
碎片 | 数据
1 | 1
| 1
| G
2 | 乙
2 | E
2 | H
3 | C
3 | F
3 | 一世
分页(页面大小 = 3):
页 | 数据
1 | 1
| 1
| C
2 | 2
| E
2 | F
3 | G
3 | H
3 | 一世
如果我们想向用户显示第 2 页,我们会返回:
D
E
F
如果有问题的表的大小大约是 1000 万行或 1 亿行,您不能只是将所有数据拉到 Web/应用程序服务器上对其进行排序并返回正确的页面。而且您显然不能让每个单独的分片对自己的数据片段进行排序和分页,因为分片彼此不知道。
更复杂的是,我需要呈现的数据不能过时,因此提前预先计算一组有用的排序并存储结果以供以后检索是不切实际的。