2016-07-31 7 views
0

У меня есть два экземпляра CouchDB, и каждый реплицирует другой. Проблема здесь в том, что каждый раз, когда создается новая база данных, мне нужно следить за недавно созданной базой данных и POST для создания документа _replicator для репликации.CouchDB автоматическая репликация недавно созданной базы данных

Есть ли способ легко реплицировать все базы данных из одного в другое без запуска для вставки _replicator документа?

ответ

1

Не знаю, что я знаю. У меня что-то похожее. Я написал приложение небольшого узла, чтобы прослушать уведомление об изменении. Если я создаю новую базу данных, уведомление об изменении уведомляет мое приложение-узел, а приложение-узел затем создает все остальное, например, репликацию.

+0

Любая возможность разделить свой код, чтобы слушать новую дб изменения? – CIF

+0

Извините за мой поздний ответ, у меня было много дел. См. Мой новый ответ для некоторых советов о написании приложения небольшого узла для прослушивания недавно созданных баз данных в CouchDB. – Sceada

0

Ok вот фрагмент моего кода, извините за немецкие комментарии :)

/** 
* In die Log-Datei der CouchDB einen neuen 
* Eintrag hinzufügen. 
* 
* @param msg 
* 
* @author Robert Gregat 
*/ 
var log = function(msg) { 
    console.log(JSON.stringify(["log", msg])); 
}; 


/** 
    * Dies ist eine Funktion die aus dem nano Node Module entnommen 
    wurde. 
    * 
    * @author https://github.com/dscape/nano 
    */ 
    function _serializeAsUrl(db) { 
    if (typeof db === 'object' && db.config && db.config.url && db.config.db) { 
     return urlResolveFix(db.config.url, encodeURIComponent(db.config.db)); 
    } else { 
     return db; 
    } 
    } 

// CouchDB stellt eine API bereit die über stdin Befehle entgegen 
    nimmt. 
var stdin = process.openStdin(); 

// Das Encoding auf utf8 einstellen. 
stdin.setEncoding('utf8'); 


// Auswerten von empfangenen Daten der CouchDB. Wenn eine neue 
    Datenbank angelegt wurde, enthält das 
// JSON Objekt den value created. Tritt dieser Fall ein, wird 
    automatisch aus der design und custom db 
// alle Dokumente in die neue Datenbank repliziert. 
stdin.on('data', function(d) { 
    // Parsen des Ergebnis 
    if (d !== null) { 
     parsedData.push(JSON.parse(d)); 
    } 
}); 

/** 
* Die Applikation muss in einer Endlosschleife laufen. 
* 
* @author Robert Gregat 
*/ 
var checker = function() { 
    for (var index in parsedData) { 
    if (parsed.type === "created" && parsed.db !== "design" && parsed.db !== "custom") { 
     // do stuff 
    } 
    } 
    parsedData = []; 

    setTimeout(checker, 1000); 
} 

// Endlosschleife starten. 
checker(); 
  • Бревно функции помогает мне сделать некоторое протоколирование в файл couchdb.log.

  • Функция _serializeAsUrl - это функция от узла nano для создания некоторого форматирования.

  • С process.openStdin() Я начинаю слушать испущенные события с couchdb.

  • С stdin.on() Я могу захватить испущенные события.

  • Функция checker принимает собранные события и делает все, что я хочу, на основе полученной информации (эта функция должна быть в бесконечном цикле).

В CouchDB конфигурации вы должны добавить следующее:

[update_notification] 
[name] = nodejs [path/to/your/node_application] 

Для получения дополнительной информации посмотрите на этом сайте: http://docs.couchdb.org/en/1.6.1/config/externals.html

Смежные вопросы