Ich habe eine Zustandsmaschine, die einige Dateinamen für verschiedene Benutzer pushen / einfügen muss. Ich würde traditionell Stapel als Wahl der Datenstruktur verwenden, aber dies muss unter Verwendung einer Datenbank erfolgen, da ich keine Möglichkeit habe, die Datenstruktur zwischen eingehenden Webanforderungen beizubehalten.
Ich habe mich gefragt, wie ich die Stack-Funktionalität mithilfe von Datenbanken implementieren kann.
Ich muss unterstützen:
- push (Dateiname, Benutzer): Drücken Sie einen Dateinamen für den Benutzer
- pop (Benutzer): Pop den obersten Dateinamen für den Benutzer
EDIT :
Ich arbeite als Prototyp einer Idee und verwende daher sqlite3 mit Python.
Vielen Dank!
database-design
database-recommendation
Brainydexter
quelle
quelle
Antworten:
Wenn Sie sich fragen, welche Datenbank Sie verwenden möchten, hängt dies wirklich von Ihren persönlichen Vorlieben ab und davon, was Sie davon erwarten. Da ich nur mit MySQL vertraut bin, beantworte ich den anderen Teil der Frage unter der Annahme von MySQL:
Sie möchten verwenden,
INNODB
da Ihre Tabelle schreibintensiv sein wird und bei großen Tabellen die Zeilensperrung von INNODB lebensrettend istMyISAM
.Was das Tischdesign angeht, brauchen Sie anscheinend nur einen Tisch:
Ich habe eine beliebige 'id'-Spalte gewählt,
AUTO_INCREMENT
da der Primärschlüssel in jedem Eintrag jedes Index repliziert wird. Wenn Sie also einen Primärschlüssel von (Benutzer, Dateiname) eingeben, kann dies zu Leistungsproblemen führen, wenn Ihre Dateinamen extrem lang sind.Die Größe Ihrer ID-Spalte hängt davon ab, wie groß Ihre Tabelle wird. Mit unsigned Smallint erhalten Sie 65.000 Zeilen.
Benutzer- und Dateinamen sind varchar, da sie sich in der Länge drastisch unterscheiden, nehme ich an.
Dies
date_insert
ist nur eine Möglichkeit, Ihre Ergebnisse nach dem Zeitpunkt des Einfügens zu ordnen (hilfreich für Ihren POP).quelle
Wenn Sie eine Oracle-Datenbank in Betracht ziehen, sollten Sie Advanced Queuing mit einem LIFO- Warteschlangenmuster (last in first out) in Betracht ziehen .
quelle