bra*_*ter 11 database-design database-recommendation
我有一个状态机,它需要为不同的用户推送/弹出一些文件名。我传统上会使用堆栈作为数据结构的选择,但这需要使用数据库来完成,因为我没有办法在传入的 Web 请求之间保留数据结构。
我想知道使用数据库实现堆栈功能的好方法是什么?
我需要支持:
编辑:
我正在对一个想法进行原型设计,因此我将 sqlite3 与 python 一起使用。
谢谢!
如果您要询问使用哪个数据库,这实际上取决于个人喜好以及您希望从中获得什么。由于我只熟悉 MySQL,我将假设 MySQL 回答问题的另一部分:
你会想要使用,INNODB因为你的表将是写密集型的,对于大表,INNODB 的行锁定将是一个救命稻草MyISAM。
至于桌子设计,看来你真的只需要一张桌子:
CREATE TABLE `wordpress`.`<table_name>` (
`id` smallint(4) NOT NULL AUTO_INCREMENT UNSIGNED,
`user` varchar(30) NOT NULL,
`filename` varchar(255) NOT NULL,
`date_insert` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE `userFile`(user, filename)
) ENGINE=`InnoDB`;
Run Code Online (Sandbox Code Playgroud)
我选择了一个任意的“id”列,AUTO_INCREMENT因为主键在每个索引的每个条目中都被复制。因此,如果您的文件名非常长,执行 (user, filename) 的主键可能会导致性能问题。
您的“id”列的大小取决于您的表将增长多大。Unsigned Smallint 将为您提供 65k 行。
用户名和文件名是 varchar,因为我假设它们的长度会有很大的不同。
这date_insert只是一种根据插入时间对结果进行排序的方法(对您的 POP 有帮助)
如果您考虑使用 Oracle 数据库,则应考虑使用具有LIFO(后进先出)出队模式的高级队列。
在最基本的排队级别,一个生产者将一条或多条消息排入一个队列。每条消息都由其中一个消费者出队和处理一次。消息会一直保留在队列中,直到消费者将其出列或消息过期。生产者可以规定消息可以被消费之前的延迟,以及消息到期的时间。同样,如果没有消息可用,消费者在尝试将消息出列时可能会等待。代理程序或应用程序可以同时充当生产者和消费者。