使用 Pouchdb 对我的数据 structure/schema 的建议 - Couchdb

Suggestions for my data structure/schema with Pouchdb - Couchdb

早上好!

我想将 couchdb/pouchdb 用于我目前正在处理的 pwa。

在我的项目中,我想将 "Projects" 存储在 "Project" 中 我想将 project-title 和 "Chapters" 存储在 "Chapter" 中我想存储 chapter-title 和 "Scenes",一个 "Scene" 包含包含文本。

哪种架构最有意义和性能最好?

现在我在想这样的计划:

因为我只有 SQL 经验,以前从未使用过基于文档的数据库,所以我真的不知道如何放置一个有意义的结构。

我是将文档存储在文档中以获得与上面完全相同的模式,还是为每个组件(项目、章节、场景)创建一个数据库?

您有多种选择。

  1. 每个项目都是一个包含章节列表的文档,每个章节都有一个场景列表。
  2. 项目、章节、场景是同一个数据库中的三种不同类型的文档。

哪一个最好取决于可能的总大小,以及这些组件中的每一个如何变化。 CouchDB 最适合小文档(千字节)。由于您只能更新整个文档,更改列表中的位或较大文档中的对象内部的位很快就会变得效率低下,并可能产生更新冲突。

上面的第二个建议会更好地扩展,但是(目前;参见下面的 link)缺乏能够通过单个 API 调用提取项目的所有内容的便利。你可以使用 id 字段来达到很好的效果:

{
    "_id": "project1:toplevel",
    "type": "project",
    "title": "Project 1"
}

{
    "_id": "project1:chapter1",
    "type": "chapter",
    "title": "Project 1, chapter 1"
}

{
    "_id": "project1:chapter1#scene1",
    "type": "scene",
    "title": "Project 1, chapter 1, scene 1"
}

在 CouchDB 的 "landing soon" 版本中,此 id 格式可用于利用非常适合此处的 so-called 分区数据库。您可以在此处阅读有关它的博客文章:

https://blog.cloudant.com/2019/03/05/Partition-Databases-Introduction.html