Database design 面向多用户的CouchDB建模

Database design 面向多用户的CouchDB建模,database-design,couchdb,Database Design,Couchdb,我已经对文档数据库,特别是CouchDB的简单性感到兴奋。但我很难理解这样的数据库是否是多用户系统的可行选择。因为这些系统需要文档数据库不提供的记录之间的某种关系 对于这种情况,它是完全错误的工具吗?或者一些标记和临时视图是实现这一点的方法?否则 更新: 到目前为止,我了解答案。但让我把这个问题重新表述一下。假设我有大量的半结构化数据,这通常适合CouchDB。我可以给它们贴上“type=post”和“year=2008”这样的标签。我的问题是,这种类型的标记能走多远?比如说,我可以创建一个包含

我已经对文档数据库,特别是CouchDB的简单性感到兴奋。但我很难理解这样的数据库是否是多用户系统的可行选择。因为这些系统需要文档数据库不提供的记录之间的某种关系

对于这种情况,它是完全错误的工具吗?或者一些标记和临时视图是实现这一点的方法?否则

更新:
到目前为止,我了解答案。但让我把这个问题重新表述一下。假设我有大量的半结构化数据,这通常适合CouchDB。我可以给它们贴上“type=post”和“year=2008”这样的标签。我的问题是,这种类型的标记能走多远?比如说,我可以创建一个包含10000个名称的数组字段吗?还是有更好的方法?这是一个理解如何在这种基于文档的意义上进行思考的问题。

多用户系统不需要关系数据库,尽管RDBMS是大量(尤其是CRUD)应用程序数据存储/检索的主要技术

如果你想阅读过去的文档/面向对象的分布式数据库解决方案,可以搜索“Lotus Notes/Domino”(这是一种成熟的技术/产品,在这一领域,它有很好的背景知识,了解如何在基于文档的范例中设计应用程序。经典地说,它非常擅长工作流类型的应用程序)

特别是在CouchDB上,请查看:

(这不应该令人惊讶)

(易读说明概述)


(关于CouchDB的播客采访)

米卡维特曼说了什么。简单补充一下:临时视图不应该在生产系统中使用,它们仅用于开发。永久视图可以完成临时视图所能做的一切,而且速度更快。

在一段时间后,有一个讨论非常适合这个问题。经验法则是只将数据存储在可能随增长而变化的文档中。如果数据更有可能增长,那么您很可能希望存储单独的文档

因此,在多用户系统的情况下,实现基于ACL的权限的一种方法是创建“权限文档”,该文档将是用户id到文档id的映射,并指示相应的权限

{
    _id: "permission_doc_1",
    type: "acl",
    user: "John",
    docid: "John's Account Info",
    read: true,
    write: true
}
你的观点应该是

function(doc)
{
    emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write});
}
并且给定docid和userid,检查权限将是:

http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]
显然,这需要在客户端和coach之间有一些中介来确保权限得到强制执行