クライアントライブラリは、完全なvBucketサーバーマップのメッセージを一旦受信したら、より有用なデータ構造にそのマップを処理するために、クライアントライブラリに適したJSONパーサを使用する必要があります。JSONパーサはC言語用のヘルパーライブラリとしてlibvbucket、Java用にはjvbucketがあります。
libvbucket
とjvbucket
ヘルパーライブラリは、コネクションの生成、ソケット管理、プロトコルシリアライゼーションなどは一切行いません。これらはよりハイレベルなライブラリの仕事です。これらのヘルパーライブラリは、JSON形式のvBucketサーバーマップの解析の仕方や、マップ情報にアクセスするためのAPIのみを提供します。
返送されたJSON内vBucketMap
値はvBucketの構成を説明しています。例えば:
"serverList":["10.1.4.11:11210","10.1.4.12:11210"], "vBucketMap":[[0,1],[1,0],[1,0],[1,0],:,[0,1],[0,1]]
vBucketMapのインデックスは0から始まるvBUcketIdとなっています。そこで、もしvBucketId が4であるvBucketの場合、vBucketMap[4]を検索すればいいことになります。vBucketMap内のエントリは、整数の配列であり、その各々の整数は、サーバリストの配列への0を基点としたインデックスになっています。この配列の0番目のエントリは、vBucketのプライマリサーバーを説明します。上記の設定に基づいて、どう読み解くかを以下に示します。
vBucketIdが0のvBucketはvBucketMap[0]
、つまり[0,
1]
となります。したがって、vBucket
0のプライマリサーバはserverList[0]
、つまり10.1.4.11:11210
になります。
一方vBucketId
0の最初のレプリカサーバは、serverList[1]
にある10.1.4.12:11210
です。
vBucketIdが1のvBucketはvBucketMap[1]
、つまり[1,
0]
の設定となります。したがって、vBucket
1のプライマリサーバは、
serverList[1]
、つまり10.1.4.12:11210
になります。そしてvBucket
1の最初のレプリカは、
serverList[0]
の10.1.4.11:11210
となります。
どのvBucketについても、この構造と情報が繰り返されます。
値が-1である場合、その位置にまだサーバが存在しないことを意味します。つまり、下記のようになります:
"vBucketMap":[[0,-1],[0,-1],[0,-1],[0,-1],:]
時々、システムが完全に稼動する前には、下記の状態となることがあります:
"serverList":[], "vBucketMap":[]