4

サービス ファブリックの信頼できるディクショナリを使用して、残りのインターフェイスを介してクエリを実行する予定のデータを保存したいと考えています。これらのコレクションに保持されているデータをクエリするための最も最適なアプローチは何だろうと思っていました。

IReliableDictionaryドキュメントは、単にコレクションを列挙する以外に、インターフェイスのクエリをサポートする方法を提供していないようです。

信頼できる辞書からすべてのオブジェクトを取得し、クエリのために List<> コレクションにポップする唯一のオプションはありますか?

ありがとう

4

4 に答える 4

4

Vaclav が彼の回答で言及しているように、いつでも辞書全体を列挙し、必要に応じてフィルター処理できます。さらに、 特にIReliableDictionaryCreateEnumerableAsync(ITransaction, Func<TKey, Boolean>, EnumerationMode)のドキュメントをご覧ください。これにより、前もって列挙に含めたいキーをフィルタリングできます。これにより、パフォーマンスが向上する可能性があります (たとえば、ディスクから不要な値をページングすることを回避することにより)。

簡単な例 (簡潔にするために例外処理/再試行などを省略):

var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<int, string>>(new Uri("fabric:/myDictionary"));

using (var tx = this.StateManager.CreateTransaction())
{
    // Fetch all key-value pairs where the key an integer less than 10
    var enumerable = await myDictionary.CreateEnumerableAsync(tx, key => key < 10, EnumerationMode.Ordered); 
    var asyncEnumerator = enumerable.GetAsyncEnumerator();

    while (await asyncEnumerator.MoveNextAsync(cancellationToken))
    {
        // Process asyncEnumerator.Current.Key and asyncEnumerator.Current.Value as you wish
    }
}

キーに基づいて検索する REST クエリに対応する定型または動的キー フィルターを作成できます。独自のセカンダリ インデックスを作成するには、通知を使用します。

于 2015-11-21T00:20:08.343 に答える
0

こちらをご覧くださいIReliableDictionaryを検索する最良の方法は何ですか?

それを行うには2つの方法があります

  1. Eli Arbel は、Ix-Async へのブリッジを提供する Gist の非同期拡張メソッドと、Select、SelectMany、および Where の非同期実装を持っています。
  2. 単に非同期をラップする通常の IEnumerable で IAsyncEnumerable をラップできます。
于 2017-01-04T13:17:47.250 に答える