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

这种情况完全是错误的工具吗?或者一些标记和临时视图是实现这一目标的方法?或者......

更新:结果 到目前为止,我理解答案。但是让我稍微改一下这个问题。假设我有一堆半结构化数据,通常适合CouchDB。我可以将它们标记为“type = post”;和“年= 2008”。我的问题是这种标签可以走多远?我可以创建一个包含10.000名称的数组字段吗?或者有更好的方法吗?这是理解如何在本文档中进行思考的问题。

有帮助吗?

解决方案

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

因此,在多用户系统的情况下,实现基于ACL的权限的一种方法是创建“权限文档”,该权限文档将是user_id到doc_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"]

显然,这需要在客户端和沙发之间设置一些中介,以确保强制执行权限。

其他提示

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

如果您想阅读以前的面向文档/面向对象的分布式数据库解决方案,请搜索“Lotus Notes / Domino”。 (这是该领域的成熟技术/产品,对于如何在基于文档的范例中设计应用程序具有良好的背景知识。通常,它在工作流类型应用程序中非常擅长)。

特别是在CouchDB上,请查看:

http://wiki.apache.org/couchdb/ (这不应该是一个惊喜)

http://seanoc.wordpress.com/2007/ 10/12 / more-on-couchdb / (简单阅读说明概述)

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

@micahwittman说的是什么。只是一个快速添加:临时视图永远不应该在生产系统中使用,它们仅用于开发。永久视图可以执行临时视图可以执行的所有操作,并且速度更快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top