Je cherche à stocker une liste triée dans une base de données. Je souhaite effectuer efficacement les opérations suivantes.
- Insert (x) - Insère l'enregistrement x dans la table
- Supprimer (x) - Supprimer l'enregistrement x de la table
- Before (x, n) - Renvoie les enregistrements 'n' précédant l'enregistrement x dans la liste triée.
- After (x, n) - Renvoie les enregistrements 'n' qui succèdent à l'enregistrement x dans la liste triée.
- Premier (n) - Renvoie les premiers n enregistrements de la liste triée.
- Dernier (n) - Renvoie les derniers n enregistrements de la liste triée.
- Comparer (x, y) - Deux enregistrements x et y de la table, trouver si x> y.
La méthode simple à laquelle je pouvais penser est de stocker une sorte d'attribut 'rang' dans la table et d'interroger en triant sur cet attribut. Mais dans cette méthode, insérer / modifier un enregistrement avec un rang devient une opération coûteuse. Y a-t-il une meilleure méthode?
Plus précisément, je cherche à implémenter la table en utilisant SimpleDB d'Amazon. Mais une réponse générale à une base de données relationnelle devrait également être utile.
Mise à jour sur le profil de charge:
Comme je prévois cela pour une application Web, cela dépend du nombre d'utilisateurs qui l'utilisent.
S'il y a 100 000 utilisateurs actifs (super optimisme: P), alors mon estimation très approximative par jour serait
500 000 sélections, 100 000 insertions et suppressions, 500 000 mises à jour
Je m'attendrais à ce que la table atteigne 500k au total.
Je cherche à optimiser les opérations de mise à jour, d’insertion et de comparaison. Le classement des objets changera constamment et je dois tenir le tableau à jour.