【问题标题】:Sync Gateway "Channels" in PouchDB在 PouchDB 中同步网关“通道”
【发布时间】:2014-04-17 21:05:20
【问题描述】:

Pouch DB 中是否支持 Couchbase Sync Gateway 的“通道”? 我希望能够让用户看到整体数据的一个子集,以及他们是否创建了新数据以便能够与他们共享的对象共享。

PouchDB 有可能吗?或者我是否必须直接与服务器交互或在移动设备上使用 couchbase lite?

【问题讨论】:

    标签: couchbase pouchdb couchbase-sync-gateway


    【解决方案1】:

    只是一点点更新:现在可以实现了,PouchDB(从 V3.4.0 版本开始)现在与同步网关兼容。

    在此处查看教程:http://blog.couchbase.com/first-steps-with-pouchdb--sync-gateway-todomvc-todolite

    【讨论】:

      【解决方案2】:

      这是使 pouch db 客户端通过用户通道与 Couchbase Sync Gateway 一起工作的解决方案:

      var sync = function () {
          var opts = {
              live: true,
              retry: true,
              //-- from here
              filter: "sync_gateway/bychannel",   
              query_params: {
                  "channels": channels
              }
              //-- to here
          };
      
          database.sync(syncServer, opts);
      }
      

      这里的关键是你只需按原样传递过滤器和 query_params,同步网关无论如何都有能力理解这个过滤器。

      【讨论】:

      • 如果用户的频道发生变化怎么办?
      • @Jedi:它将具有与 Couchbase Lite 相同的行为,其中本地数据库将开始获取分配给新频道的数据,但问题是您仍将拥有先前同步的文档,这是不需要的.因此,为了保持干净整洁,我们要做的是清理本地数据库并重新同步,这将只获取新的频道数据。
      • @MaqboolAhmed,@jedi here channels query_params 中键“channels”的值是字符串还是字符串数组?
      • @K Pal:字符串数组
      • @StCleezy:你是对的。但是,字符串数组也应该可以工作,因为它被转换为查询字符串中的逗号分隔列表。这里绝不不鼓励使用字符串,我个人更喜欢数组,因为它是表示多个字符串的更好方法。
      【解决方案3】:

      PouchDB 仿照 CouchDB 建模,没有通道的概念,因此暂无在 PouchDB 中实现的计划。

      但是,解决问题的一种简单方法是将 PouchDB 同步到 CouchDB,然后将其同步到 Couchbase Sync Gateway。您需要 CouchDB 作为中介的原因是,直接 PouchDB Couchbase Sync Gateway 同步存在一些问题,尽管希望它们能很快得到解决(参见例如 thisthis)。

      【讨论】:

        【解决方案4】:

        PouchDB 通过通道同步/过滤复制

        这是一个使用频道的具体示例。

        var db = new PouchDB("yep");
        db.sync(new PouchDB("http://localhost:4984/beer-sample/"), {
            live: true,
            retry: true,
            filter: "sync_gateway/bychannel",
            query_params: {
                channels: "channel-1,channel-2,channel-3,bar"
            }
        })
        

        过滤器:“sync_gateway/bychannel”

        传递过滤器的名称以应用于源文档,目前唯一支持的过滤器是“sync_gateway/bychannel”,这将仅从命名通道集中复制文档。1

        query_params.channels

        我们不传递数组,而是用逗号分隔它们。2

        同步函数示例

        而在 Sync Gateway 中,您的同步功能可能如下所示(我的目的是让同步功能尽可能地愚蠢,以便您一眼就能理解我们如何在 PouchDB 中使用上述通道):

        function sync(doc, oldDoc) {
            if (doc.type == "beer") {
                channel("channel-1");
            } else if (doc.type == "soap") {
                channel("channel-2");
            } else if (doc.type == "sweets") {
                channel("channel-3");
            } else if (doc.type == "bar") {
                channel(doc.type);
            }
        }
        

        虽然晚了 6 年...但迟到总比没有好!

        【讨论】:

          猜你喜欢
          • 2018-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-13
          • 2018-03-04
          • 2014-12-23
          • 2018-10-28
          相关资源
          最近更新 更多