NodeJS中的对象数组或Object对象,用于内存中的简单数据库

时间:2017-12-25 18:36:49

标签: arrays node.js object

我想在内存中存储一​​个对象(让我们称之为 payload ),如下所示:

{
   id: 123,
   foo: { bar: "some data" }
}

第一个想法只是做:

let objectCollection = [];

objectCollection.push(payload);

这很有效。但是,应用程序的某些部分将操纵该数组,添加或删除它中的对象,这是我如何做的一个例子:

class objectCollection {

    constructor() {
        this.data = [];
    }

    add(payload) {
        this.data.push(payload);
    }

    removeById(id) {

        for(let i = 0; i < this.data.length; i++) {
            if(this.data[i].id === id) {
                this.data.splice(i, 0);
                return null;
            }
        }

    }

    findOne(id) {
        let data = this.data.filter((el) => {
            return el.id === id
        });

        return data[0] || null;
    }

} 

正如你所看到的,这个集合类可以是一个其他类可以扩展的抽象类,它是一个非常基本的伪内存数据库......就像我不喜欢的一些东西:

  1. 在多线程上可能会出现竞争条件,一个进程找到了元素X的索引,在进行拼接功能之前,其他一些进程添加了一个新的元素移动所有元素索引,因此结果是进程1删除/拼接了错误的元素。

  2. 要查找或删除我需要迭代数组的元素。

  3. 我不期望数组中有超过5k个元素,因此迭代不应该是一个问题,我真的不想在需要另一个二进制文件监视的内存数据库中使用Redis或类似的应用程序复杂化。如果不是使用数组来存储我使用Object的元素,如下所示:

    ...
    constructor() {
      this.data = {};
    }
    
    add(payload) {
      this.data[payload.id] = payload.foo;
    }
    
    remove(id) {
      if(typeof this.data[id] !== 'undefined')
        delete this.data[id];
    }
    

    这将清理一些代码并删除迭代。您如何看待这种方法?对于我从数组迁移到对象的决定有什么重要的影响吗?你能建议改进或已经这样做的库吗?

0 个答案:

没有答案