对我使用PockDB-Couchdb的数据结构/模式的建议

对我使用PockDB-Couchdb的数据结构/模式的建议,couchdb,pouchdb,Couchdb,Pouchdb,早上好 我想将couchdb/pouchdb用于我目前正在处理的pwa 在我的项目中我要存储“项目”,在“项目”中我要存储项目标题和“章节”,在“章节”中我要存储章节标题和“场景”,在“场景”中包含文本 哪种模式最有意义和性能? 现在我想到这样一个计划: 项目1 标题:字符串 第一章 第一场 文本:字符串 场景2 文本:字符串 场景3 文本:字符串 第二章 项目2 标题:字符串 第一章 第一场 因为我只有SQL方面的经验,而且以前从未使用过基于文档的数据库

早上好

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

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

哪种模式最有意义和性能?

现在我想到这样一个计划:

  • 项目1
    • 标题:字符串
    • 第一章
      • 第一场
        • 文本:字符串
      • 场景2
        • 文本:字符串
      • 场景3
        • 文本:字符串
    • 第二章
  • 项目2
    • 标题:字符串
    • 第一章
      • 第一场
因为我只有SQL方面的经验,而且以前从未使用过基于文档的数据库,所以我真的不知道如何设置有意义的结构


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

  • 每个项目都是一个包含章节列表的文档,每个章节都包含场景列表
  • 项目、章节和场景是同一数据库中的三种不同类型的文档
  • 哪一个是最好的取决于可能的总尺寸,以及每个组件如何变化。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格式可用于利用所谓的分区数据库,这在这里非常合适。您可以在此处阅读有关它的博客帖子:


    谢谢您的回答!在阅读你的答案+文章时,它点击了。但是我有一个问题,有没有一种本地的方式可以像一个项目中的所有章节一样获得呢?我有!我在打字的时候不小心回答了。。。你介意看一下我编辑过的回复吗?:)如果您使用上面的_id格式,您应该能够使用带有合适的开始和结束键的_all_文档,比如startkey=“project1:chapter”&endkey=“project1:chapter/”这是完美的!与之相反,必须使用几个API调用,这对我来说并没有什么影响,因为我在本地使用它,而只是在远程手动同步所有数据。谢谢你花时间回答我的问题!很抱歉再次打扰您,我真的不知道如何使用开始和结束键的情况下。因为我真的不能排除这些东西。因此,当我试图获得所有章节时,我不能从结果中排除场景。