存储桶是否跨越 Couchbase 服务器集群中的所有节点?

Lar*_*ren 1 views nosql couchbase couchbase-bucket

我一直在阅读 Couchbase Server 文档,据我所知,这就是“它是如何工作的”:

  • 一个集群有一个或多个节点(服务器)。
  • 一个集群有一个或多个桶。
  • 一个桶有一个或多个视图。

我的问题:

  1. 我假设存储桶中的数据分布在集群中的所有节点上,对吗?还是在所有节点上复制?
  2. 假设一个存储桶跨越集群中的多个节点,视图是否从所有这些节点检索数据?
  3. 或者存储桶及其视图特定于某个节点?

mrk*_*wse 5

你在第一点的假设大部分是正确的。一个存储桶跨 1024 个 vBuckets 进行分片。然后将这些 vBucket 分布在集群中的节点上(均匀地,给予或取余),将副本 vBucket 放置在与主 vBucket 所在的节点分开的节点上。默认情况下,vbucket 只会复制到另一个节点(因此每个文档都会复制到另一个节点),但是如果需要,您可以配置多个副本以获得更高的可用性。

视图(设计文档)将为每个节点/vBucket 中的特定存储区的数据建立索引,但该视图的索引数据存储在 vBucket 所在的节点中。因此,当您查询视图时,它必须访问集群中的每个节点。当您重新平衡时,默认情况下,节点上的索引会随着 vBuckets 的迁移而更改。数据从源节点移除并在复制的目标节点上重新生成。

YouTube 上的How-To NoSQL 3.0 网络研讨会对Couchbase Server 的分片架构进行了很好的概述。