代码之家  ›  专栏  ›  技术社区  ›  Bahadır Yağan

面向多用户的CouchDB建模

  •  7
  • Bahadır Yağan  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 16 年前
        1
  •  9
  •   Paul J. Davis    16 年前

    有人讨论了 mailing list 再过一会儿,这个问题就很适合了。经验法则是只将数据存储在一个文档中,这个文档可能会随着增长而变化。如果数据更可能增长,那么您很可能希望存储单独的文档。

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

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

        2
  •  3
  •   micahwittman    16 年前

    多用户系统不能 要求 关系数据库,尽管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的播客访谈)

        3
  •  2
  •   community wiki Jan Lehnardt    16 年前

    什么@micahwitman说。只是一个快速的补充:临时视图不应该在生产系统中使用,它们只用于开发。永久视图可以做临时视图可以做的任何事情,并且幅度更快。