Json 更简单的节点MongoDB/数据库替代方案
我需要在我的应用程序中永久存储一些数据,到目前为止,我一直在使用MongoDB,但出于我的目的,这似乎有点过头了。因此,我正在寻找一个更简单的替代方案:Json 更简单的节点MongoDB/数据库替代方案,json,node.js,storage,Json,Node.js,Storage,我需要在我的应用程序中永久存储一些数据,到目前为止,我一直在使用MongoDB,但出于我的目的,这似乎有点过头了。因此,我正在寻找一个更简单的替代方案: 易于设置;我更希望存储只是一个简单的(JSON)文件。我特别不喜欢Mongo的地方是它必须单独安装和配置 一次只有一个应用程序访问数据库;不需要同步或访问控制(整个数据库可以保存在内存中,只有在发生更改时才刷新到磁盘) 它应该是异步的(它是Node,右…) 对数据进行一些基本的查询和过滤会很好(比如在集合中搜索、按id检索项目等) 有很多不
- 易于设置;我更希望存储只是一个简单的(JSON)文件。我特别不喜欢Mongo的地方是它必须单独安装和配置
- 一次只有一个应用程序访问数据库;不需要同步或访问控制(整个数据库可以保存在内存中,只有在发生更改时才刷新到磁盘)
- 它应该是异步的(它是Node,右…)
- 对数据进行一些基本的查询和过滤会很好(比如在集合中搜索、按id检索项目等)
你能推荐一个解决方案吗?经过进一步的搜索,我发现它似乎适合我的目的。它有一个很好的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;
我可以问一下投票被否决的原因吗?我有一个非常简单的问题,我正在寻找解决方案。现有模块或现有模块的组合。或者也许我只需要被解释为什么我的方法是错误的。