Couchbase 获取一组密钥?

Couchbase 获取一组密钥?,couchbase,Couchbase,在获取多个密钥集时,我可以看到客户端以一个长字符串发出请求,并发送到连接的couchbase服务器(协议似乎还包括每个密钥的vbucket映射) 所以,一个来自客户端的网络调用,包含所有密钥,它们的vbucketmaps 服务器如何响应此请求 如果连接的服务器具有所有请求的值,那么我希望连接的服务器只提供请求的值 但是,如果有多个集群,则连接的服务器可能没有请求的密钥。服务器在这种情况下做什么?我可以看到请求包含vbucket映射,从中,我可以预期连接的服务器可以向特定密钥的主服务器请求其值。这

在获取多个密钥集时,我可以看到客户端以一个长字符串发出请求,并发送到连接的couchbase服务器(协议似乎还包括每个密钥的vbucket映射)

所以,一个来自客户端的网络调用,包含所有密钥,它们的vbucketmaps

服务器如何响应此请求

如果连接的服务器具有所有请求的值,那么我希望连接的服务器只提供请求的值

但是,如果有多个集群,则连接的服务器可能没有请求的密钥。服务器在这种情况下做什么?我可以看到请求包含vbucket映射,从中,我可以预期连接的服务器可以向特定密钥的主服务器请求其值。这只是我的猜测,我想知道服务器在这种情况下如何响应

此外,如果密钥存在,服务器由于“服务器忙”或其他错误而无法返回值,会发生什么情况


始终感谢您的帮助

有两种不同的方法可以实现这一点,要么使用莫西,要么不使用莫西

没有Moxi(智能客户端)

当客户端与Couchbase建立连接时,它将首先获得集群中所有服务器的列表和vbucket映射。然后,它与群集中的每台服务器建立连接。当您执行多重操作时,客户端将查阅它包含的vbucket映射,并确定服务器属于哪个vbucket。如果我们有三台服务器,那么客户端将组合最多三个多操作,并将每个操作发送到包含该多操作中所有密钥的相应服务器。每个服务器都将响应客户机,客户机将把所有结果放在一组结果中

和莫希

在这种情况下,客户机不知道集群或vbucket映射,但moxi知道。客户端将所有密钥发送给moxi,然后moxi将负责将它们拆分并发送到适当的服务器

断开场景:

如果服务器关闭或繁忙,则该服务器特定的多操作中的所有密钥都将失败。客户端应该返回它可以从其他服务器获得的密钥,并提醒您错误

再平衡情景:


在重新平衡期间,请求发送到错误服务器的可能性很小。在这种情况下,客户端应在正确的服务器上重试该操作。在重新平衡过程中,每个客户都应该收到一个“快进”vbucket映射,该映射显示了重新平衡后所有vbucket的位置。它将使用此vbucket映射中的服务器进行重试。

Hmm有点难以理解。。。对于第一部分,正如我在您的文章中所看到的,似乎客户端可以完成多个网络调用,您还说“将每个调用发送到包含多个操作中的所有密钥的相应服务器”如果这种服务器不存在怎么办?在第二部分中,您提到“将它们拆分并发送到适当的服务器”这是否意味着客户端连接到多个服务器并发送适当的请求?在第三部分中,如果有3个键,1个无法获取。整个请求是否返回错误?我想知道更多的细节。谢谢,很抱歉我的回答有点混乱。你开始问更详细的问题,所以如果你能告诉我你正在使用哪个客户端连接Couchbase会有所帮助。这样我可以更好地回答你的问题。你说的客户,是指我认为。。。我还没有决定使用哪个库,但是查看了SpymeMached(JAVA)和libcouchbase(C++)。看起来两者的表现非常相似,我已经为java客户端编写了很多代码,所以我将对此进行评论。SpymeCached保留到集群中每个服务器的持久连接。对于multi-get,密钥根据它们所属的服务器进行分割。然后,客户机向每个服务器发送一个multi-get(因此集群中的每个服务器都有一个multi-get)。如果服务器关闭(不存在),则multi-get将失败。这是一个全有或全无的操作。如果还有什么不清楚的地方,请告诉我。