如何自动保存大的设置文件没有滞后的小改动?
我的应用程序有一个设置文件。 它可以变得很大(几MB),因为它也包含一些历史数据。
当你在应用程序中做些什么,它会自动保存。 但这会导致很大的停顿,因为重写文件需要很长的时间。 我尝试使用asynchronous文件保存,但如果您在保存时closures了应用程序,则会丢失所有数据。
我怎样才能安全地自动保存设置没有滞后?
我最好的想法是使用本地数据库,但用户不能简单地编辑设置文件了(目前它是一个简单的JSON文件,我不希望它复制到一台新的计算机的所有设置更复杂例如)
假如你想保持多MB设置文件的模型,最合理的解决scheme是使用primefaces写入,以避免在保存中间退出应用程序的问题。
假设您的文件被称为settings.json
,primefaces写入会像这样工作:
- 应用程序决定更新设置,开始写入临时文件(以避免覆盖现有文件的一半),说
settings.json.tmp-1482198169
(1482198169是当前unix时间戳)。 - 一旦完成写入
settings.json.tmp-1482198169
,将当前settings.json
复制到settings.json.bak
- 将
settings.json.tmp-1482198169
重命名为settings.json
,覆盖旧的。
基本的想法是构build一个你总是拥有一个有效的settings.json
副本的过程,所以它只能被一个完整的副本所取代。
npm有一些这样的实现, 就像这个一样 。 我build议你尝试其中的一种,而不是自己编写,因为任何执行primefaces写入跳舞的错误都可能会导致数据丢失,而且在处理asynchronous代码时要正确处理是非常棘手的。