关于Pouchdb的数据结构/架构的建议-Couchdb

时间:2019-05-17 11:27:56

标签: couchdb pouchdb

早上好!

我想对目前正在使用的pwa使用长沙发/ pouchdb。

在我的项目中,我要存储“项目”,在“项目”中,我要存储项目标题和“章节”,在“章”中,我要存储章节标题和“场景” ,“场景”包含文本。

哪种模式最有意义和最有效?

现在我正在考虑这样的计划:

  • 项目1

    • 标题:字符串
    • 第1章

      • 场景1
        • 文本: string
      • 场景2
        • 文本: string
      • 场景3
        • 文本: string
    • 第2章

      • ...
  • 项目2

    • 标题:字符串
    • 第1章

      • 场景1
      • ...

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

我是将文档存储在文档中以具有与上图完全相同的架构,还是为每个组件(Projects,Chapters,Scenes)创建一个数据库?

1 个答案:

答案 0 :(得分:1)

您有几种选择。

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

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

上面的第二个建议可以更好地扩展,但是(当前;请参见下面的链接)缺少能够通过单个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的“即将登陆”版本中,此id格式可用于利用所谓的分区数据库,这在这里非常适合。您可以在此处阅读有关它的博客文章:

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