2016-07-31 21 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

相關問題