2

追跡システムを書きたいのですが、Mysql データベースに保存できるようになりました。しかし、アクセスする各 IP に関する情報を保存することは、mysql にとって大きな作業です。

ですから、情報をファイルに保存できれば、データベースとその問題についての議論はありません。

しかし、これを始めるには:問題なく読み取って詳細を表示できる方法でファイルに保存する方法が本当にわかりません

ファイルに保存した後、行内のすべての IP に関する情報を表示する必要があります

保存して行順に表示するにはどうすればよいですか ( 表 )

php/mysql

4

5 に答える 5

4

どのWebサーバーを使用していますか?使用できるロギングが組み込まれていませんか?

于 2010-03-21T11:54:24.263 に答える
3

このデータを自分でファイルに読み書きする方がデータベースよりも高速であると考える理由がわかりません。

あなたが本質的に言っていることは、データベースがやろうとしていることを正確に行うコードを書くことができるということですが、それよりも優れていますか?

ほとんどの人が私に同意すると思います。このデータベースを使用しないと、速度に大きな問題が発生します。

于 2010-03-21T11:31:22.397 に答える
1

あなたの質問を正しく理解できたかどうかわかりませんが、ログファイルを作成したいですか

本当にデータをファイルに保存する必要がある場合は、いつでもこのようなことを行うことができます

データをファイルに書き込むには、次のようにします。

$file = 'logfile.txt';

if(file_exist($file)){
    $fh = fopen($file, 'w');
}else{
    $fh = fopen($file, 'a');
}

$data = $dt."\t\t".$ipaddr."\t\t".$hostnm."\t\t".$referer."\t\t".$pg."\t\t".$pagetitle."\t\t".$dbi."\n";

fwrite($fh,$data);

fclose($fh);

ファイルからデータを読み取るには、データを array に保存するPHP file関数を使用します。次に、関連するデータの配列を検索できます。詳細については、http://php.net/manual/en/function.file.php を参照してください

于 2010-03-21T13:04:23.283 に答える
0

私は常にユーザーに関するすべてのデータをデータベースに保存します。高速に動作し、高価ではありません。ファイルにデータを書き込む方法はたくさんありますが、必要ですか? 違うと思う。

于 2010-03-21T13:38:35.343 に答える
0

サーバー自身のログをデータ ストアとして使用できない特別な理由はありますか? IIS または Apache の access_log を分解して、必要な情報を解析するのは簡単です。

アクセス ログの特定のサブセットのみに関心がある場合 (つまり、実際のページのヒットで、images/javascript/css/flash/その他のファイルは無視する)、それらの特定のヒットのみを解析できます。次に、その縮小されたデータセットを取得して、別のサーバー上の MySQL に詰め込みます。

その後、データベースは関連するヒット データを格納するのにはるかに適した場所です。データベースはデータ マイニングを実行し、汗をかくことなくすべてのグループ化/カウントを処理できるためです。数億のヒットを読み込み、IP ごとのデータを追跡しようとするとどうなるかを考えてみてください。インメモリ データ セットは急速に増大し、使用可能なメモリを超える可能性があります。データベースで合計/カウント/平均化などを行うと、そのようなすべての問題が処理されます。後で結果を解釈することについて心配する必要があります。

最適化のヒントとして、IP アドレスを varchar(15) ではなく符号なし整数フィールドとして保存します。それらは実際には32ビットの数値です。1 回限りの最初の ascii->numeric 変換のオーバーヘッドは、サブネット マスクなどを適用しようとしているときに、分析段階でヒットが繰り返されることに比べれば、まったく些細なことです。

INSERT INTO log (ip) VALUES (INET_ATON('10.0.0.1'));
于 2010-03-22T03:32:32.007 に答える