正确构建couchDB应用程序

时间:2011-01-22 14:05:13

标签: couchdb

使用案例

  • 我想从1 couchdb
  • 为多个客户提供服务
  • 每个客户都有自己的一组数据(以及子数据的子集 - 总公司作为父级,每个位置作为 儿童)
  • 每个客户可以拥有不同的UI屏幕
  • 在每个客户中,不同的用户可能拥有不同的UI屏幕
  • 系统将是一个couchapp并在全球范围内分发并将使用复制

选项

  • 为每个客户存储一个_design文档中的所有页面,并根据用户类型(权限)提供相应的页面

  • 对于每个客户商店,每个页面都有自己的_design文档

  • 对于每个客户,将与用户权限级别关联的所有页面存储在一个_design文档中,以便每个用户类型将从另一个_design文档提供

另外,我现在在couchDB上阅读了两本书,并且仍然不清楚使用_design文档而不是普通文档来提供网页的优势。

更新1:
我想我需要提供一个更清晰的例子。

A公司在曼谷设有总部,管理和行政(秘书)工作人员使用该应用程序。这些用户将属于不同的用户组,并具有不同的权限,这将允许他们访问不同的HMTL文档(或相同的模板文档,但通过js提供不同的内容)。该公司在芭堤雅,普吉岛和昌迈设有办事处。在每个办公室,他们都有不同的用户类型,他们可以访问应用程序的不同部分,并查看不同版本的HTML屏幕。本地应用程序将基于过滤的复制。

这个couchDB将为公司A之类的多个公司提供这项服务,所有这些公司都来自同一个数据库(原因是我们需要能够为所有公司汇总数据,而且因为视图是特定于数据库的,所以couchDB不能聚合在多个数据库中如果我读得正确。)但是,每个主公司可能与其他主要公司的HTML页面略有不同。

所以只关注结构,我最初的想法是做多个_design文档,每个主公司一个。在每个_design文档中,我们存储该公司的每个HTML页面(可能与其他主公司相同或不同。

有没有更好的方法来构建它? 当我们说1000家大公司时,您是否看到了扩展问题?

P.S。即使我们无法通过couchDB直接完成解决ACL问题,我们也可以自己完成,所以这不是现在主要关注的问题。

更新2:
因此,经过更多研究,我看到节目功能(节目)如何通过使用模板在这方面发挥作用。它没有完全回答我的问题,所以我想,基于此,我现在还想知道是否有一种情况你可能希望在_design文档中除index.html之外还有任何其他HTML附件?

2 个答案:

答案 0 :(得分:5)

针对多个用户的情况有两种基本解决方案,每种解决方案只能看到总数据的一部分。

  1. 使用中间网络层。这就像任何其他MySQL / PHP或Rails架构一样。 CouchDB是一个数据后端。您拥有自己的用户登录和管理,并自己完成所有工作。
  2. 使用CouchDB security model。它需要一些学习,但是,嘿,你不是自己编写自己的用户和身份验证代码。要为不同的用户提供不同的数据集,每个用户都有自己的数据库,您只能复制(使用过滤器)用户可以看到的文档。

答案 1 :(得分:2)

CouchDB直接为来自互联网的所有查询提供服务。它不关心客户端是浏览器(Couch应用程序),iPhone还是命令行cURL。设计文档根本不会影响数据库的读取权限。

设计文档是一个完全透明和暴露的东西。没有任何私人应该在其中。例如,它可能包含模板文件,但私有数据包含在其他文档中。

数据库可以包含几乎任何设计文档,因为秘密信息是其他文档,只有一些文档复制到用户的个人数据库。