0

たとえば、RSS記事の政治家の名前と一致する「最良の」方法を見つけようとしています。名前は、NHibernateでアクセスされるデータベースに保存されます。例として:

ID名
--- ---------------
1デービッド・キャメロン
2ジョージ・オズボーン
3アリスター・ダーリング

これを書いている時点で、BBCの政治ニュースのRSSフィードには説明付きのアイテムがあります

バックベンチ保守党議員は、ジョージ・オズボーン首相に、英国の鉄道会社を停止するよう圧力をかけ、通勤運賃を最大11%引き上げました。

この記事では、ジョージ・オズボーンが言及されていることを検出したいと思います。これを行うにはいくつかの方法があることを理解しています。たとえば、最初にすべての政治家の名前を選択してコードで比較したり、NHibernateと同等のLIKEを実行したりします。

アプリケーション自体には数十のフィードがあり、最大で15分ごとにクエリが実行されます。明らかに速度、メモリ、スケーリングの問題があるので、推奨されるアプローチ(および該当する場合はNHibernateクエリ)をお願いしたいと思います。

4

2 に答える 2

1

コメントについて話し合っていたので、この問題にはもっと簡単なアプローチがあると思います。

  1. 政治家のリストを記憶に残してください。これらのエンティティは頻繁に更新されないため、このように作業しても安全です。有効期限ロジックを実装するだけで、遅かれ早かれデータベースから更新できます。
  2. ダウンロードしたフィードエントリごとforeach Name in Politicians FeedEntry.Content.Contains(Name)に、エントリをデータベースに保存する前に実行(またはそのようなもの)するだけです。

これで、複雑なクエリは不要になり、ソリューションのI/Oが少なくなります。

于 2012-08-22T12:51:22.790 に答える
0

次の行に沿って、フィードに一致する政治家を取得するために、正規表現または包含を使用します。政治家の名前とIDは、メモリ内の単純なコレクションにすることができます。

次に、フィードをmemcachedに保存するか、GUIDを使用してredis(dbでも可能)に保存できます。次に、関連するGUIDを、politician_id、feed_guidを保持するテーブルに保存します。

一部の統計では、politician_id、num_articles_writtenの集計であるテーブルを作成することもできます。ここで、num_articles_言及は1ずつ増加します。

必要に応じて、上記をトランザクションでラップできます。

于 2012-08-21T19:17:34.730 に答える