是否可以确保某些密钥存储在群集中的同一Couchbase节点上?说有用户及其偏好(不是一个真实的例子,只是为了简单起见......)而且大多数时候我会将它们放在一起显示在页面上。认为将它们放在同一节点上是很自然的,这样客户端就不会从不同的节点中检索它。
如何命名密钥以确保它们位于同一节点上?有可能吗?这是我应该关心的事情吗?
答案 0 :(得分:2)
虽然在技术上是可行的,并且在某些情况下,例如这样做似乎合乎逻辑的情况,但是没有什么好处,特别是与确保密钥到达预期节点的潜在缺点形成鲜明对比。 / p>
为了证明“小利益”评论,对于健康状况良好的典型系统,节点之间在访问任何特定文档所花费的时间方面应该存在最小的差异(无论是节点检索节点所需的时间)文档或通过网络发送该文档所花费的时间),因此,由于节点上的分组键而导致的任何性能提升都是微不足道的。
另一个主要的兴趣领域是可用性。这里的好处可能更大,好像一个节点由于某种原因而出现故障,节点有可能不是包含所有链接密钥的节点,因此剩余节点中的一个将足以维持(特定部分)一个系统。但是,还有一个风险,即包含所有优先级键的一个节点将关闭,系统不会保留活动密钥,并且需要(自动)故障转移或replica reads。但是,即使这些密钥分布在一个节点上,相同的(自动)故障转移和副本读取机制也可以提供相同的可用性,从而留下最小的(如果有的话)好处。
然而,缺点是更大,因为确保密钥被发送到特定节点的方法将需要修改用于对密钥进行分片的散列算法,这需要在可靠地部署到开发集群之前进行全面的测试和设计。答案 1 :(得分:0)
这个问题很老了,但我对于关于Counchbase的问题也有同样的问题,所以我添加了一些评论。
Redis群集具有您询问的确切功能,其中使用{}包装的密钥部分将用于计算哈希值而不是整个密钥。
以下是一个可能有用的案例。
我们假设一组Couchbase或Redis节点用于保存20多个Web服务器的会话数据。如果一个Web服务器的数据总是进入同一节点,那么甚至部分群集都已关闭且无法恢复,只有节点服务的Web服务器才会受到影响。否则,所有Web服务器都将关闭。