LevelUP文档(https://github.com/rvagg/node-levelup#multi-process-access)中有以下内容:
LevelDB是线程安全的,但不适合通过多个进程进行访问。您只应该从单个Node.js进程中打开LevelDB数据库。Node.js集群由多个进程组成,因此LevelUP实例也无法在它们之间共享。
因此,我无法使用节点群集(http://nodejs.org/api/cluster.html)
是否有另一个选择可以使多进程(或多线程)Node.js应用程序访问LevelDB数据库?
有一些如何仅更改leveldb数据库中键的值的方法吗?
我已经有一个拥有1800万行的数据库,并且我想更改键以添加前缀。
我正在将leveldb与node.js一起使用。但是任何解决方案都必须适合。
我已经尝试过重建该数据库,但是它花费了太多时间。
LevelUP文档说明pipe()可以使用(https://github.com/rvagg/node-levelup/#pipes-and-node-stream-compatibility).
我试过以下代码:
db.createValueStream().pipe(response)
Run Code Online (Sandbox Code Playgroud)
但我不能这样做,我有一个错误:
events.js:72
throw er; // Unhandled 'error' event
^
TypeError: Invalid non-string/buffer chunk
at validChunk (_stream_writable.js:150:14)
at Writable.write (_stream_writable.js:179:12)
at write (_stream_readable.js:573:24)
at flow (_stream_readable.js:582:7)
at ReadStream.pipeOnReadable (_stream_readable.js:614:5)
at ReadStream.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at ReadStream.Readable.push (_stream_readable.js:127:10)
Run Code Online (Sandbox Code Playgroud)
实际问题是关于使用事件'data'()时的内存使用情况.然后我试着做一个流.转换和使用pipe()来做我需要的东西.事件发生器中的内存泄漏是一个问题:在Node.js中使用流时内存泄漏?
UPDATE
我试过@ paul-mougel没有成功.不调用错误事件的功能,并且它崩溃了.这是一段代码:
var rs = db.createValueStream();
request.on('close', function(){
rs.destroy();
response.end();
});
rs.on('end', function(){
response.end();
});
rs.on('error', function(err){
console.err('READ STREAM ERROR:',err.message);
response.end();
rs.destroy();
}); …Run Code Online (Sandbox Code Playgroud)