ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js と MongoDB は単純なログ分析を実装します system_node.js
最近のプロジェクトでは、分析を容易にするためにプロジェクト ログが JSON 形式で保存されました。以前はログをファイルに直接保存していましたが、良いタイミングでMongoDBが視界に入ってきたので、ログをMongoDBに保存しました。ログを保存するだけでは意味がありません。最も重要なのは、ログからビジネスの傾向やシステムパフォーマンスの抜け穴を発見することです。以前は、Java で作成され、Tomcat で実行される分析モジュールがありました。実装は非常に重量があり、新しいインジケーターを追加するプロセスも面倒で、NFS が原因で分析が失敗します。私はずっとそれを書き直したいと思っていて、最初は Ruby On Rails を使いたいと思っていましたが、学習して開発する時間がありませんでした (言い訳を探しています!)。杭州で開催された QCon 2011 で Node.js に再会しました。それについては以前から聞いていましたが、詳しくは勉強していませんでした。Taobao Su Qian 氏の講演を聞いた後、すぐに Node.js を使用することを思いつきました。このログ分析システムを導入します。フロントエンドも JS を使用し、サーバーも JS を使用し、データベース シェルも JS であることは考えてみれば素晴らしいことです。もちろん、最も重要なことはコード サイズが小さいことです。
1. Node.js を使用してサーバー側コードを実装します
優れたスタイルと高速なコード記述を実現するには、シンプルなフレームワークを採用することが避けられません。 Express はほとんどの機能を実装していますが、慣れるまでに時間がかかり、このプロジェクトにとっては少し重いように感じます。 Node.js の公式 Web サイトに チャット デモ があります。このコードは単純に移動され、URL の処理と JSON の返しをカプセル化します。そこで、fu.js を直接使用して、server.js を書き直しました。
var fu = require("./fu"),
sys = require("util"),
url = require("url"),
mongo = require("./request_handler");
fu.listen(Number(process.env.PORT || PORT), HOST);
fu.get("/", fu.staticHandler("index.html"));
シンプルすぎませんか? !しかし、それは事実であり、サーバーは確立されています。
リクエストを処理する request_handler.js コードを見てみましょう:
// ユーザーアクショントップ 10
fu.get("/userActionTop10", function(req, res){
mongodb.connect('mongodb://localhost:27017/log', function(err, conn){
conn.collection('action_count', function(err, coll){
coll.find({"value.action":{$in:user_action}}).sort({"value.count":-1}).limit(10).toArray(function(err, docs){
if(!err){
var action = [];
var count = [];
for(var i = 0; i
action.push(docs[i].value.action);
Count.push(docs[i].value.count);
}
res.simpleJSON(200, {action:action, count:count});
//データベース接続を忘れずに閉じてください
conn.close();
}
});
});
});
});
2. クライアント
ログ システムで最も重要なことは、視覚的な表示です。ここでは JQuery jqPlot Chart のプラグインが使用されます。まず、グラフィック表示用のコンテナとして静的 HTML ページを使用します: