SQLite用于LARGE文件的“另存为”和自动保存功能

时间:2012-04-04 08:18:36

标签: c++ sql c sqlite

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

我刚刚开始研究SAVEPOINT。这是接近这个的方法吗?但是我不清楚savepoint是否允许我查询我刚刚在保存点之间进行的插入,直到我提交/释放。

我希望得到反馈。

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

1 个答案:

答案 0 :(得分:2)

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

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