我们目前正在开发一个 python 项目,该项目基本上是从 SQLite 数据库中读取和写入 M2M 数据。该数据库由多个表组成,其中一个存储来自云的当前值。最后一张表让我有点担心,因为它经常被写入并且应用程序在闪存驱动器上运行。
我读到虚拟表可能是解决方案。我考虑过将关键表转换为虚拟表,然后将其内容链接到存储在 RAM(/tmp,例如 Debian 中)中的真实文件(XML 或 JSON)。我一直在阅读这篇文章: http://drdobbs.com/database/202802959?pgno=1 这或多或少地解释了如何做我想做的事。它非常复杂,我认为使用 Python 不太可行。也许我们需要开发自己的 sqlite 扩展,我不知道...
关于如何在 RAM 中“放置”我们的冲突表而数据库的其余部分保留在 FLASH 中的任何想法?关于如何在 Python 下采用虚拟表方式的任何更好/更简单的方法?
请您参考如下方法:
创建内存表的一个非常简单的纯 SQL 解决方案是使用 SQLite 的 ATTACH 命令和特殊的“:memory:”伪文件名:
ATTACH DATABASE ":memory:" AS memdb;
CREATE TABLE memdb.my_table (...);
由于整个数据库“memdb”都保存在 RAM 中,一旦关闭数据库连接,数据就会丢失,因此您必须自己处理持久性。
一种方法可以是:
- 打开您的主 SQLite 数据库文件
- 附加内存中的辅助数据库
- 在内存数据库中复制性能关键表
- 对重复表运行所有查询
- 完成后,将内存表写回原始表(
BEGIN; DELETE FROM real_table; INSERT INTO real_table SELECT * FROM memory_table;)
但我能给你的最好建议是:确保你确实遇到了性能问题,简单的解决方案也可以足够快!
