【问题标题】:CouchDB auto replicate newly created databaseCouchDB 自动复制新创建的数据库
【发布时间】:2016-07-31 11:06:01
【问题描述】:

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

有没有一种方法可以轻松地将整个数据库从一个复制到另一个而不触发插入 _replicator 文档?

【问题讨论】:

    标签: couchdb


    【解决方案1】:

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

    【讨论】:

    • 有没有可能分享你的代码来监听新的数据库变化?
    • 对不起,我的回复晚了,我有很多事情要做。有关编写小型节点应用程序以侦听 CouchDB 中新创建的数据库的一些提示,请参阅我的新答案。
    【解决方案2】:

    好的,这是我的代码的 sn-p,对不起德国 cmets :)

    /**
     * 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2021-07-20
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多