データベース内にソートされたリストを保存したいと思っています。次の操作を効率的に実行したい。
- Insert(x)-レコードxをテーブルに挿入します
- Delete(x)-テーブルからレコードxを削除します
- Before(x、n)-ソートされたリストでレコードxの前にある 'n'レコードを返します。
- After(x、n)-ソートされたリストのレコードxに続く 'n'レコードを返します。
- First(n)-ソートされたリストから最初の 'n'レコードを返します。
- Last(n)-ソートされたリストから最後の 'n'レコードを返します。
- Compare(x、y)-テーブルの2つのレコードxとyが与えられ、x> yかどうかを見つけます。
私が考えることができる簡単な方法は、ある種の「ランク」属性をテーブルに保存し、その属性でソートすることでクエリすることです。ただし、この方法では、ランク付きのレコードの挿入/変更はコストのかかる操作になります。より良い方法はありますか?
具体的には、AmazonのSimpleDBを使用してテーブルを実装することを検討しています。ただし、リレーショナルデータベースの一般的な回答も役立つはずです。
負荷プロファイルの更新:
これはWebアプリケーション用に計画しているので、アプリを使用するユーザーの数に依存します。
10万人のアクティブユーザーがいる場合(スーパーオプティミズム:P)、1日あたりの私のおおよその見積もりは
50万の選択、10万の挿入と削除、50万の更新
テーブルは合計で500kまで成長すると予想されます。
更新、挿入、および比較の操作を最適化しようとしています。アイテムのランクは常に変化するため、テーブルを更新し続ける必要があります。