Eu estou olhando para armazenar uma lista classificada dentro de um banco de dados. Quero executar as seguintes operações com eficiência.
- Inserir (x) - Insere o registro x na tabela
- Excluir (x) - exclui o registro x da tabela
- Antes (x, n) - Retorne os registros 'n' que precedem o registro x na lista classificada.
- Depois (x, n) - Retorna os registros 'n' que sucedem o registro x na lista classificada.
- Primeiro (n) - Retorna os primeiros registros 'n' da lista classificada.
- Last (n) - Retorna os últimos registros 'n' da lista classificada.
- Compare (x, y) - Dados dois registros xey da tabela, encontre se x> y.
O método simples em que pude pensar é armazenar algum tipo de atributo 'rank' na tabela e consultar, classificando esse atributo. Porém, nesse método, inserir / modificar um registro com uma classificação torna-se uma operação cara. Há um método melhor?
Especificamente, estou procurando implementar a tabela usando o SimpleDB da Amazon. Mas uma resposta geral para um banco de dados relacional também deve ser útil.
Atualização no perfil de carregamento:
Como estou planejando isso para um aplicativo Web, isso depende do número de usuários que usam o aplicativo.
Se houver 100 mil usuários ativos (super otimismo: P), minha estimativa aproximada por dia será
500k seleciona, 100k insere e exclui, 500k atualizações
Eu esperava que a tabela crescesse até 500k no total.
Estou procurando otimizar as atualizações, inserir e comparar as operações. A classificação dos itens mudará constantemente e eu preciso manter a tabela atualizada.