4.1. 理论¶
在我们继续之前,我们需要一些理论。
如你所见 etc/default.ini
有一个部分叫做 [cluster]
[cluster]
q=2
n=3
q
-碎片的数量。n
-每份文件的份数。复制品。
创建数据库时,您可以通过请求发送自己的值,从而覆盖中的默认值 default.ini
.
在CouchDB返回之前必须读取的具有相同修订版本的文档的副本数 200
等于文档总份数的一半加1。在使用返回写入之前需要保存文档的节点数也是如此 201
。如果节点数少于该数目,则 202
返回。读取和写入编号都可以通过请求指定为 r
和 w
相应的参数。
我们现在将重点放在碎片和副本上。
碎片是数据库的一部分。它可以复制多次。一个碎片的拷贝越多,就越能扩展。如果您有4个副本,这意味着该特定碎片的所有4个副本最多将驻留在4个节点上。对于一个副本,您只能有一个节点,就像couchdb1.x一样。自3.0.0以来,CouchDB的默认值是 q=2
和 n=3
,这意味着每个数据库(和辅助索引)被分成2个碎片,每个碎片有3个副本,总共有6个碎片副本文件。对于仅承载具有这些默认值的单个数据库的CouchDB集群,最多可以使用6个节点来水平扩展。
副本增加了抗故障能力,因为有些节点可以离线,而不会发生任何故障。
n=1
所有节点都必须启动。n=2
任何一个节点都可以关闭。n=3
任何2个节点都可以关闭。- 等
电脑坏了,系统管理员时不时愤怒地拔掉网线,所以 n<2
要求停工。价值太高的 n
增加了服务器和复杂性,但没有任何实际好处。最佳位置在 n=3
.
假设我们有一个包含3个副本和4个碎片的数据库。这将给我们最多12个节点:4*3=12。
我们可以丢失任何2个节点,但仍然可以读写所有文档。
如果丢失更多节点会怎么样?这要看我们有多幸运。只要每个碎片至少有一个拷贝在网上,我们就可以读写所有的文档。
所以,如果我们很幸运的话,我们最多可以失去8个节点。