2015-11-25 15 views
3

我有一个小的(10MB),只读,sqlite3数据库,我在生产中使用。Django - 在内存中的sqlite在生产

我想加快我的网站,所以我试图在每个Django启动时将整个数据库从磁盘加载到内存中。

这样的回答解释了如何做到这一点在瓶: https://stackoverflow.com/a/10856450/3327587

是否有Django的一个类似的解决方案?

+3

如果您想使用Django的ORM,可能不会,因为这需要事先生成架构。对于小型数据库,大部分数据都应该被缓存,所以明确地将其加载到RAM中不太可能有所帮助。 –

+0

“预先生成模式”是什么意思?这是真的,它的缓存,但我认为默认的缓存大小只有2MB,并且数据库可能会变大到50MB,所以我仍然希望明确地将其加载到内存 –

+0

我的意思是“CREATE TABLE”语句。 Django在启动时不会运行这些程序;它需要先运行'manage.py setup'或'manage.py migrate'。缓存大小可通过['cache_size' pragma](http://sqlite.org/pragma.html#pragma_cache_size)调整(您可能需要使用原始SQL语句进行更改)。 –

回答

7

配置内存数据库:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': ':memory:', 
    } 
} 

,把你挂的启动脚本的代码(请参考Execute code when Django starts ONCE only?)。

+0

但Django会在内存中创建一个新的数据库,我如何告诉Django使用现有的内存数据库我装了?我需要将django指向连接或StringIO对象或其他东西。 –

+0

@DanBolofe无法将字节数组加载为数据库; SQLite根本不支持这样做。 –

+0

如果你把所有东西都转储为sql语句然后执行它们,你可以这样做 - 参见:http://stackoverflow.com/a/10856450/3327587 –