在Etherpad Lite中迁移大型sqlite数据库的最佳方法

时间:2013-09-09 08:53:07

标签: node.js sqlite etherpad

我使用sqlite两年后运行Etherpad Lite。现在我将数据库迁移到MySQL或Redis。我使用bin/migrateDirtyDBtoMySQL.js作为灵感来编写我自己的小迁移脚本。这是:

require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {

    process.chdir(npm.root+'/..');

    var settings = require("ep_etherpad-lite/node/utils/Settings");
    var sqlite3 = require('sqlite3');
    var sqliteDb = new sqlite3.Database('var/sqlite.db');
    var db = require("ep_etherpad-lite/node/db/DB");

    db.init(function() {
        db = db.db;

        sqliteDb.each("SELECT * FROM store", function(err, row) {
            db.set(row.key,row.value);
        });
    });

}); 

安装sqlite3依赖项后,它的工作我的sqlite.db文件超过700 MB并且调用:

node migrateSqliteDBtoEtherpad.js

以终止信号终止。我如何使用nodejs和etherpad-lite来处理这样庞大的数据库?

1 个答案:

答案 0 :(得分:0)

使用PHP将数据迁移到redis的一个解决方案:

<?php

require __DIR__ . '/vendor/autoload.php';

$db = new PDO('sqlite:sqlite.db');
$redis = new Predis\Client();

foreach ($db->query("SELECT * FROM store") as $row) {
    $redis->set($row['key'], $row['value']);
}

在此示例中,您必须通过composer安装Predis。