これが私が解決しようとしている問題です:
複数のデータベース シャードにまたがって保存されている、ページ化され、並べ替えられたデータのテーブルを表示できる必要があります。
ページングと並べ替えはよく知られた問題であり、データが単一のソースから取得された場合、ほとんどの人がさまざまな方法で解決できます。しかし、データを複数のシャードに分割したり、DHT や分散ドキュメント データベース、または任意の種類の NoSQL を使用したりする場合、事態はさらに複雑になります。
以下は、非常に小さなデータ セットの簡単な図です。
シャード | データ
1 | 1
| D
1 | G
2 | B2
| E
2 | H
3 | C
3 | F
3 | 私
ページに並べ替え (ページ サイズ = 3):
ページ | データ
1 | 1
| B1
| C
2 | D
2 | E
2 | F
3 | G
3 | H
3 | 私
ユーザーのページ 2 を表示したい場合は、次のように返します。
D
E
F
問題のテーブルのサイズが 1,000 万行または 1 億行の場合、すべてのデータを Web/アプリケーション サーバーにプルダウンして並べ替え、正しいページを返すことはできません。また、シャードはお互いを認識していないため、個々のシャードにデータの独自のスライスを並べ替えてページングさせることは明らかにできません。
さらに複雑なことに、提示する必要のあるデータがそれほど古いものであってはならないため、事前に一連の有用な並べ替えを事前に計算し、後で取得できるように結果を保存することは現実的ではありません。