시스템의 모든 사용자를 통해 웹 API 검색 기능을 만들어야합니다. (전화를 사용) 클라이언트 나 엔드 포인트를 사용하는 요청 보냅니다신뢰할 수있는 사전을 통해 검색
Q가 검색 필드에 입력 한 문자열 사용자입니다HTTP 1.1 GET http://sf.cluster:80/
Path /search/users?q=Aa&take=10
. 테이크 - 휴대 전화에 표시 할 항목 수.
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. 상태 (상태있는 서비스의 상태)에 List를 저장하고 요청시 가져와야하는 것처럼 보입니다.