У меня есть конечный автомат, который должен выдвинуть / выдвинуть некоторые имена файлов для разных пользователей. Я бы традиционно использовал стеки в качестве выбора структуры данных, но это нужно делать с использованием базы данных, поскольку у меня нет способа сохранить структуру данных между входящими веб-запросами.
Мне было интересно, что было бы хорошим способом реализовать функциональность стека с использованием баз данных?
Мне нужно поддержать:
- push (имя_файла, пользователь): нажать имя_файла для пользователя
- pop (пользователь): выталкивает самое верхнее имя файла для пользователя
РЕДАКТИРОВАТЬ :
Я прототипирую идею, и поэтому я использую sqlite3 с python.
Спасибо!
database-design
database-recommendation
brainydexter
источник
источник
Ответы:
Если вы спрашиваете о том, какую базу данных использовать, это действительно зависит от личных предпочтений и того, что вы хотите от этого. Поскольку я только знаком с MySQL, я отвечу на другую часть вопроса, предполагая MySQL:
вы захотите использовать,
INNODB
потому что ваша таблица будет интенсивно писать, а для больших таблиц блокировка строк INNODB спасет жизньMyISAM
.Что касается дизайна таблицы, кажется, вам действительно нужна только одна таблица:
Я выбрал произвольный столбец 'id', установленный в,
AUTO_INCREMENT
потому что первичный ключ реплицируется в каждой записи каждого индекса. Таким образом, выполнение первичного ключа (user, filename) может вызвать проблемы с производительностью, если ваши имена файлов очень длинные.Размер вашего столбца 'id' зависит от того, насколько большой будет расти ваша таблица. Неподписанный Smallint даст вам 65 тыс. Строк.
Пользователь и имена файлов varchar, потому что они будут сильно различаться по длине, я полагаю.
Это
date_insert
просто способ упорядочить ваши результаты в зависимости от того, когда они были вставлены (полезно для вашего POP)источник
Если вы рассматриваете базу данных Oracle, вам следует рассмотреть возможность использования расширенной очереди с шаблоном очереди LIFO (последний пришел первым вышел) .
источник