2016-07-31 37 views
0

我有两个CouchDB实例,每个都复制另一个实例。这里的问题是每次创建一个新的数据库时,我需要注意新创建的数据库和POST以创建_replicator文档进行复制。CouchDB自动复制新创建的数据库

有没有办法轻松地复制整个数据库从一个到另一个没有触发插入_replicator文件?

回答

1

不是我知道的。我有类似的东西。我写了一个小节点应用程序来听更改通知。如果我创建了一个新数据库,那么更改通知会通知我的节点应用程序,然后节点应用程序会创建其他所有内容,例如复制。

+0

的任何可能性,分享您的代码以收听新分贝变化? – CIF

+0

对不起,我迟到了,我有很多事情要做。查看我的新答案,获取一些提示,以编写一个小节点应用程序来侦听CouchDB中新创建的数据库。 – Sceada

0

确定这里是我的代码片段,比较遗憾的是德国的意见:)

/** 
* 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()我可以捕获发射的事件。

  • 函数检查器接收收集的事件并根据所提供的信息做我想做的事(此函数必须处于无限循环中)。

在CouchDB的配置,你必须添加以下内容:

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

欲了解更多信息,采取在这个网站一看:http://docs.couchdb.org/en/1.6.1/config/externals.html