五、源码简析

    1、所有改变数据的操作 (indert,update,remove),都会触发 persistence.persistNewState 方法,比如可以看一下 datastore.js 第 265-268 行的 Datastore.prototype._insert 方法。该方法决定数据的去处,如果是当作内存数据库来用,该方法会提前返回,如果是本地文档持久化存储,则会将数据经过 utf-8 编码序列化之后追加到备份数据库的文档中。

    3、数据从硬盘上加载到内存时,使用了 async 模块的 waterfall 方法。该方法参数是由方法组成的数组,并且先执行的方法会将执行结果传入下一个方法,方法按顺序执行,并且当其中一个方法报错,就会导致后面的方法不再执行,直接在主方法回调抛出异常。

    源码并不难理解,通过以上几点,希望可以让大家更容易解读源码。通读 NeDB 的源码,对 Node 异步 I/O 以及基于事件编程的思想会有进一步的认识。