Oto problem, który próbuję rozwiązać:W jaki sposób wdrażasz sortowanie i stronicowanie na rozproszonych danych?
Potrzebuję być w stanie wyświetlić stronicowaną, posortowaną tabelę danych, która jest przechowywana w kilku odłamkach bazy danych.
Przywoływanie i sortowanie to dobrze znane problemy, które większość z nas może rozwiązać na wiele sposobów, gdy dane pochodzą z jednego źródła. Ale jeśli dzielisz dane przez shardy lub używasz DHT lub bazy danych dokumentów rozproszonych lub dowolnego smaku NoSQL, który wolisz, sprawy stają się bardziej skomplikowane.
Oto prosty obraz naprawdę mały zestaw danych:
Shard | Data
1 | A
1 | D
1 | G
2 | B
2 | E
2 | H
3 | C
3 | F
3 | I
sortowane do stron (Page Size = 3):
Strona | Data
1 | A
1 | B
1 | C
2 | D
2 | E
2 | F
3 | G
3 | H
3 | I
A jeśli chcieliśmy pokazać stronę użytkownika 2, wrócilibyśmy:
D
E
F
Jeśli rozmiar tabeli w pytaniu jest coś takiego jak 10 milionów wierszy lub 100 milionów, nie można po prostu ściągnąć wszystkich danych na serwer aplikacji/strony internetowej, aby je posortować i zwrócić poprawną stronę. I oczywiście nie możesz pozwolić, by każdy pojedynczy odłamek sortował i wysyłał własny fragment danych, ponieważ odłamki nie wiedzą o sobie nawzajem.
Dane, które muszę przedstawić, nie mogą być zbyt nieaktualne, dlatego wcześniejsze obliczenie zestawu użytecznych rodzajów i przechowywanie wyników do późniejszego wyszukiwania nie jest praktyczne.
1 i 3 są niewykonalne dla mnie, ale 2 jest interesujące. Zamierzam dzisiaj bawić się z tym pomysłem i zobaczyć, co mogę wymyślić. –
Mam prototyp 2 prac i wygląda na to dobre rozwiązanie. Sortowanie na polach o małej liczności dodaje pewne komplikacje i jest nieco powolne ze względu na powtarzające się kwerendy liczników, ale wykorzystuje bardzo mało zasobów systemowych. –
Miło słyszeć! Było to dla mnie tylko teoretyczne ćwiczenie, cieszę się, że udało się to po wdrożeniu. –