architecture - PouchDB可以在客户端代理一个大数据库吗?

标签 architecture frontend pouchdb

在单页应用程序上工作时,我必须编写大量样板代码才能与服务器端数据同步。

PouchDB为这个问题提供了一个优雅的解决方案,允许在客户端本地访问数据。

我不明白的是,当数据库太大而无法完全容纳浏览器内存时,Pouch 是否适合作为数据库代理。

据我所知,Pouch 可以复制整个远程数据库,因此可以在整个数据库适合浏览器内存的情况下使用。

示例用例

假设我有一个包含所有维基百科文章的数据库,并且我想在客户端操作其中的一部分。复制不是可行的方法,需要的是代理。例如,当在客户端本地发出查询时,只需传输匹配的结果。仅对复制的值运行查询是不可行的,因为不可能在本地复制整个数据库。

最佳答案

你说得对,PouchDB 同步并不会真正做你想做的事情。它旨在使用服务器端设计文档同步整个数据库或数据库的预定义子集。

如果我是你,我可能仍然会使用 PouchDB,但我会手动处理同步。像这样的事情:

var localDB = new PouchDB('localDB');
var remoteDB = new PouchDB('http://some-site.com:5984/somedb');

function searchForDocs(docId) {
  // try the local DB first
  localDB.get(docId).catch(function (err) {
    if (err.name !== 'not_found') {
      throw error;
    }
    // not found, so fall back to the remote DB
    return remoteDB.get(docId).then(function (doc) {
      // cache in the local DB
      delete doc._rev;
      return localDB.put(doc).then(function () {
        return doc;
      });
    });
  }).then(function (doc) {
    // do something with our doc
  }).catch(function (err) {
    // handle any errors along the way
  });
}

这里使用get()有点简单;在您的维基百科案例中,您可能需要执行 allDocs({startkey: query, endkey: query + '\uffff'}) 来查找 ID 以查询开头的所有文档。或者您可以使用二级索引。

因此,虽然您不会获得 PouchDB 内置同步的好处,但您可以获得能够在服务器上编写与客户端相同的代码以及 PouchDB 的跨浏览器支持的好处。所以我认为这是一个不错的方法。

关于architecture - PouchDB可以在客户端代理一个大数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060568/

相关文章:

javascript - 客户端-服务器架构结构(使用node js)-index.html 文件放在哪里?

mysql - 了解 MyISAM 记录结构

javascript - PouchDB 检测未同步的文档

cordova - 如何通过 Wi-Fi 在设备之间同步 PouchDB?

java - 一个物理项目中的两个逻辑 java 项目

用于翻阅基于 JPane 的 View 的 Java Swing 架构

javascript - 如何在 Javascript 中计算总小时数?

javascript - 在 Reactjs 中的自定义 DOM 节点中渲染内部组件

html - 使 Bootstrap 4 中的 flex 类占据表格单元格父级的全高

windows - 使用 google Chrome V22 将数据从 CouchDB 复制到 PouchDB 以在 Windows 7 上进行离线存储