我现在正在研究 couchbase,我对术语“bucket”和“vbucket”的官方描述感到非常困惑,谁能解释一下 bucket 或 vbucket 到底是什么?有什么不同?最好做一些类比,举一些例子。
4 回答
简短的回答
Bucket是唯一键控文档的逻辑键空间,均匀分布在集群中的所有节点上。
vBucket是位于单个节点上的存储桶的子集。所有 vBucket 的联合是一个桶。
稍微长一点的回答
假设您有三个节点:
+----------+ +----------+ +----------+
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+----------+ +----------+ +----------+
node1 node2 node3
存储桶是一组文档(结构和属性可能不同),分布在所有三个节点上,但共享相同的密钥空间。
+----------+ +----------+ +----------+
+---------------------------------------------------------------+
| | | | | | | |
| | | | | | | Bucket
| | | | | | | |
+---------------------------------------------------------------+
| | | | | |
| | | | | |
+----------+ +----------+ +----------+
node1 node2 node3
请注意,存储桶中的键必须是唯一的,这与 RDBMS 中的数据库概念不同,后者的键在表中是唯一的。
存储桶分为 1024 个分段,这些分段均匀分布在集群中的所有节点上。这些段是虚拟存储桶或 vBucketes。因此,在这种情况下,每个节点上都有 1024/3 个 vBucket。
+----------+ +----------+ +----------+
+---------------------------------------------------------------+
| | | | | | | |
| | 341 vBs | | 341 vBs | | 342 vBs | Bucket
| | | | | | | |
+---------------------------------------------------------------+
| | | | | |
| | | | | |
+----------+ +----------+ +----------+
node1 node2 node3
每个 vBucket 都有其关联的文档集。所以在查找的时候,clusterMap会计算出被搜索到的文档的key的hash,并识别出文档所在的节点和vBucket。
Bucket 就像 RDBMS 中的数据库。它包含文档、视图和一些配置。VBucket 就像 RDBMS 中的分片。CB 上的所有键都映射到#VBucket 和#VBucket 映射到服务器名称。由于这些散列函数导致文档在多个节点上的均匀分布,并通过其 id 快速获取文档的操作。
您可以从 Couchbase 文档开始,“架构和概念”部分 http://docs.couchbase.com/admin/admin/Concepts/concept-intro.html
有关存储桶的更多信息,请参阅http://docs.couchbase.com/admin/admin/Concepts/concept-dataStorage.html。
有关 vBucket 的更多信息,请参阅http://docs.couchbase.com/admin/admin/Concepts/concept-vBucket.html。
简而言之,bucket 是一种抽象,它描述了集群上的某些资源(如 RAM 和磁盘空间),从 API 的角度来看,它是存储在系统中的文档的命名空间,类似于 SQL 世界中的数据库。
除了上述答案之外,我还有一个答案,我想分享 vBuckets 存在的更深层次的原因。如果您来自 RDBMS 世界,请将“bucket”视为“table”,将“documents”视为“records”。由于 KV 文档在每个文档中可能有也可能没有固定数量的 KV 对,我们称之为“无模式”。
谈到“vBuckets”,您可能会认为它类似于 DB 块。
在一个桶里
- 如果未启用副本,则 一个Bucket有1024个活动 vBucket。
- 如果replicas设置为 '1',则 Bucket有1024个活动 vBuckets + 1024 个副本 vBuckets。
- 同样,如果replicas设置为 '2',则 Bucket有1024个 vBuckets + (1024 x 2) 个副本 vBuckets。
“ 1 Bucket: 1024 vBucket ”的比例是固定的。我们无法改变这一点。这个想法是在 CB Cluster 的节点上均匀分布数据
示例:当我们在 3 节点 CB 集群中创建一个“桶”时,它的 1024 个 vBucket 将均匀分布在这 3 个节点上。因此,如果我们也有副本 vBucket,它也将均匀分布。但是,Couchbase 服务器将确保对于节点 1 上存在的活动 vBucket,其副本 vBucket 位于该 CB 集群的其他 2 个节点上。同样适用于节点 2 和节点 3。希望你得到这部分......这是为了确保节点故障不会导致数据丢失。如果 3 节点集群中的 1 个节点发生故障,则幸存的 2 个节点的副本 vBucket 将自动提升为活动 vBucket。