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

2024-06-03

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

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

我不明白的是,当数据库太大而无法完全适应浏览器内存时,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
  });
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PouchDB可以在客户端代理一个大数据库吗? 的相关文章

  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • 如何将自己的js文件导入到vite中?

    我将 Laravel 与 Vite 结合使用 我想使用 Vanilla JS 代码添加文件 在我使用mix之前 我从来没有使用过Vite 我尝试将此代码添加到文件 vite config js 中 如下例所示 laravel input r
  • 从架构上来说,我应该如何用更易于管理的内容替换非常大的 switch 语句?

    EDIT 1 忘记添加嵌套属性曲线球 UPDATE 我选择了 mtazva 的答案 因为这是我的具体案例的首选解决方案 回想起来 我用一个非常具体的例子提出了一个一般性问题 我相信这最终让每个人 或者也许只是我 对问题到底是什么感到困惑 我
  • PouchDB 和 CouchDB 的 Cookie 身份验证并未实际登录用户

    我有一个节点应用程序 它使用 CouchDB 作为数据库 在客户端使用 PouchDB 要登录 将向节点服务器发送请求 节点服务器使用 CouchDB 实例对用户的凭据进行身份验证 然后将 cookie 发送回客户端 问题是 重新启动浏览器
  • RESTful API:我应该在哪里编码我的工作流程?

    我正在开发一个 RESTful API 这是我的第一个 API 也是我的第一个真正大型的编码项目 因此 我仍在学习很多关于建筑等方面的知识 目前 我的 api 设置分为以下几层 HTTP层 资源层 领域模型 业务逻辑层 数据访问 存储层 持
  • 如何在服务器上保存用户凭据以在后台运行查询

    背景 我们有一个 ASP NET Silveright Web 应用程序 silverlight客户端显示用户 图形形式的特定数据 它从服务器请求数据 问题 由于服务器必须执行底层数据库查询 获取这些数据的成本很高 因此客户端必须等待 优化
  • 如何设置 Hibernate 读取/写入不同的数据源?

    使用 Spring 和 Hibernate 我想写入一个 MySQL 主数据库 并从基于云的 Java Web 应用程序中的另一个复制从属数据库中读取数据 我找不到对应用程序代码透明的解决方案 我真的不想更改我的 DAO 来管理不同的 Se
  • SOA、客户端-服务器、Web 服务 - 有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在阅读了一些有关 SOA Web 服务和客户端 服务器架构主题的文献之后 我真的对这些术语感到困惑 因为看不出它们之间的真正区别 有人
  • 为什么我们需要 RESTful Web 服务?

    我将学习 RESTful Web 服务 最好说我必须这样做 因为它是 CS 硕士学位课程的一部分 我在 Wikipedia 上阅读了一些信息 还在 Sun Developer Network 上阅读了一篇有关 REST 的文章 我发现这不是
  • 如何设计流星智能包以透明地将应用程序分离到不同的实例中?

    这是对于那些非常熟悉 Meteor 架构的人来说的问题 我正在尝试设计一个智能包 可以透明地运行 Meteor 应用程序的多个 副本 也就是说 给定一个现有的 Meteor 应用程序和几个预定义的用户组 该包可以半自动地 隔离 该应用程序
  • 什么时候应该构建 Web 应用程序而不是胖客户端?

    我想听听其他人关于何时应该构建 Web 应用程序而不是构建胖客户端的建议 在过去的几年中 我参与了多次关于是否应该使用 Web 浏览器界面构建应用程序 或升级旧应用程序 的讨论 通常这些是组织内使用的内部系统 而不是大众市场的收缩包装产品
  • 将用户数据存储在身份验证服务器或资源服务器中?或两者?

    这是我第一次使用 IdentityServer 4 和 AspNetIdentity 设置 OpenID Connect 我希望有人能够揭开有关存储用户数据的部分的神秘面纱 到目前为止我读到的是 用户数据应该存储在连接到身份验证服务器的身份
  • 分层架构中的异常处理

    我们正在分层设计中重构 当然还有重新设计 我们的服务 我们有服务操作层 BLL 网络抽象层 gt 处理网络代理 数据抽象层 但我们对我们的异常处理策略有点困惑 我们不想向外界透露太多 BLL 的信息 从其他层到bll就可以了 我们不想让 t
  • 具有订阅者缓存的 WCF Pub/Sub

    Problem 如何使用 WCF 提供分布式 可扩展且具有抗灾能力的发布 订阅服务 Details 请注意 除了 Tibco EMS 等消息传递 中间件解决方案之外 我们还在考虑这种方法 我一直在研究 WCF 特别是如何使用它来提供发布 订
  • 在 MVC 4 中为 3 层架构配置 Ninject

    目前 我正在构建一个两层的网站 Web UI 这是一个MVC 4项目 用于与用户交互 数据访问 这是一个 C 库 该层负责与数据库交互 我正在使用 Ninject 进行依赖注入 到现在为止 还好 但现在 我想在 Web UI 和数据访问之间
  • 发送电子邮件属于应用程序的表示层还是业务层?

    我正在尝试找出在我的 Asp net MVC 应用程序中放置发送电子邮件的代码的最佳区域 现在 我的应用程序设置在 2 个 VS 项目中 将业务层与表示层分开 我正在尝试设置一种情况 当用户重置密码时 业务逻辑更改密码后 服务器将向用户发送
  • 微服务中的事务

    我读过一些关于微服务架构的文章 但没有人涉及事务的主题 他们都说这很难做到 也许有人可以描述如何处理这个问题 但不是从领域方面 而是从技术方面 假设我们有一个业务案例 我们需要调用两个不同的服务 并且它们都对数据库进行一些更改 但是如果第二
  • Javascript显示/隐藏div onclick

    我有一个页面 其中包含三个 div 每个 div 是一个段落 我想使用 javascript 在用户从导航栏中按下每个 div 时仅在页面中显示这是导航栏 https i stack imgur com 1LnsS png WebDev 只
  • 如何阻止或拦截对 Directory.Delete(path, true) 的调用

    最近我正在调试一个 poof all customer data is gone 问题 没花多少时间就发现错误的分支导致了Directory Delete customerRoot true 行代码 这条灾难性的代码是由一名普通的 GUI
  • 前端测试:测试什么、如何测试、使用什么工具?

    我为 Ruby 代码编写测试已经有一段时间了 但作为一名前端开发人员 我显然有兴趣将其纳入我为前端代码编写的代码中 我一直在尝试很多不同的选项 CasperJS http casperjs org Jasmine http jasmine

随机推荐

  • 找不到 -lAFNetworking Xcode 问题的库

    ld warning directory not found for option L Users kh Library Developer Xcode DerivedData om euxqzibzllbcmndwqrgthdeotiro
  • 如何在ionic框架+ angularjs中调用函数?

    我正在使用 ionic 框架来制作 android 应用程序 我有 cordova5 1版本 first 我使用命令行创建一个项目ionic 启动 myApp 选项卡 我添加了android平台 现在我需要将java代码与javascrip
  • Google App Engine 的 JDO:转义引号

    如何转义 JDO Google App Engine 中的查询参数 例如 如果变量名称可能包含单引号 形式的不安全字符 如何使下一个片段安全 PersistenceManager pm String query select from Pe
  • 使用 jquery 淡入/淡出

    我正在研究我的学生项目 我是新的 jquery 对于该项目 我必须使用 jquery 来增强一些功能 并且我已经学到了很多来执行基本任务 但我陷入了一些非常令人困惑的事情 我的一个脚本实际上在鼠标悬停在功能上时更改了 div 容器的图像 功
  • 导入错误:Mac 上没有名为 bs4 的模块

    今晚我坐下来决定学习如何使用 python 受到这篇网页抓取文章的启发 cam ly danesblog 2011 01 craigslist arbitage 在完成教程后我 1 下载并安装python http www python o
  • 在 printf 参数中提升类型是否危险?

    我的问题源于尝试为多个位深度平台 例如 32 64 构建时尝试使用 printf 来记录内容 一个不断出现的问题是试图在多种架构上打印整数 在 32 位上它会是这样的 printf my int d n myInt 但在 64 位上 必须更
  • 在哪里可以找到所有 C 标准库的源代码?

    我正在寻找所有 C 标准库的完整源代码 也就是说 我正在寻找 stdio h stdlib h string h math h 等的源代码 我想看看它们是如何创建的 我认为这取决于不同的平台 但 Linux 或 Windows 都会受到欢迎
  • 将文件上传到 Google 云端硬盘时出错

    我已经在我的应用程序项目中实现了 Google Drive SDK 并尝试在 Google Drive 中上传图像 但出现错误 我的代码来自Here https developers google com drive quickstart
  • Powershell脚本将多个远程地址添加到防火墙规则

    我正在尝试编写一个脚本 该脚本将循环遍历本地防火墙规则并更新远程地址表 这是我到目前为止所拥有的 它不起作用 应该很简单 所以不确定发生了什么 该脚本运行时没有错误 但实际上并没有更新任何内容 name Get NetFirewallRul
  • 我的终端中的彩色、并排、内联 git diff 输出

    请注意 此问题不是该问题的重复问题 而是该问题的后续问题 当我执行 git diff 时 如何获得并排差异 https stackoverflow com questions 7669963 how can i get a side by
  • 在 Sql Server 中启用 DTD 支持

    我有各种 xml 文档需要存储在数据库列中 这些文档包含对 DTD 的引用 并且 SQL Server 不会导入 xml 因为它存在安全风险 如何在数据库上启用 DTD 支持 以便它可以让我插入 xml 内容 你必须CONVERT首先 MS
  • 通过 Flash 测试网络摄像头

    我正在寻找 测试你的网络摄像头 Flash 电影 例如this one http www sillywebcam com others demo test your webcam这是免费的 可以在封闭的环境中使用 我只需要相机测试 不需要视
  • NSImage 的 ressizedImageWithCapInsets ?

    In UIKit我们有 UIImage resizableImageWithCapInsets UIEdgeInsets capInsets 有类似的东西吗AppKit用于创建可平铺的NSImage NSImage 在 10 10 Yose
  • 自定义窗口上的 Unity 自定义检查器

    我有一个显示对象列表的自定义窗口 每个对象都有一个自定义检查器编辑器 是否可以在自定义窗口内显示自定义检查器 你不能强迫Unity3D将自定义检查器绘制在检查器窗口之外的其他位置 顺便说一句 您可以手动实例化Editor using 编辑器
  • 将 5 gig 文件导入表时出错

    我正在尝试批量插入表 use SalesDWH go BULK INSERT dbo npi FROM S tmp npi csv WITH FIELDTERMINATOR ROWTERMINATOR n lastrow 200 first
  • Google Sheets 导出为 Excel 值而不是公式

    我有一个谷歌工作表 其中第一个选项卡中的单元格从第二个选项卡上的单元格中提取数据 例如 Sheet1 单元格 A1 有 Sheet2 A1 对于 Sheet1 上的每个单元格都是如此 当我创建文件时 下载为 Microsoft Excel
  • 内联汇编跳转后抛出 C++ 异常

    我有一些奇怪的自修改代码 但其根源是一个非常简单的问题 我希望能够执行jmp or a call 然后从该任意点抛出一个异常并让包含该异常的 try catch 块捕获该异常jmp call 但是当我这样做时 在 gcc 4 4 1 x86
  • EditText 的可绘制右侧

    下面是我的布局
  • H2 - 多个应用程序访问同一个 H2 数据库

    我正在使用嵌入式数据库H2在 2 个网络应用程序中说WebApp1 and WebApp2 我运行 WebApp1 并执行一些查询来访问 H2 数据库 同时我运行 WebApp2 但它抛出异常H2 当前已被另一个进程使用 我的需求是 我应该
  • PouchDB可以在客户端代理一个大数据库吗?

    在单页应用程序上工作时 我必须编写大量样板代码才能与服务器端数据同步 PouchDB http pouchdb com 为这个问题提供了一个优雅的解决方案 允许在客户端本地访问数据 我不明白的是 当数据库太大而无法完全适应浏览器内存时 Po