3

データをすばやく検索するために使用するアプリケーションの作成を開始しました。

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>();
}

私が使用する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 を使用しない方がよいでしょうか。

4

1 に答える 1

4

このドキュメントを見つけました: https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient しかし、これは Linq プロバイダーではありません。
企業をフィルタリングする方法が見つかりませんでした。ID ですべてまたは 1 つしか取得できません。

ですから、最初はすべての会社を取得する必要があると思います。そして、おそらくアプリケーションの起動時に、アプリケーションキャッシュに保存します

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

そして、以前と同じように、Linq2Objects を使用してリストをフィルター処理できます。

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

ToList 呼び出しが必要かどうかはわかりません。

うまくいけば、誰かがより良い解決策を提供してくれます。

于 2013-09-05T10:36:20.247 に答える