数据库nedb在update更新数据时,为什么总是会重新插入一条数据?
缘起
有时候做一些小项目,不想使用mysql等重型武器,就想用一些小而美的文件类型数据库。意思就是把不大的数据了都存到文件中,对于文件进行更新和读取。
我在之前也介绍过6款非关系型小型数据库。这6款数据库中,我首推【nedb】,很强大,功能是最全的。
今天在使用中碰到一个难以理解的问题,一番搜索,才可以茅塞顿开。
问题
我在使用nedb update某一行数据时,始终会在文档末尾插入一行新数据。我把nedb api用法看来看去,也没找到自己代码哪里有问题。
后来咨询阅读文档其他部分。才发现了nedb 对【持久化】的解释。
解释
NeDB的持久性使用附加文本的方法,这意味着出于性能原因,所有更新和删除实际上都会导致在数据文件末尾添加行。每次在应用程序中加载每个数据库时,数据库都会自动压缩(即以每个文档一行的格式放回)。
什么意思呢?
就是每次你执行update 和 remove操作时,nedb都会在文件末尾新增加一行相应数据,一开始我想当然的认为这样总是会产生至少2条以上的重复数据。
事实不是:在你再去查询某条数据时,nedb会自动压缩数据,保证你查询出来的数据没有重复的。
我马上代码试了下,果然,之前更新数据时,在文档末尾新增的数据,都不见了,相关属性值都被合并到之前已有的对于某条记录里去了。