Python 在RAM中使用SQLite表代替闪存
我们目前正在进行一个python项目,该项目基本上是将M2M数据读入/写入SQLite数据库。该数据库由多个表组成,其中一个表存储来自云的当前值。最后一个表让我有点担心,因为它经常被编写,而且应用程序运行在闪存驱动器上 我已经读到虚拟表可能是解决方案。我考虑将关键表转换为虚拟表,然后将其内容链接到存储在RAM中的真实文件(XML或JSON)(例如在Debian中为/tmp)。我一直在读这篇文章: 这或多或少解释了如何做我想做的事。这相当复杂,我认为使用Python是不可行的。也许我们需要开发自己的sqlite扩展,我不知道Python 在RAM中使用SQLite表代替闪存,python,sqlite,Python,Sqlite,我们目前正在进行一个python项目,该项目基本上是将M2M数据读入/写入SQLite数据库。该数据库由多个表组成,其中一个表存储来自云的当前值。最后一个表让我有点担心,因为它经常被编写,而且应用程序运行在闪存驱动器上 我已经读到虚拟表可能是解决方案。我考虑将关键表转换为虚拟表,然后将其内容链接到存储在RAM中的真实文件(XML或JSON)(例如在Debian中为/tmp)。我一直在读这篇文章: 这或多或少解释了如何做我想做的事。这相当复杂,我认为使用Python是不可行的。也许我们需要开发自己
在数据库的其余部分保持在闪存中的同时,如何将冲突表“放置”在RAM中?关于如何在Python下使用虚拟表,有没有更好/更简单的方法?使用内存中的数据结构服务器。是一个性感的选项,您可以使用列表轻松实现一个表。另外,它还提供了一个不错的python驱动程序。创建内存中表的一个非常简单、仅SQL的解决方案是使用SQLite的
ATTACH
命令和特殊的“:memory:”伪文件名:
ATTACH DATABASE ":memory:" AS memdb;
CREATE TABLE memdb.my_table (...);
由于整个数据库“memdb”都保存在RAM中,一旦关闭数据库连接,数据就会丢失,因此您必须自己处理持久性
一种方法是:
BEGIN;DELETE FROM real\u table;INSERT INTO real\u table SELECT*FROM memory\u table;
)但我能给你的最好建议是:确保你真的有性能问题,简单的解决方案也可以足够快 正如费迪南德所说,我想避免内存方式,因为完整的数据库将保存在RAM中。谢谢你的提示,谢谢。内存中的方法将是我最后的选择,因为我不希望整个数据库都存储在RAM中。但似乎除了虚拟化有问题的表之外,我没有其他选择。您不需要将整个数据库放在RAM中。像往常一样将主数据库存储在文件中,并使用
ATTACH
将另一个内存中数据库附加到SQLite连接。然后你可以在内存中创建你想要的表。。。这是有道理的,费迪南德。这样做,我们仍然可以保留当前查询,并且仍然使用相同的连接。。。我非常喜欢这种方法,谢谢!!性能不是问题。当前对该表的查询既简单又快速。问题是,此表经常更新,闪存驱动器可能会比平时磨损得更快。这可能值得一看