CouchDB多用户建模

7
我已经对文档数据库,特别是CouchDB的简单性感到兴奋。但我很难理解这种数据库是否适用于多用户系统,因为这些系统需要记录之间的某种关系,而文档数据库并不提供此类功能。
在这种情况下,它完全是错误的工具吗?或者一些标记和临时视图是实现这一点的方法?还是其他方法...
更新: 我理解迄今为止给出的答案。但让我重新表述一下问题。假设我有大量半结构化数据,通常适用于CouchDB。我可以像“type=post”和“year=2008”这样进行标记。我的问题是,我可以用这种类型的标记走多远?比如说,我可以创建一个包含10,000个名称的数组字段吗?还是有更好的方法来做这件事?这是理解如何以基于文档的方式思考的问题。
3个回答

9

有一段时间在邮件列表上讨论过这个问题,与此相关。经验法则是只在可能更改而不是增长的文档中存储数据。如果数据更有可能增长,则最好将其存储为单独的文档。

因此,在多用户系统的情况下,实现基于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});
}

如果给定了文档ID和用户ID,则检查权限的方法如下:

http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]

显然,这需要在客户端和couch之间有一些中介来确保权限得到执行。

3
多用户系统不需要关系型数据库,尽管对于大量(特别是CRUD)应用程序来说,RDBMS是数据存储/检索的主要技术。如果您想了解早期的文档/对象导向、分布式数据库解决方案,请搜索“Lotus Notes/Domino”(它是这个领域成熟的技术/产品,是了解基于文档范例的应用程序设计的背景知识。经典地,它非常适合工作流类型的应用程序)。

关于CouchDB,可以查看:

http://wiki.apache.org/couchdb/ (这应该不会让人意外)

http://seanoc.wordpress.com/2007/10/12/more-on-couchdb/ (易于阅读的描述概述)

http://twit.tv/floss36 (有关CouchDB的全部播客采访)

2

就像@micahwittman所说的那样。只是需要补充的是:临时视图不应该在生产系统中使用,它们仅用于开发。永久视图可以做到临时视图所能做的一切,并且速度更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接