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



我用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处理如此庞大的数据库?

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

<?php
require __DIR__ . '/vendor/autoload.php';
$db = new PDO('sqlite:sqlite.db');
$redis = new PredisClient();
foreach ($db->query("SELECT * FROM store") as $row) {
    $redis->set($row['key'], $row['value']);
}

在此示例中,您必须通过作曲家安装 Predis。

最新更新