OrientDB – 插入后不释放内存

我使用NodeJS插入8.000.000logging到我的orientdb数据库,但在大约2.000.000插入logging后,我的应用程序停止并显示错误“Java堆”。

插入每条logging后是否有释放内存的方法?

公羊使用:
– 用于启动应用程序:2.6克
插入2百万logging后:7.6g

我的app.js(NodeJS):

var dbConn = []; var dbNext = 0; var dbMax = 25; for (var i = 0; i <= dbMax; i++) { var db = new ODatabase({ host: orientdb.host, port: 2424, username: 'root', password: orientdb.password, name: 'test', }); dbConn.push(db); } //--------------------------------------------------- //Start loop // record = {name: 'test'} record["@class"] = "table"; var db = nextDB(); db.open().then(function () { return db.record.create(record); }).then(function (res) { db.close().then(function () { //----resume loop }); }).error(function (err) { //------ }); // end loop - iteration loop //--------------------------------------------------- function nextDB() { if (++dbNext >= dbMax) { dbNext -= dbMax; } return dbConn[dbNext]; } 

OrientJSSqlServer向OrientDB插入海量数据效率不高。 我使用了ETL模块进行大量插入,这是在不增加大于2GB的内存的情况下移动海量数据的最快方式和好主意。
我可以每分钟运输7000条logging。

我的ETL的config.json:

 { "config": { log : "debug" }, "extractor" : { "jdbc": { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver", "url": "jdbc:sqlserver://10.10.10.10;databaseName=My_DB;", "userName": "sa", "userPassword": "123", "query": "select * from My_Table" } }, "transformers" : [ { "vertex": { "class": "Company"} } ], "loader" : { "orientdb": { "dbURL": "plocal:D:\DB\Orient_DB", dbUser: "admin", dbPassword: "admin", "dbAutoCreate": true, "tx": false, "batchCommit": 1000, "wal" : false, "dbType": "graph" } } } 

从文档中 ,为了大量插入,你应该声明你的意图:

 db.declareIntent( new OIntentMassiveInsert() ); // YOUR MASSIVE INSERTION db.declareIntent( null ); 

但现在看来,东方司机似乎还没有实施。 另一件事是你不应该打开/closures你创build的每个新logging的数据库。 这通常是不好的做法。

我现在还没有node.js环境,但是这样的事情应该可以做到:

 db.open().then(function () { // when available // db.declareIntent( new OIntentMassiveInsert() ); for (var i = 0; i < 8000000; i++) { // create a new record myRecord = { "@class" : "myClass", "attributePosition" : i }; db.record.create(myRecord); } // when available // db.declareIntent( null ); }).then(function () { db.close() });