2013-09-03 3 views
3

Я начал писать приложение, которое я хочу использовать для быстрого поиска по моим данным.Ускорение моего простого приложения Redis .NET

Я начал использовать клиента из ServiceStack.Redis. (Понял через NuGet) Вокруг этого я написал небольшую тестовую программу, чтобы вставить 20k компании записей данных и теперь я запрашивая эту вещь, используя следующий код:

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

Компания класса я использую внешний вид например:

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

Вы пытались напрямую запросить Databse? Если да, у вас такие же проблемы с производительностью? Когда запрос занимает много времени, он не имеет никакого отношения к вашему коду ... – Dannydust

+0

Да, я уверен, что это имеет какое-то отношение к моему коду. Консольное приложение работает намного быстрее. Поэтому мой вопрос заключается в том, как написать более разумный запрос, чтобы выполнить некоторые действия Redis в объектах моей компании. – Tys

+0

Хм, для меня кажется, что вы получаете все записи компании заранее, а затем фильтруете ее: "companies.GetAll(). Где (..." Вам нужен звонок GetAll()? – Dannydust

ответ

4

Я нашел эту документацию: https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient Но это не поставщик Linq.
Я не нашел способ отфильтровать компании, вы можете получить только один или один идентификатор.

Так что, я думаю, в начале вам нужно получить все Компании. И хранить его в кэше приложения, возможно, при запуске вашего приложения

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

, а затем вы можете отфильтровать список с Linq2Objects, как вы делали раньше:

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

Я не уверен, что если вам нужен ToList.

Надеюсь, кто-то даст вам лучшее решение.

+0

Я нашел хорошее объяснение и обзор отказа от redis Клиент: http://www.codeproject.com/Articles/388982/Документ-БД-A-смотреть-на-их – Dannydust