在PouchDB

时间:2017-12-22 00:34:33

标签: indexing couchdb views pouchdb design-documents

我一直在学习CouchDB和PouchDB,也许这就是为什么我无法理解PouchDB处理CouchDB Views的方式。

我已经在CouchDB中成功创建了一个View,并通过HTTP(CouchDB方式)查询它是成功的。

我遇到的问题是如何使用PouchDB查询视图,这是一个用于CouchDB或类似CouchDB的数据库的前端抽象和兼职(?)缓存库。

根据this blog post PouchDB在2.2.0版本中引入了一种称为“持久性映射/缩减”的东西。但是,由于我已经习惯在CouchDB中使用Views,我对PouchDB试图解决的问题感到困惑。

PouchDB中的持久性map / reduce是否只是一种将视图从前端舒适地保存到CouchDB的方法?如果是这样,为什么没有明显的方法来利用已经写在后面的视图?而且,PouchDB从一开始就无法做到这一点 - 我理解Views是CouchDB索引能力的支柱。

假设我确定我会经常使用View(或SQL-index中的索引)。我真的应该使用PouchDB通过前端创建吗?这是否意味着我会在 创建View时遇到问题以及是否应该覆盖它们? PocuhDB是在幕后使用CouchDB Views,还是在前端创建自己的map / reduce查询,从而在重新编制索引时失去了后端更新Views的效率。

从本质上讲,我想我的问题是:PouchDB是以效率为代价重新发明轮子,还是仅仅取得CouchDB索引功能的所有权?或者其他什么都在一起?

1 个答案:

答案 0 :(得分:0)

PouchDB(至少)有两件事:

1)在javascript中实现CouchDB,意味着你得到一个功能齐全的数据库,就像CouchDB一样,除了整个东西在浏览器中本地运行(即使你处于离线状态)。由于PouchDB能够使用CouchDB进行复制,因此它可以充当CouchDB的本地(基于浏览器)缓存。它也可以作为一个独立的数据库。

2)PouchDB也是一个javascript库,可以让你访问CouchDB的远程(基于云)实例。

当您创建PouchDB的实例时,您可以告诉它连接到远程CouchDB实例或创建本地实例(在浏览器中)。

remoteDB = new PouchDB("http://couchdb.example.com/remote_database")
localDB = new PouchDB("local_database")

执行查询时,您可以在远程实例或本地实例上运行该查询,具体取决于您实例化的上述内容。如果它是远程数据库,则查询将查看远程数据库上的所有数据。如果它是本地数据库,则查询将查看本地数据库中的所有数据。本地查询可以使用与couchdb在服务器上完全相同的索引 - 这些被称为持久查询 - 或者您可以执行查看数据库中每个文档的临时查询。无论您是查询远程couchdb还是本地pouchdb,以及您是使用持久查询还是临时查询,都取决于很多因素,例如,您的应用程序是否需要脱机工作,您拥有多少数据,是否要复制整个数据库到本地实例等

PouchDB不仅重新发明了轮子。它具有CouchDB的所有优点,即使没有互联网连接,也可以在浏览器中使用。