如何自动保存大的设置文件没有滞后的小改动?

我的应用程序有一个设置文件。 它可以变得很大(几MB),因为它也包含一些历史数据。

当你在应用程序中做些什么,它会自动保存。 但这会导致很大的停顿,因为重写文件需要很长的时间。 我尝试使用asynchronous文件保存,但如果您在保存时closures了应用程序,则会丢失所有数据。

我怎样才能安全地自动保存设置没有滞后?

我最好的想法是使用本地数据库,但用户不能简单地编辑设置文件了(目前它是一个简单的JSON文件,我不希望它复制到一台新的计算机的所有设置更复杂例如)

假如你想保持多MB设置文件的模型,最合理的解决scheme是使用primefaces写入,以避免在保存中间退出应用程序的问题。

假设您的文件被称为settings.json ,primefaces写入会像这样工作:

  1. 应用程序决定更新设置,开始写入临时文件(以避免覆盖现有文件的一半),说settings.json.tmp-1482198169 (1482198169是当前unix时间戳)。
  2. 一旦完成写入settings.json.tmp-1482198169 ,将当前settings.json复制到settings.json.bak
  3. settings.json.tmp-1482198169重命名为settings.json ,覆盖旧的。

基本的想法是构build一个你总是拥有一个有效的settings.json副本的过程,所以它只能被一个完整的副本所取代。

npm有一些这样的实现, 就像这个一样 。 我build议你尝试其中的一种,而不是自己编写,因为任何执行primefaces写入跳舞的错误都可能会导致数据丢失,而且在处理asynchronous代码时要正确处理是非常棘手的。