システムのすべてのユーザーからWeb API検索機能を作成する必要があります。信頼できる辞書で検索
Qは、検索フィールドに入力した文字列のユーザーであるHTTP 1.1 GET http://sf.cluster:80/
Path /search/users?q=Aa&take=10
:(電話を使用して) クライアントは、エンドポイントを使用して要求を私に送信します。 take - 電話機が表示したい項目数。
私は信頼できる辞書にAzure Storage Tableの89000項目をアップロードしました。
public async Task<IEnumerable<UserInfo>> Search(string q, int take)
{
var usersDictionary = await GetUsersDictionary();
IEnumerable<UserInfo> results;
using (var tx = StateManager.CreateTransaction())
{
var searchResults = (from r in (await usersDictionary.CreateEnumerableAsync(tx)).ToEnumerable()
where r.Value.StartsWith(q, StringComparison.InvariantCultureIgnoreCase)
select new UserInfo()
{
Id = r.Key,
Name = r.Value
}).Take(take);
results = new List<UserInfo>(searchResults);
await tx.CommitAsync();
}
return results;
}
問題:
IReliableDictionary<Guid, string>
私の検索方法は、次のようになります。これは、構造を有し、それは携帯電話上での素敵な作品を、私は私が期待したものです。しかし、私のエンドポイントに多数の要求(約60スレッドが同時にSoap UIツールを使用して)を開始すると、タイムアウトが1秒から35秒に上がりました!どこかで間違いを犯したり、間違った検索方法を選択したようです。
誰かがこのような機能を実装していたのですか?誰でも正しい検索方法を手助けできますか?
UPD:私はList<string>
を名前で保存し、同じものをそれらの(リストを通して検索する)ステートレスサービスを実装しました。結果:150-300ms。