database - 将sqlite数据库从内存同步到文件

标签 database qt sqlite

我正在编写一个应用程序,它必须非常频繁地记录信息,比如说,一秒钟两次。我希望将信息保存到 sqlite 数据库中,但是我不介意每十分钟将更改提交到磁盘一次。

在使用文件数据库时执行我的查询需要很长时间,并且会使计算机延迟。

一个可选的解决方案是使用内存数据库(它会适合,不用担心),并时常将其同步到磁盘,

这可能吗?有没有更好的方法来实现这一点(你能告诉 sqlite 只有在 X 查询后才提交到磁盘吗?)。

我可以用 QtSQL 包装器解决这个问题吗?

最佳答案

假设您有一个名为“disk_logs”的磁盘数据库和一个名为“events”的表。您可以将内存数据库附加到现有数据库:

ATTACH DATABASE ':memory:' AS mem_logs;

在该数据库中创建一个表(它将完全在内存中)以接收传入的日志事件:

CREATE TABLE mem_logs.events(a, b, c);

然后在应用程序停机期间将数据从内存表传输到磁盘表:

INSERT INTO disk_logs.events SELECT * FROM mem_logs.events;

然后删除现有的内存表中的内容。重复。

虽然这很复杂...如果您的记录跨越多个表并通过外键链接在一起,那么在从内存表复制到磁盘表时保持这些同步可能会很麻烦。

在尝试这样的事情(令人不安的过度设计)之前,我还建议 trying to make SQLite go as fast as possible . SQLite 应该能够轻松处理每秒 > 50K 的记录插入。每秒两次的少量日志条目不应导致显着的速度下降。

关于database - 将sqlite数据库从内存同步到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094689/

相关文章:

MySQL : --secure-file-priv

c++ - 如何更改 tittleBar 按钮,如 Qt QWidget 中的关闭和最小化按钮

java - Class.forName(Class) 在特定目录中?

sqlite - 使用 TableView 删除表行

objective-c - 使用SQLite和Objective-C进行多线程

database - 关系数据库与 R/Python 数据框架

database - 你如何测试你的数据库设计?

qt - 如何在QTableView中选择行?

database - Talend Open Studio For MDM + Postgresql + 同步两个数据库

c++ - 在 QtCreator 中链接 SDL2