python内存数据库触发器_关于python:在内存中有一个简单的django sqlite3数据库示例吗?...

我正在尝试制作在sqlite3 db内存上运行的django应用程序(在生产中)。步骤似乎很简单

使内存中的数据库运行

附加磁盘数据库(文件)

重新创建表/索引并复制内容

分离磁盘数据库(文件)

但是他对我来说都是新的,我在实现这些方面有问题。

到目前为止,我写过:设置.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': ':memory:',

}

}

App.Py

from django.apps import AppConfig

import sqlite3

import os

from StringIO import StringIO

from django.conf import settings

class EnquirerConfig(AppConfig):

name = 'enquirer'

def ready(self):

con = sqlite3.connect(os.path.join(settings.BASE_DIR, 'db.sqlite3'))

tempfile = StringIO()

for line in con.iterdump():

tempfile.write('%s

' % line)

con.close()

tempfile.seek(0)

sqlite = sqlite3.connect(":memory:")

sqlite.cursor().executescript(tempfile.read())

sqlite.commit()

sqlite.row_factory = sqlite3.Row

这一切都基于以下几点:如何在python sqlite3中将现有的db文件加载到内存中?Django-生产中的内存sqlite

我也试过了

if settings.DATABASES['default']['NAME'] == ':memory:':

call_command('migrate', interactive=True)

但是,这似乎不起作用-我仍然有未应用的迁移,并且"没有这样的表"异常。

你能解释一下你为什么要这样做吗?它不能是为了性能,因为您只能以这种方式运行一个进程;使用标准数据库和多个服务器进程会更好。另外,当然,当进程重新启动时,您将丢失所有数据。为什么?

这样做的目的是在重新启动时丢失所有数据:)用户输入机密的财务数据,这样就可以告诉他们所有的进程都在内存中运行,而应用程序不存储任何数据非常重要。

你试过我的答案了吗?

目前正在努力,可能会在明天前完成。谢谢你的评论。对于每个页面加载的新DB,在这个实现中这实际上是一个期望的事情。问题是,在生产环境中将数据库存储在内存中是否是一个好主意。也许制作临时数据库会更好,因为它与持续同步数据库相同,而且性能是这里的次要问题。关键是,可以对客户机说他的数据是在内存或磁盘上处理的。有什么想法吗?

我已经在回答中解释过了。如果为RDBMS提供足够的内存,则其数据将始终在内存中处理。

你找错树了。

The most common way to force an SQLite database to exist purely in memory is to open the database using the special filename":memory:" ...

When this is done, no disk file is opened. Instead, a new database is created purely in memory. The database ceases to exist as soon as the database connection is closed. Every :memory: database is distinct from every other. So, opening two database connections each with the filename":memory:" will create two independent in-memory databases.

https://sqlite.org/inmemorydb.html

所以您必须不断地将数据同步到磁盘。这与使用基于磁盘的sqlite3数据库完全相同。

其次,如果您的wsgi容器使用两个线程,您可能最终会得到两个不同的数据库和相同的用户,在随后的页面加载中看到两个不同的内容。

最后但并非最不重要的是,大多数类Unix操作系统都具有出色的文件系统缓存。如果有足够的内存,它将通过加快访问速度将经常使用的文件保存在缓存中。这发生在内核级别,并且将比用Python甚至用户空间C实现的任何东西都快得多。

以上语句适用于实际和数据库,无论是RDBMS还是NoSQL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值