Habrのトップコメント-サービス、実装の詳細、および統計(C#)

少し前に、「ベストコメント」ページがHabrから削除されました(詳細はhabrahabr.ru/qa/18401 )。

それにもかかわらず、そこを見るのは面白かったです-そして、lulzのために、そして時々私がテープで見逃したものから面白い記事が出てきます。 だから私は私の小さなサービスをすることにしました。 政権が気にしないことを願っています。



現在のサービスURL: habrastats.comyr.com







最初の「バージョン」には、最後のN個の投稿の上位のコメントが表示され、2時間でLINQPadで記述され、1画面( pastebin )を占めました。 「オンデマンド」では、過去24時間の投稿(1秒あたり1〜2件の投稿のダウンロード速度)でも生成することは非現実的であることが明らかになりました。つまり、定期的な更新が必要です。 ここから、ホームマシンでサービスを有効にし(常にオン)、静的な結果を無料のホスティングにアップロードするというアイデアが生まれました。



簡単に実装について



コード: code.google.com/p/habra-stats

-C#のWindowsサービス(4.5、VS2012-新機能は使用されず、4.0でアセンブル可能)

-Regexpでの解析(そして、はい、私は知っています: regexHTMLを解析することはできませんが、できます)

-MS SQL Express + Entity Framework(非常に便利なORM)

-HTML生成用のXSLT(コーディングとcssはHabrから取得されました。管理者は再び私を許します)



2時間に1回、サービスが起動し、 habrahabr.ru / posts / collective / newページを解析し、最新の投稿のIDを受け取り、公開日がしきい値に達するまで(3日以上)、逆の順序で投稿をダウンロードします。 投稿は解析され、データベースに入れられます。

以前は、既存のすべての投稿がデータベースにロードされていました(2日間かかりました)。

次に、「レポート」がデータベースから生成されます。たとえば、「今日のベスト」、「写真のある最悪の月」などです。 レポートのデータは、XSLTによってシリアル化および変換されるCommentオブジェクトのコレクションです。 結果はFTP経由でホスティングにアップロードされます。



レポートを生成し、レポート間を移動するためのコツがあります。各フィルタリングメソッド(ZaDen、ZaNedelya、Best、Worstなど)には次の属性が付けられています。

[CommentReport(Category = "" , Name = " " , CategoryOrder = 0)]
      
      





Reflectionを通じて、このようなメソッドのすべての組み合わせをカテゴリに入れ、データベースからデータを取得し、ナビゲーションを生成します。 したがって、別の「レポート」(たとえば、「3日間」)を追加するには、属性を持つメソッドを追加するだけで十分です。 LINQ ロボットとEntity Frameworkへの栄光。



問題と解決策について少し



最初は、データベースを使用せずに、すべてをできるだけシンプルにすることを考えていました。生のHTMLをディスクに保存し、メモリにロードして、そこで処理します。 しかし、彼は災害の規模を過小評価していました。HTMLで15万件の投稿が10ギガバイト以上かかりました。 SSDでさえ、読み込み時間と解析時間は受け入れられません。



次に、SQL Compact Edition(インプロセスデータベース、エンティティフレームワークをサポート)を試しました。 データベースファイルのサイズが4GBに制限されました。 その時点では、重複した(非正規化された)データを持つコメントテーブルは1つしかありませんでした。 SQL Expressに切り替えた後、Postsテーブルを追加して重複を部分的に削除し、投票なしでコメントを削除しました(そのうち約30%でした)。 その結果、ベースのサイズは約2GBになりました。



解析プロセス中に、RegexOptions.IgnoreCaseを無謀に使用すると、パフォーマンスが数回低下することがわかりました。



いくつかの統計



データベースに記事を書くとき:

投稿90,619件

平均的な公開に関する18件のコメント(データベースに投票なしのコメントはありません)

肯定的な評価の15



合計1676593コメント

1日あたり721コメント



曜日ごとの平均コメント数





週ごとのコメント:時間のダイナミクス





最後にリンク!



ウェブサイト:

http://habrastats.comyr.com/



再度コード: code.google.com/p/habra-stats



計画中



前日の最高のRSS



PSより興味深いリクエストを提案する



PPSの有名なトピックに関するpornolabについての有名な解説は、出版物の著者がブロックされているため表示されません。

nForceによるコメントは、ここでコメントを見ることができます: habrahabr.ru/users/nforce/comments/page2



All Articles