【发布时间】:2012-07-18 12:29:42
【问题描述】:
我有一个问题要问沙发库专家:是否可以将文档子集(例如视图中的文档)与其他存储桶同步?
所以其他存储桶文档始终是“主”存储桶的直接子集? 如果是这样,就性能而言,这不是很昂贵吗?还是 couchbase 有什么功能可以只创建文档的深层链接而不是复制它?
或者:是否可以在视图上编写视图?
提前谢谢你!
--- 编辑 ----
假设我想要两组(存储桶)文档 S1 和 S2。 S2 是 S1 的子集。每个集合都包含相同的视图 V1、V2 和 V3,因为我希望能够使用相同的逻辑/接口查询它们中的任何一个。在我的例子中,集合 S2 是按用户/公司/商店/任何东西构建的,在生产中应该有大约 1000 个子集 S2 - 为了保持抽象,我们称它们为 S2a S2b 和 S2c。
要包含在任何子集中的文档的选择由过滤实例(例如视图)完成。让我们将这些过滤实例称为 F1,用于过滤 S1 到 S2,因此称为 F1a、F1b 和 F1c。
因此,根据我对 couchbase 的实际了解,这导致了以下设计/视图架构:我有三个“基本”视图来显示 V1、V2 和 V3,并且要实现 S2a、S2b 和 S2c,我必须创建设计视图 S2aV1、S2aV2、S2aV3、S2bV1、S2bV2 等(9 个视图)。
有人可能会说“明智地选择你的键,你可以避免子视图”,但在我看来这并不容易,因为以下情况:在最坏的情况下,过滤器参数每分钟都会改变并且包含许多 WHERE IN在查询 k/v 列表时可能(在我的实际观点)无法有效处理的约束。
这导致了以下想法和我最初提出的问题。如果我在任何子集(由过滤器定义)中使用相同的视图,是否应该建立一个帮助我处理复杂过滤的实体?例如,在生成视图输出时在运行时调用的函数?这可能看起来像 /design/view?filter=F1 或类似的东西。
或者你有其他解决这个问题的想法吗?或者我应该使用 SQL,因为它更能处理频繁变化的过滤器?
【问题讨论】:
-
你能补充一点关于开发环境的问题吗? Java/C#/PHP 等?这可能会影响答案。
-
由于环境/客户端语言不会影响沙发底座的工作方式,我认为这并不重要。但是,如果您需要此信息来回答问题,请随意选择您选择的环境。我很高兴有任何建议。
-
如果您需要在外部执行其中的某些部分(这就是我问的原因),它可以做到,但讨论已经在 scalabl3 的答案中得到澄清,所以我们会看看我们结束的地方向上。 :)