2012-01-03 9 views
0

特定のIPアドレスがアクションを実行できる速度を制限するために、IPアドレスごとにユーザーのレコードを格納する必要があります。IPアドレスのレコードを保存する(DB代替)

IPをデータベースに保存することはできますが、限られたリソースを持つ小さなVPSでは、MySQLプロセスが処理する電力が大きすぎると心配しています。 IP用のデータを格納する別の方法はありますか?

私はと同様のシステムを考えた:必要なデータを含む1.TXTファイルで

$ip_parts = explode('.', $_SERVER['REMOTE_ADDR']); 
$records = intval(file_get_contents('ips/' . implode('/', $ip_parts))); 

if($records > 50) { 
    echo 'Error - credits used.'; 
} else { 
    // Do something 
} 

/ips/ 
/ips/127/ 
/ips/127/0 
/ips/127/0/0 
/ips/127/0/0/1.txt 

サンプルコード。この方法がデータベースよりも遅くなるファイルやフォルダの数に問題が発生しますか?

+1

あなたのVPSについて心配しないでください - MySQLはこれには問題ありません。何度もやりました。 –

+0

... [SQLite](http://php.net/manual/en/book.sqlite.php)を使用すると、別のアプリケーションを実行する必要がなくなります。 – DaveRandom

+0

これがパフォーマンスの問題である場合は、はるかに大きな問題があります。 –

答えて

2

DBF最適化に関するServerFaultのthis question/answerを調べてください。特別な理由がない限り、ホイールを再開発しようとしています(MySQLをそのVPSで使用しない限り)。また、MySQLにIPアドレスを格納することについては、INET_ATOI()のMySQL機能を参照してください。

0

sqliteを試しましたか?それはうまくいくはずです。あなたがあなた自身のファイルベースのデータベースのスキームを構築する20年の経験を持つソフトウェアエンジニアによって、目的のためにソフトウェアのビルドよりも優れていると思わせる何か

http://php.net/manual/en/book.sqlite.php

+1

答えがOPの提案したものより良い解決策である理由、または利益が何であるかを説明しません。 –

3

?実際にファイルを保存したい場合以外は、MySQLデータベースを使用してください。そうしないケースはほとんどありません。

+0

私はMySQLが優れていることを疑うことはありません、私はそれが独自のメモリ要件を持つ追加のプロセスが必要であることを知っています。リソースが逼迫している場合、私は切り詰める方法を探します。 – jSherz

+0

何もしないプロセスは、ほとんどリソースを使用しません。 MySQLのリソースは、パフォーマンスを向上させるために行う価値があると判断したものです。それらはキャッシュや索引付けなどです。あなたの質問をより良くするすべての種類のもの。そしてそれによって、私はあなたに速い結果を与えるだけでなく、IOオーバーヘッドを減らすことによってハードドライブの作業負荷を減らすことを意味します。 – kba

1

ファイルシステムを使用することは無料ではなく、複数の点で白髪が多いこともあります。そのため、実際にデータベースを使用するよりも優れているかどうか懐疑的です。

つまり、ファイルやデータベースを使用するかどうかにかかわらず、ip2longとMySQLの同等語INET_ATONについて学ぶことが望ましいでしょう。特に、MySQLを使用すると、数値キーが文字列より効率的になる傾向があります。

+0

私は別のポストでip2longについて読んで、もし私がデータベースルートを下ったら、おそらくそれを使うでしょう。ありがとう。 – jSherz

関連する問題