1

次のような Set メソッドを提供するラッパー API を作成しています。

Set(string bucket, string key, object value)

必要なのは、提供されたバケットが利用できない場合です-デフォルトのバケットを使用する必要があります。それ以外の場合は、特定のバケットに保存します。

私が考えることができる 1 つの方法は、try...catch ブロック内で提供されたバケットを使用して CouchbaseClient をインスタンス化し、それが失敗した場合はデフォルトのバケットに格納することです。より良い方法はありますか?

4

1 に答える 1

1

一般的に、リクエストごとにクライアントをインスタンス化することは望ましくありません。クラスターに初めて接続する際のオーバーヘッドは簡単ではありません。したがって、バケットごと、アプリドメインごとに静的インスタンスを作成することをお勧めします。クライアントにはバケットアフィニティもあるため、クライアントを再インスタンス化せずにバケットを切り替えることはできません。

複数のバケットの構成については、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をキャッシュできます。

于 2012-09-06T21:42:18.213 に答える