Sto cercando di memorizzare un elenco ordinato all'interno di un database. Voglio eseguire le seguenti operazioni in modo efficiente.
- Inserisci (x) - Inserisci il record x nella tabella
- Elimina (x) - Elimina il record x dalla tabella
- Prima (x, n) - Restituisce i record 'n' che precedono il record x nell'elenco ordinato.
- Dopo (x, n) - Restituisce i record 'n' successivi al record x nell'elenco ordinato.
- Primo (n) - Restituisce i primi 'n' record dall'elenco ordinato.
- Last (n) - Restituisce gli ultimi 'n' record dall'elenco ordinato.
- Confronta (x, y) - Dati due record xey dalla tabella, scopri se x> y.
Il metodo semplice che mi viene in mente è quello di memorizzare una sorta di attributo 'rank' nella tabella e interrogare ordinando quell'attributo. Ma in questo metodo inserire / modificare un record con un rango diventa un'operazione costosa. C'è un metodo migliore?
In particolare, sto cercando di implementare la tabella utilizzando Amazon SimpleDB. Ma dovrebbe essere utile anche una risposta generale per un database relazionale.
Aggiornamento sul profilo di caricamento:
Dal momento che sto pianificando questo per un'applicazione Web, dipende dal numero di utenti che utilizzano l'app.
Se ci sono 100k utenti attivi (super ottimismo: P), allora la mia stima molto approssimativa al giorno sarebbe
500k seleziona, 100k inserisce ed elimina, aggiornamenti 500k
Mi aspetto che il tavolo cresca fino a 500k in totale.
Sto cercando di ottimizzare gli aggiornamenti, inserire e confrontare le operazioni. Il rango degli articoli cambierà costantemente e devo tenere aggiornato il tavolo.