7

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

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

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

4

3 回答 3

9

不久前在邮件列表上有一个讨论非常适合这个问题。经验法则是只将数据存储在可能会发生变化和增长的文档中。如果数据更有可能增长,那么您很可能希望存储单独的文档。

因此,在多用户系统的情况下,实现基于 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 和用户 ID,检查权限将是:

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

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

于 2008-09-29T15:09:09.490 回答
3

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

如果您想阅读过去的面向文档/面向对象的分布式数据库解决方案,请搜索“Lotus Notes/Domino”(这是该领域的成熟技术/产品,对如何在文档中设计应用程序有很好的背景知识-based 范例。传统上,它非常适合工作流类型的应用程序)。

具体在 CouchDB 上,请查看:

http://wiki.apache.org/couchdb/(这应该不足为奇)

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

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

于 2008-09-29T08:26:09.567 回答
2

@micahwittman 说了什么。只是一个快速的补充:临时视图不应该在生产系统中使用,它们仅用于开发。永久视图可以做临时视图可以做的所有事情,而且速度要快得多。

于 2008-09-29T08:38:38.540 回答