RAM中的SQLite表而不是FLASH

时间:2011-10-07 08:57:59

标签: python sqlite

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

我读过虚拟表可能是解决方案。我曾想过将关键表转换为虚拟表,然后将其内容链接到存储在RAM中的真实文件(XML或JSON)(例如在Debian中为/ tmp)。我一直在读这篇文章: http://drdobbs.com/database/202802959?pgno=1 这或多或少解释了如何做我想做的事。它非常复杂,我认为使用Python不太可行。也许我们需要开发自己的sqlite扩展,我不知道......

有关如何将我们的冲突表“放置”在RAM中,而数据库的其余部分保留在FLASH中的任何想法?关于如何在Python下采用虚拟表方式的更好/更简单的方法?

2 个答案:

答案 0 :(得分:1)

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

ATTACH DATABASE ":memory:" AS memdb;
CREATE TABLE memdb.my_table (...);

由于整个数据库“memdb”保存在RAM中,因此一旦关闭数据库连接,数据就会丢失,因此您必须自己处理持久性。

一种方法可以是:

  1. 打开主SQLite数据库文件
  2. 附加内存中的辅助数据库
  3. 在内存数据库中复制性能关键表
  4. 在重复的表格上运行所有查询
  5. 完成后,将内存中的表写回原始表(BEGIN; DELETE FROM real_table; INSERT INTO real_table SELECT * FROM memory_table;
  6. 但我能给你的最佳建议是:确保你确实遇到了性能问题,简单的解决方案也可以足够快!

答案 1 :(得分:0)

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