一般的に、リクエストごとにクライアントをインスタンス化することは望ましくありません。クラスターに初めて接続する際のオーバーヘッドは簡単ではありません。したがって、バケットごと、アプリドメインごとに静的インスタンスを作成することをお勧めします。クライアントにはバケットアフィニティもあるため、クライアントを再インスタンス化せずにバケットを切り替えることはできません。
複数のバケットの構成については、http://www.couchbase.com/wiki/display/couchbase/Couchbase+.NET+Client+Libraryを参照してください。
上記のように複数のバケット構成セクションを作成する場合、メソッドは次のようになります。
private static Dictionary<string, CouchbaseClient> _clientDict = new Dictionary<string, CouchbaseClient>();
public IStoreResult Set(string key, object value, string bucketName, string bucketPassword = "")
{
if (! _clientDict.ContainsKey(bucketName))
{
_clientDict[bucketName] = new CouchbaseClient(bucketName); //assume this matches the config section name
}
return _clientDict[bucketName].ExecuteStore(StoreMode.Set, key, value);
}
私は実際にこのコードを実行していませんが、このようなものは機能するはずです。一致する構成セクションが必要になることを覚えておいてください。したがって、wikiの例を使用すると、辞書に「bucket-a」と「bucket-b」の2つのキーがあります。
クライアントの次のリリースでは、REST APIを介したバケットのクエリがサポートされますが、パフォーマンスに少し影響があります。これらのビットは、まもなくDeveloperPreview4として削除されるはずです。その場合、新しいCouchbaseClusterオブジェクトのListBucketsメソッドへの呼び出しを追加し、リターンリストでバケットを確認できます。そのバケットが存在する場合は、関連するCouchbaseClientをキャッシュできます。