【发布时间】:2015-03-21 05:20:18
【问题描述】:
我正在考虑一个可以存储客户数据的应用。鉴于存储桶在 CouchBase 中的工作方式,所有客户数据都将位于一个存储桶中。看来我有两个选择:
通过为每条记录分配一个字段来指示其所属的客户,从而在视图中实现多租户。
通过在每个作为客户 ID 的键上添加一个因素来实现它。
不过,似乎因为我将使用视图,所以我真的想要两者都做。在第 2 种情况下,我需要在记录中包含数据,以便可以对其进行索引(或者我可以在映射阶段提取部分键并在客户上建立索引)并且在选项 1 中,我想要它是检索数据时检查的关键部分,以确保我不会发送错误的客户数据。
问题是,这是一项服务,多个客户将进行交互,有时一个客户会创建一些数据,而另一个客户会在第一个客户请求时查看这些数据。但是,在每条记录上放置一个 ACL,列出所有有权查看它的人,至少可以说是有问题的。
我敢打赌,有一个通用的方法或设计模式可以回答这个问题,并且希望得到一些最佳实践的指导。
如果索引同时针对特定的相关数据和客户 ID 编制索引,我还担心性能...大量不同的客户可能会使索引的效率大大降低。 (但也许不是。)
【问题讨论】:
-
基于 Couchbase 之类的非规范化性质...当客户创建数据供其他客户查看时...您可以简单地复制它并为其提供正确的客户受限 ID?显然取决于用例。如果这种情况一直发生,它将无法扩展。
-
这是两个客户之间协作的情况,因此他们希望能够对同一个对象进行更改,他们都是。 (虽然可能不会同时进行,这意味着要么在应用层的两个副本之间进行协调,要么在分区后处理最终的一致性——但我认为如果不是这个租赁问题,后者将是更好的选择。)
标签: mapreduce couchdb couchbase multi-tenant