Mam automat stanów, który musi wypychać / pop niektóre nazwy plików dla różnych użytkowników. Tradycyjnie stosowałbym stosy jako wybór struktury danych, ale należy tego dokonać przy użyciu bazy danych, ponieważ nie mam sposobu na zachowanie struktury danych między przychodzącymi żądaniami internetowymi.
Zastanawiałem się, jaki byłby dobry sposób na wdrożenie funkcjonalności stosu przy użyciu baz danych?
Muszę wesprzeć:
- push (nazwa_pliku, użytkownik): push nazwa_pliku dla użytkownika
- pop (użytkownik): Pop najwyższą nazwę pliku dla użytkownika
EDYCJA :
Prototypuję pomysł, więc używam sqlite3 z Pythonem.
Dzięki!
database-design
database-recommendation
brainydexter
źródło
źródło
Odpowiedzi:
Jeśli pytasz o to, której bazy danych użyć, tak naprawdę zależy to od osobistych preferencji i tego, czego chcesz od niej. Ponieważ znam tylko MySQL, odpowiem na drugą część pytania zakładając MySQL:
będziesz chciał z niego korzystać,
INNODB
ponieważ twoja tabela będzie intensywnie zapisywać, a dla dużych tabel blokowanie wierszy INNODB może uratować życieMyISAM
.Jeśli chodzi o projekt stołu, wydaje się, że naprawdę potrzebujesz tylko jednego stołu:
Poszedłem z dowolną kolumną „id” ustawioną na,
AUTO_INCREMENT
ponieważ klucz podstawowy jest replikowany przy każdym wpisie każdego indeksu. Tak więc wykonanie klucza podstawowego (użytkownik, nazwa pliku) może powodować problemy z wydajnością, jeśli nazwy plików są bardzo długie.Rozmiar kolumny „id” zależy od tego, jak duży będzie Twój stół. Unsigned Smallint da ci 65 tys. Rzędów.
Użytkownik i nazwy plików są zmienne, ponieważ zakładam, że drastycznie różnią się długością.
Jest
date_insert
to tylko sposób na uporządkowanie wyników na podstawie daty wstawienia (pomocne dla POP)źródło
Jeśli zastanawiasz się nad bazą danych Oracle, powinieneś rozważyć użycie opcji Advanced Queuing z wzorcem usuwania w kolejce LIFO (ostatnie weszło pierwsze wyszło) .
źródło