Tengo una máquina de estado que necesita presionar / hacer estallar algunos nombres de archivo para diferentes usuarios. Tradicionalmente, usaría pilas como la elección de la estructura de datos, pero esto debe hacerse utilizando una base de datos, ya que no tengo una manera de retener la estructura de datos entre las solicitudes web entrantes.
Me preguntaba cuál sería una buena manera de implementar la funcionalidad de la pila utilizando bases de datos.
Necesito apoyar:
- push (fileName, user): inserta un nombre de archivo para el usuario
- pop (usuario): Pop el nombre de archivo más alto para el usuario
EDITAR :
Estoy creando prototipos de una idea, por lo que estoy usando sqlite3 con python.
¡Gracias!
database-design
database-recommendation
brainydexter
fuente
fuente
Respuestas:
Si está preguntando qué base de datos usar, realmente depende de la preferencia personal y de lo que desea obtener de ella. Como solo estoy familiarizado con MySQL, responderé la otra parte de la pregunta suponiendo que MySQL:
querrá usarlo
INNODB
porque su tabla va a ser intensiva en escritura y para tablas grandes, el bloqueo de filas de INNODB será un salvavidasMyISAM
.En cuanto al diseño de la tabla, parece que realmente solo necesita una tabla:
Fui con una columna arbitraria de 'id' establecida
AUTO_INCREMENT
porque la clave principal se replica en cada entrada de cada índice. Por lo tanto, hacer una clave principal de (usuario, nombre de archivo) podría causar problemas de rendimiento si los nombres de archivo son extremadamente largos.El tamaño de su columna 'id' depende de qué tan grande va a crecer su mesa. Unsint Smallint le dará 65k filas.
Los nombres de usuario y de archivo son varchar, porque supongo que variarán drásticamente en longitud.
Esta
date_insert
es solo una forma de ordenar sus resultados en función de cuándo se insertó (útil para su POP)fuente
Si está considerando una base de datos Oracle, debería considerar el uso de Advanced Queuing con un patrón de cola LIFO (último en entrar, primero en salir) .
fuente