我对文档数据库感到兴奋,特别是关于CouchDB的简单性。但我很难理解这些数据库是否是多用户系统的可行选择。由于这些系统需要文档数据库不提供的记录之间的某种关系。
这种情况完全是错误的工具吗?或者一些标记和临时视图是实现这一目标的方法?或者......
更新:
到目前为止,我理解答案。但是让我稍微改一下这个问题。假设我有一堆半结构化数据,通常适合CouchDB。我可以将它们标记为“type = post”和“year = 2008”。我的问题是这种标签可以走多远?我可以创建一个包含10.000名称的数组字段吗?或者有更好的方法吗?这是理解如何在本文档中进行思考的问题。
答案 0 :(得分:9)
对mailing list一段时间的讨论很适合这个问题。经验法则是仅将数据存储在可能随着增长而变化的文档中。如果数据更有可能增长,那么您很可能希望存储单独的文档。
因此,在多用户系统的情况下,实现基于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"]
显然,这需要在客户端和沙发之间设置一些中介,以确保强制执行权限。
答案 1 :(得分:3)
多用户系统不需要关系数据库,尽管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的播客采访)
答案 2 :(得分:2)
@micahwittman说的是什么。只是一个快速添加:临时视图永远不应该在生产系统中使用,它们仅用于开发。永久视图可以执行临时视图可以执行的所有操作,并且速度更快。