为了运行大量与数据库交互的测试,我想做两件事:
我想复制数据库的架构而不复制其数据。我可以使用一个脚本来捕获数据库中每个表的CREATE TABLE语句。
创建此数据库后,我想强制它在内存中100%。
我坚持如何做第2部分 - 除了指定每个表的引擎之外,还有更简单的方法吗?不知何故,这似乎是一种糟糕的做法。
答案 0 :(得分:11)
在/dev/shm
(ubuntu | debian)中创建数据库,它将在RAM中。它可以增长到0.5的可用内存。
答案 1 :(得分:2)
正如 dtmilano 所说,你可以把它放在一个tmpfs挂载的文件系统上。它不一定是/ dev / shm,但这是通常安装tmpfs的地方。
您可以在任何地方创建新的:
mount none -t tmpfs /path/to/dir
如果它填满了所有可用的RAM,它将使用swap作为备份。
将它放在/ etc / fstab中以在引导时重新挂载。请记住,它是一个ram磁盘,所以每次重启时它都会空出来。请参阅:http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs
或者,正如 yuxhuang 所建议的那样,您可以创建一个MEMORY
类型的表。虽然表定义仍然存在,但它也会在重启时清空。但MEMORY
表类型有一些限制。例如,它使用固定大小的行,因此不允许text
和blob
列,varchar
不是可变长度。请参阅:http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
答案 2 :(得分:1)
SET storage_engine=MEMORY;
这将设置当前会话的默认存储引擎。
答案 3 :(得分:0)
如果您使用的是Windows,则可以在数据库创建脚本中创建添加MEMORY参数的表,如下所示:
CREATE TABLE IF NOT EXISTS `user` (
`id` varchar(23) NOT NULL,
`username` varchar(250) NOT NULL,
...
) ENGINE=MEMORY DEFAULT CHARSET=utf8;