Chcę przechowywać posortowaną listę w bazie danych. Chcę wydajnie wykonać następujące operacje.
- Wstaw (x) - Wstaw rekord x do tabeli
- Usuń (x) - Usuń rekord x z tabeli
- Przed (x, n) - zwraca rekordy „n” poprzedzające rekord x na posortowanej liście.
- Po (x, n) - zwraca rekordy „n” następujące po rekordzie x z posortowanej listy.
- Pierwszy (n) - Zwraca pierwsze rekordy „n” z posortowanej listy.
- Last (n) - Zwraca ostatnie „n” rekordy z posortowanej listy.
- Porównaj (x, y) - Biorąc pod uwagę dwa rekordy xiy z tabeli, sprawdź, czy x> y.
Prostą metodą, o której mógłbym pomyśleć, jest zapisanie w tabeli i zapytaniu jakiegoś atrybutu „ranga” poprzez sortowanie według tego atrybutu. Ale w tej metodzie wstawianie / modyfikowanie rekordu o randze staje się kosztowną operacją. Czy istnieje lepsza metoda?
W szczególności chcę zaimplementować tabelę za pomocą SimpleDB firmy Amazon. Ale ogólna odpowiedź na relacyjną bazę danych również powinna być pomocna.
Aktualizacja profilu obciążenia:
Ponieważ planuję to dla aplikacji internetowej, zależy to od liczby użytkowników korzystających z aplikacji.
Jeśli jest 100 000 aktywnych użytkowników (super optymizm: P), to mój bardzo przybliżony szacunek na dzień
500k wybiera, 100k wstawia i usuwa, 500k aktualizacji
Spodziewałbym się, że stół wzrośnie do 500 tys.
Chcę zoptymalizować operacje aktualizacji, wstawiania i porównywania. Ranga przedmiotów będzie się ciągle zmieniać i muszę aktualizować tabelę.