Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 更简单的节点MongoDB/数据库替代方案_Json_Node.js_Storage - Fatal编程技术网

Json 更简单的节点MongoDB/数据库替代方案

Json 更简单的节点MongoDB/数据库替代方案,json,node.js,storage,Json,Node.js,Storage,我需要在我的应用程序中永久存储一些数据,到目前为止,我一直在使用MongoDB,但出于我的目的,这似乎有点过头了。因此,我正在寻找一个更简单的替代方案: 易于设置;我更希望存储只是一个简单的(JSON)文件。我特别不喜欢Mongo的地方是它必须单独安装和配置 一次只有一个应用程序访问数据库;不需要同步或访问控制(整个数据库可以保存在内存中,只有在发生更改时才刷新到磁盘) 它应该是异步的(它是Node,右…) 对数据进行一些基本的查询和过滤会很好(比如在集合中搜索、按id检索项目等) 有很多不

我需要在我的应用程序中永久存储一些数据,到目前为止,我一直在使用MongoDB,但出于我的目的,这似乎有点过头了。因此,我正在寻找一个更简单的替代方案:

  • 易于设置;我更希望存储只是一个简单的(JSON)文件。我特别不喜欢Mongo的地方是它必须单独安装和配置
  • 一次只有一个应用程序访问数据库;不需要同步或访问控制(整个数据库可以保存在内存中,只有在发生更改时才刷新到磁盘)
  • 它应该是异步的(它是Node,右…)
  • 对数据进行一些基本的查询和过滤会很好(比如在集合中搜索、按id检索项目等)
有很多不同的解决方案,但我还没有找到一个能够满足我所有要求的解决方案。我能找到的大多数JSON数据库都只是用于客户端,似乎不支持将数据(异步)存储到磁盘


你能推荐一个解决方案吗?

经过进一步的搜索,我发现它似乎适合我的目的。它有一个很好的mongo-like API,支持从文件写入和加载。文档很简洁,有点过时,但是可以从单元测试中学到他所需要的一切

数据库完全保存在内存中,这给数据库大小带来了明显的限制,但我不需要存储大量数据

唯一的问题是对数据库所做的更改不会自动保存。这意味着,如果应用程序在手动保存数据库之前崩溃,则更改将丢失。幸运的是,所有模型都是事件发射器,因此很容易检测更改和调用保存

这是我的模块处理数据库的大致方式:

var fs = require('fs');
var warehouse = require('warehouse');
var debug = require('debug')('db');
var _ = require('lodash');

function load() {
    db.load().then(function () {
        debug('Database loaded');
    })
}

// The promise will guarantee atomicity of writes to the disk so the database
// file will not get corrupted (as long as only one instance of this program is
// running at a time)
var savingPromise;
function save() {
    if (!savingPromise) {
        savingPromise = db.save();
    } else {
        savingPromise = savingPromise.then(db.save.bind(db));
    }
    savingPromise.then(function () {
        debug('Database saved');
    });
}

var databaseFile = 'database.json';
var db = new warehouse({path: databaseFile});
if (fs.existsSync(databaseFile)) {
    load();
}

var models = {
    Model1: db.model('model1', Model1Schema),
    Model2: db.model('model2', Model2Schema),
    Model3: db.model('model3', Model3Schema)
};

// Debouncing the save function ensures that if more than one change
// occur in a short period of time, they all will be saved with 
// in a single write to the disk. (Saving each change individually would
// significantly reduce the performance.)
var delayedSave = _.debounce(save, 1000);
_.each(models, function (model) {
    model.addListener('insert', delayedSave);
    model.addListener('update', delayedSave);
    model.addListener('remove', delayedSave);
});

module.exports = models;

我可以问一下投票被否决的原因吗?我有一个非常简单的问题,我正在寻找解决方案。现有模块或现有模块的组合。或者也许我只需要被解释为什么我的方法是错误的。