一括 getBulk()
メソッドは1つまたはそれ以上のアイテムをデータベースから1回のリクエストで取得できます。一括メソッドを利用すると、単一のネットワーク呼び出しとなるため、複数のシングルなリクエストよりもより効率的です。
API Call | client.getBulk(keycollection) | ||
Asynchronous | no | ||
Description | Get one or more key values | ||
Returns | Map<String,Object> (
Map of Strings/Objects
) | ||
Arguments | |||
Collection<String> keycollection | One or more keys used to reference a value |
最初の形式では String
の
Collection
で取得するキーのリストを指定します。戻り値はキーとオブジェクトの
Map
となります。
例:
Map<String,Object> keyvalues = client.getBulk(keylist); System.out.printf("A is %s\n",keyvalues.get("keyA")); System.out.printf("B is %s\n",keyvalues.get("keyB")); System.out.printf("C is %s\n",keyvalues.get("keyC"));
返されるマップは元のリクエストのキーのうち、存在するエントリだけが含まれています。例えば、3つのキーに対する値をリクエストし、1つしか存在しなかった場合、結果のマップはkey/valueペアを1つしか含みません。
API Call | client.getBulk(keycollection, transcoder) | ||
Asynchronous | no | ||
Description | Get one or more key values | ||
Returns | Map<String,T> (
Map of Strings/Transcoded objects
) | ||
Arguments | |||
Collection<String> keycollection | One or more keys used to reference a value | ||
Transcoder<T> transcoder | Transcoder class to be used to serialize value |
getBulk()
メソッドの二つ目の形式では同様の
Collection
だけでなくカスタムトランスコーダの利用もサポートしています。
指定したトランスコーダはデータベースから取得した全ての値に対して利用されます。
API Call | client.getBulk(keyn) | ||
Asynchronous | no | ||
Description | Get one or more key values | ||
Returns | Map<String,Object> (
Map of Strings/Objects
) | ||
Arguments | |||
String... keyn | One or more keys used to reference a value |
getBulk()
メソッドの三つ目の形式では可変長引数としてデータベースから取得するキーを指定できます。
例えば、Collection
を利用した場合と同様の操作をこのメソッドで行う場合次の様になります:
Map<String,Object> keyvalues = client.getBulk("keyA","keyB","keyC"); System.out.printf("A is %s\n",keyvalues.get("keyA")); System.out.printf("B is %s\n",keyvalues.get("keyB")); System.out.printf("C is %s\n",keyvalues.get("keyC"));
返却される Map
は存在するキーのエントリだけが含まれます。存在しないキーは暗黙的に無視されます。
API Call | client.getBulk(transcoder, keyn) | ||
Asynchronous | no | ||
Description | Get one or more key values | ||
Returns | Map<String,T> (
Map of Strings/Transcoded objects
) | ||
Arguments | |||
Transcoder<T> transcoder | Transcoder class to be used to serialize value | ||
String... keyn | One or more keys used to reference a value |
getBulk()
メソッドの四つ目の形式では可変長配列とカスタムトランスコーダをサポートします。
カスタムトランスコーダの利用をサポートする他のメソッドの形式とは異なり、トランスコーダの指定は最後ではなく、先頭の引数で行います。
API Call | client.asyncGetBulk(keycollection) | ||
Asynchronous | yes | ||
Description | Get one or more key values | ||
Returns | BulkFuture<Map<String,Object>> (
Map of Strings/Objects
) | ||
Arguments | |||
Collection<String> keycollection | One or more keys used to reference a value |
非同期の getBulk()
メソッドは取得するキーの Collection
をサポートし、 返却される key/value
情報のマップを保持する BulkFuture
オブジェクト(spymemcached
パッケージの一部)を返却します。他の非同期メソッドと同様に、応答を待つ必要がないという利点があります。
BulkFuture
オブジェクトは標準の
Future
オブジェクトと比べるとわずかに異なる動作をします。Future
オブジェクトは返却された単一の値を返す一方、
BulkFuture
オブジェクトは返却された全てのキーを含むオブジェクトを返します。大量のキーを要求する非常に大きなクエリでは、オリジナルのリストに含まれる全てのキーを取得するために、複数のリクエストが必要になることを意味します。
例えば、次のコードは Collection
から可能な限り多くのキーを取得するでしょう:
BulkFuture<Map<String,Object>> keyvalues = membase.asyncGetBulk(keylist); Map<String,Object> keymap = keyvalues.getSome(5,TimeUnit.SECONDS); System.out.printf("A is %s\n",keymap.get("keyA")); System.out.printf("B is %s\n",keymap.get("keyB")); System.out.printf("C is %s\n",keymap.get("keyC"));
API Call | client.asyncGetBulk(keycollection, transcoder) | ||
Asynchronous | yes | ||
Description | Get one or more key values | ||
Returns | BulkFuture<Map<String,T>> (
Map of Strings/Transcoded objects
) | ||
Arguments | |||
Collection<String> keycollection | One or more keys used to reference a value | ||
Transcoder<T> transcoder | Transcoder class to be used to serialize value |
非同期の getBulk()
メソッドの二つ目の形式では返却する値に対してカスタムトランスコーダを利用できます。
API Call | client.asyncGetBulk(keyn) | ||
Asynchronous | yes | ||
Description | Get one or more key values | ||
Returns | BulkFuture<Map<String,Object>> (
Map of Strings/Objects
) | ||
Arguments | |||
String... keyn | One or more keys used to reference a value |
三つ目の形式は可変長引数を受けるメソッドと同じです(asyncBulkGet()
を利用したコレクションを参照)。操作が非同期に行われる点だけが異なっています。
API Call | client.asyncGetBulk(transcoder, keyn) | ||
Asynchronous | yes | ||
Description | Get one or more key values | ||
Returns | BulkFuture<Map<String,T>> (
Map of Strings/Transcoded objects
) | ||
Arguments | |||
Transcoder<T> transcoder | Transcoder class to be used to serialize value | ||
String... keyn | One or more keys used to reference a value |
asyncGetBulk()
メソッドのもう一つの形式は、引数としてカスタムトランスコーダとキーのリストをサポートします。