Eu tenho uma máquina de estado que precisa enviar / enviar alguns nomes de arquivos para diferentes usuários. Tradicionalmente, eu usava pilhas como opção de estrutura de dados, mas isso precisa ser feito usando um banco de dados, pois não tenho como manter a estrutura de dados entre as solicitações da Web recebidas.
Eu queria saber o que seria uma boa maneira de implementar a funcionalidade de pilha usando bancos de dados?
Eu preciso apoiar:
- push (fileName, user): envia um fileName para o usuário
- pop (usuário): exibe o nome do arquivo mais alto para o usuário
EDIT :
Estou criando uma ideia para prototipar e, portanto, estou usando o sqlite3 com python.
Obrigado!
database-design
database-recommendation
brainydexter
fonte
fonte
Respostas:
Se você está perguntando sobre qual banco de dados usar, isso realmente depende da preferência pessoal e do que você deseja dele. Como eu estou familiarizado apenas com o MySQL, responderei a outra parte da pergunta assumindo o MySQL:
você desejará usá-lo
INNODB
porque sua tabela precisará de gravação intensiva e, para tabelas grandes, o bloqueio de linhas do INNODB será um salva-vidasMyISAM
.Quanto ao design da tabela, parece que você realmente precisa apenas de uma tabela:
Fui com uma coluna 'id' arbitrária definida como
AUTO_INCREMENT
porque a chave primária é replicada em todas as entradas de todos os índices. Portanto, executar uma chave primária de (usuário, nome do arquivo) pode causar problemas de desempenho se os nomes dos arquivos forem extremamente longos.O tamanho da coluna 'id' depende do tamanho da sua tabela. Smallint não assinado fornecerá 65k linhas.
Usuário e nomes de arquivos são varchar, porque eles variam drasticamente em tamanho, suponho.
O
date_insert
é apenas uma maneira de ordenar os resultados com base em quando ela foi inserida (útil para o seu POP)fonte
Se você estiver considerando um banco de dados Oracle, considere usar o serviço de enfileiramento avançado com um padrão de desenfileiramento LIFO (último a entrar, primeiro a sair) .
fonte