PouchDB 结构

Posted

技术标签:

【中文标题】PouchDB 结构【英文标题】:PouchDB structure 【发布时间】:2015-07-16 00:00:48 【问题描述】:

我是nosql 概念的新手,所以当我开始学习PouchDB 时,我发现了这个转换表。我的困惑是,如果假设我有多个表,PouchDB 如何处理,这是否意味着我需要创建多个数据库?因为根据我在pouchdb中的理解,一个数据库可以存储很多文档,但是一个文档意味着sql中的一行还是我误解了?

【问题讨论】:

【参考方案1】:

有时多数据库计划是一个不错的选择,例如每个用户的数据库,甚至每个用户的数据库功能。看看 CouchDB 邮件列表上的this conversation。

【讨论】:

【参考方案2】:

这个问题的答案似乎出人意料地记录不足。虽然@llabball 明确给出了一个不错的答案,但我认为观点并不总是可行的。

您可以在 何时不使用 map/reduce 部分阅读 here,Nolan 解释说,对于更简单的应用程序,关键是滥用 _ids ,并利用allDocs() 的力量。

换句话说,如果您有两种不同的类型(比如艺术家和专辑),那么您可以为每种类型的 id 添加前缀以获得易于搜索的数据集。例如_id: 'artist_name' & _id: 'album_title',将允许您轻松地按名称顺序检索艺术家。

由于不需要额外的索引和更少的代码,以这种方式布置数据将带来更好的性能。但是,很明显,如果您的数据要求更复杂,那么视图是您的最佳选择。

【讨论】:

【参考方案3】:

... 这是否意味着我需要创建多个数据库?

没有。

...一个文档意味着sql中的一行还是我误解了?

没错。 SQL 表定义了列标题(名称和类型)——它们是文档的 JSON 属性名称。

因此,所有具有相同属性的文档(行)(所谓的“模式”)都相当于您的 SQL 表。您可以根据需要在一个数据库中拥有尽可能多的不同模式(访问 json-schema.org 以获得一些灵感)。

如何单独申请?创建 CouchDB 视图!您可以通过 SQL 知道的一个请求获取所有/部分“行”表格数据(具有相同架构的文档)。

为了轻松编写此类视图,type 属性在 CouchDB 文档中非常常见。您在 SQL 表中的已知名称可以是您的类型,例如 doc.type: "animal"

您的视图名称可能是 animalByNameanimalByWeight。取决于你的需要。

【讨论】:

以上是关于PouchDB 结构的主要内容,如果未能解决你的问题,请参考以下文章

pouchdb db.login 不是函数

排毒测试 + React Native + PouchDB 应用程序:由于一些 PouchDB 同步,我们的登录测试一直失败并超时?

未捕获的TypeError:PouchDB.plugin不是一个函数

复制数据库时 pouchDB 出错

无法将 PouchDB 导入 Angular 5.2.0 应用程序

使用 PouchDB 的 Ionic 应用程序性能问题