2013-09-09 3 views
1

Я запускаю Etherpad Lite с двух лет работы с sqlite. Теперь я перенесю базу данных в MySQL или Redis. Я использовал bin/migrateDirtyDBtoMySQL.js как вдохновение для написания собственного сценария миграции. Вот оно:Лучший способ миграции огромных баз данных sqlite в Etherpad Lite

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 МБ и вызов:

node migrateSqliteDBtoEtherpad.js 

прекращенные с сигналом поражения. Как я могу обрабатывать такие огромные базы данных с помощью nodejs и etherpad-lite?

ответ

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']); 
} 

Вы должны установить Predis с помощью композитора в этом примере.