Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在RAM中使用SQLite表代替闪存_Python_Sqlite - Fatal编程技术网

Python 在RAM中使用SQLite表代替闪存

Python 在RAM中使用SQLite表代替闪存,python,sqlite,Python,Sqlite,我们目前正在进行一个python项目,该项目基本上是将M2M数据读入/写入SQLite数据库。该数据库由多个表组成,其中一个表存储来自云的当前值。最后一个表让我有点担心,因为它经常被编写,而且应用程序运行在闪存驱动器上 我已经读到虚拟表可能是解决方案。我考虑将关键表转换为虚拟表,然后将其内容链接到存储在RAM中的真实文件(XML或JSON)(例如在Debian中为/tmp)。我一直在读这篇文章: 这或多或少解释了如何做我想做的事。这相当复杂,我认为使用Python是不可行的。也许我们需要开发自己

我们目前正在进行一个python项目,该项目基本上是将M2M数据读入/写入SQLite数据库。该数据库由多个表组成,其中一个表存储来自云的当前值。最后一个表让我有点担心,因为它经常被编写,而且应用程序运行在闪存驱动器上

我已经读到虚拟表可能是解决方案。我考虑将关键表转换为虚拟表,然后将其内容链接到存储在RAM中的真实文件(XML或JSON)(例如在Debian中为/tmp)。我一直在读这篇文章: 这或多或少解释了如何做我想做的事。这相当复杂,我认为使用Python是不可行的。也许我们需要开发自己的sqlite扩展,我不知道


在数据库的其余部分保持在闪存中的同时,如何将冲突表“放置”在RAM中?关于如何在Python下使用虚拟表,有没有更好/更简单的方法?

使用内存中的数据结构服务器。是一个性感的选项,您可以使用列表轻松实现一个表。另外,它还提供了一个不错的python驱动程序。

创建内存中表的一个非常简单、仅SQL的解决方案是使用SQLite的
ATTACH
命令和特殊的“:memory:”伪文件名:

ATTACH DATABASE ":memory:" AS memdb;
CREATE TABLE memdb.my_table (...);
由于整个数据库“memdb”都保存在RAM中,一旦关闭数据库连接,数据就会丢失,因此您必须自己处理持久性

一种方法是:

  • 打开主SQLite数据库文件
  • 附加内存中的辅助数据库
  • 在内存数据库中复制性能关键表
  • 在重复表上运行所有查询
  • 完成后,将内存中的表写回原始表(
    BEGIN;DELETE FROM real\u table;INSERT INTO real\u table SELECT*FROM memory\u table;

  • 但我能给你的最好建议是:确保你真的有性能问题,简单的解决方案也可以足够快

    正如费迪南德所说,我想避免内存方式,因为完整的数据库将保存在RAM中。谢谢你的提示,谢谢。内存中的方法将是我最后的选择,因为我不希望整个数据库都存储在RAM中。但似乎除了虚拟化有问题的表之外,我没有其他选择。您不需要将整个数据库放在RAM中。像往常一样将主数据库存储在文件中,并使用
    ATTACH
    将另一个内存中数据库附加到SQLite连接。然后你可以在内存中创建你想要的表。。。这是有道理的,费迪南德。这样做,我们仍然可以保留当前查询,并且仍然使用相同的连接。。。我非常喜欢这种方法,谢谢!!性能不是问题。当前对该表的查询既简单又快速。问题是,此表经常更新,闪存驱动器可能会比平时磨损得更快。这可能值得一看