c++ - "Save as"的 SQLite 和大文件的自动保存功能

标签 c++ sql c sqlite

我有一个 1GB 的 SQLite 文件(可能变成 10GB)。我想为我的桌面应用程序(在 C++ 中)模拟“另存为”和自动保存功能,类似于 Office Word。 在我看来,每次要备份时都复制整个文件是不切实际的。

我刚刚开始调查 SAVEPOINT .这是解决这个问题的方法吗?但我不清楚保存点是否允许我查询刚刚在保存点之间进行的插入,直到我提交/发布。

非常感谢您的反馈。

此外,退一步说,我在考虑这种另存为/自动保存机制是否是个好主意。我目前正在将每个 SQL 命令立即保存到文件中(例如,将用户文本保存到表中的注释字段中)。我确实在应用程序中实现了撤消/重做功能。有人使用大型 sqlite 文件制作桌面应用程序吗?

最佳答案

这取决于您的应用程序在做什么。如果它只是插入和删除行,您可以轻松地使它们可撤消(保留一个历史表——可能最好作为临时表,除非你希望它在运行之间持续存在——并关闭你的撤消/重做功能)但结构变化很大更难撤消,因为 SQLite 只允许在创建表后对其进行非常有限的更改(例如,删除列将需要您复制表并删除旧表)。也就是说,只要您在每次更改后提交,您就可以拥有一个没有用户可见保存操作的应用程序:您只是在每次提交时自动将更改保存到磁盘。

“另存为...”功能会很慢,因为它必然需要将数据复制到一个新文件,并且这需要一些时间(多个 GB),即使您使用的是 SSD一个硬盘。真的有必要吗?用户可以自己复制数据库文件(SQLite 就是这样),前提是他们当时没有在您的应用程序中打开它。

关于c++ - "Save as"的 SQLite 和大文件的自动保存功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007343/

相关文章:

c - 这是什么格式?

STRACE 输出的澄清

c++ - 如何使用条件(三元)运算符?

c++ - 函数返回值

java - 如果我通过 phpMyAdmin 执行查询,它可以工作,但在我的 java 程序中却不能

SQL 服务器 : how do I find the most common string in a field?

c - 在 MPI_Recv 写入后释放数组

c++ - 通过引用传递 r 值?

c++ - 在类中使用指针作为私有(private)指针来访问 C++ 中的数组

.net - 来自带有事务的 dotnet 的 SQL 脚本