J'ai une machine à états qui doit pousser / pop certains noms de fichiers pour différents utilisateurs. J'utiliserais traditionnellement des piles comme choix de structure de données, mais cela doit être fait en utilisant une base de données car je n'ai pas de moyen de conserver la structure de données entre les requêtes Web entrantes.
Je me demandais quel serait un bon moyen d'implémenter la fonctionnalité de pile à l'aide de bases de données?
Je dois soutenir:
- push (fileName, user): push un fileName pour l'utilisateur
- pop (utilisateur): affiche le nom de fichier le plus élevé de l'utilisateur
MODIFIER :
Je prototype une idée et j'utilise donc sqlite3 avec python.
Merci!
database-design
database-recommendation
brainydexter
la source
la source
Réponses:
Si vous demandez quelle base de données utiliser, cela dépend vraiment de vos préférences personnelles et de ce que vous en voulez. Comme je ne connais que MySQL, je répondrai à l'autre partie de la question en supposant que MySQL:
vous voudrez utiliser
INNODB
parce que votre table va être gourmande en écriture et pour les grandes tables, le verrouillage des lignes d'INNODB sera un épargnant de vieMyISAM
.En ce qui concerne la conception des tables, il semble que vous n'ayez vraiment besoin que d'une seule table:
Je suis allé avec une colonne 'id' arbitraire définie sur
AUTO_INCREMENT
car la clé primaire est répliquée dans chaque entrée de chaque index. Donc, faire une clé primaire de (utilisateur, nom de fichier) peut entraîner des problèmes de performances si vos noms de fichiers sont extrêmement longs.La taille de votre colonne 'id' dépend de la taille de votre table. Un Smallint non signé vous donnera 65 000 lignes.
L'utilisateur et les noms de fichiers sont varchar, car ils varient considérablement en longueur, je suppose.
C'est
date_insert
juste un moyen de classer vos résultats en fonction du moment où ils ont été insérés (utile pour votre POP)la source
Si vous envisagez une base de données Oracle, vous devez envisager d'utiliser Advanced Queuing avec un modèle de retrait de file d' attente LIFO (dernier entré premier sorti) .
la source