2013-09-03 4 views
3

데이터를 빠르게 검색하는 데 사용하려는 응용 프로그램을 작성하기 시작했습니다.간단한 Redis .NET 응용 프로그램 속도 향상

ServiceStack.Redis에서 클라이언트를 사용하기 시작했습니다. 이 문제를 해결 내가 회사 데이터 레코드의 20K를 삽입하는 작은 테스트 응용 프로그램을 작성 (NuGet을 통해 알았어요)와 지금은 다음 코드를 사용하여이 일을 질의하고 있습니다 :

using (var companies = redisClient.As<Company>()) 
{ 
    var companiesFound = companies.GetAll().Where(x => x.CompanyName.Contains(searchString)); 
    dgvOutput.DataSource = companiesFound.ToList<Company>(); 
} 

내가 외모를 사용하는 회사 클래스를 like :

public class Company 
{ 
    public long Id { get; set; } 
    public string CompanyName { get; set; } 
    public string CompanyAddress { get; set; } 
    public string CompanyCity { get; set; } 
} 

이 모든 것이 잘 작동하지만 빠른 것은 아닙니다. 가능한 빨리이 일을 실행하기 위해 무엇을해야하는지 누군가도 나를 도울 수 있습니까? 색인? 다른 유형의 쿼리? LINQ를 사용하지 않는 것이 더 좋습니까?

+0

데이터 베 이스를 직접 쿼리 해 보셨습니까? 예인 경우 동일한 성능 문제가 있습니까? 쿼리가 오랜 시간이 걸리면 코드와 아무런 관련이 없습니다. – Dannydust

+0

예, 코드와 관련이 있습니다. 콘솔 앱은 훨씬 빠릅니다. 그래서 내 질문은, 내 회사 개체를 통해 검색하는 Redis를 수행하는 더 똑똑한 쿼리를 작성하는 방법입니다. – Tys

+0

흠, 제게는 회사의 모든 기록을 미리 가져 와서 필터링하는 것으로 보입니다. "enterprises.GetAll(). Where (...") GetAll() 호출이 필요합니까? – Dannydust

답변

4

이 설명서를 찾았습니다 : https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient 하지만 Linq Provider가 아닙니다.
회사를 필터링하는 방법을 찾지 못했지만 ID로만 하나 또는 모두를 얻을 수 있습니다.

저는 처음에는 모든 회사를 확보해야한다고 생각합니다. 그리고 응용 프로그램

companies = redisClient.As<Company>().GetAll(); 

을의 시작에 어쩌면, 응용 프로그램 캐시에 저장하고 당신이했던 것처럼 전에 당신은 Linq2Objects으로 목록을 필터링 할 수 있습니다 : 당신이 필요하면 내가 확실하지 않다

var companiesFound = companies.Where(x => x.CompanyName.Contains(searchString)); 
    dgvOutput.DataSource = companiesFound; 

ToList 호출.

누군가가 당신에게 더 나은 해결책을 제공하기를 바랍니다.

+0

나는 좋은 설명과 redis 클라이언트 unsing의 개요를 발견 : http://www.codeproject.com/Articles/388982/Document-Databases-A-look-at-them – Dannydust

관련 문제