集群与复制

rom*_*rbr 7 couchdb database-cluster

我有一个用例,我希望在多个服务器上复制单个数据库(出于 HA 和可扩展性目的),

运行 3 节点副本而不是 3 节点集群会有什么缺点吗?

los*_*der 5

Couchdb docs 11.2提供了一个示例集群配置:

[cluster]
  q=8
  r=2
  w=2
  n=3
Run Code Online (Sandbox Code Playgroud)

q - 分片的数量。

r - 在 CouchDB 返回 200 和文档之前必须阅读的具有相同修订版本的文档的副本数。如果只有一份可访问的文档副本,则返回 200。

w - 写入前需要保存文档的节点数返回201。如果保存文档的节点为0,则返回202。

n - 每个文档的副本数。复制品。

您的 3 部分副本的行为应等效于:

[cluster]
  q=1
  r=1
  w=1
  n=3
Run Code Online (Sandbox Code Playgroud)

正确复制时。这是一种可能的集群配置,但不是最佳配置,因为它缺少:

  • 在确认之前确认多个节点和大多数节点已确认保存的好处。

  • 在返回之前确认多个节点和大多数节点已确认修订版的好处是正确的。

  • 通过分片将数据库扩展到单个节点的存储之外。

  • 无需切换到集群即可更改为与 q、r 或 w > 1 的集群参数等效的任何配置的能力。

间接地,如果副本实际上用于网络可扩展性,则对确认的限制会在副本之间解决更多潜在冲突,并且如果节点在确认保存和将其传递给其他副本。