2016-04-11 11 views
1

私は20k〜30kファイルレジスタを単純なキーで保つ必要があります。 ファイルに保管しておく必要があります。他のインスタンスもそれを使用するためです。 次に、値を取得するための特定のキーを見つけ、キー:値をファイルに書き込む必要があります。 私は、以下の方法がより速く/より良いか、または良い方法であると考えているのだろうかと思っていました。phpでファイルを書き込んだり読み込むのにシステムコールを使うのは良いですか?

ファイルに書き込むためには、私はそれを行うには、約3の方法を知っている: 最初:

$fh = fopen('myfile.txt', 'a') or die("can't open file"); 
fwrite($fh, 'key:value'); 
fclose($fh); 

やシステムコールを使用しますfile_put_contents

file_put_contents('myfile.txt','key:value',FILE_APPEND); 

と第三とを。

exec("echo key:value >> myfile.txt"); 

そしてまた、行をファイルを読み、見つけるために行うことができます。 使用のfile_get_contents

$filename = 'info.txt'; 
$contents = file($filename); 
foreach($contents as $line) { 
$pos = strpos($line, $key); 
} 

システムコールでファイル

を使用して

$filename = 'info.txt'; 
$contents = file_get_contents($filename); 
foreach($contents as $line) { 
$pos = strpos($line, $key); 
} 

exec("grep $key | wc -l",$result); 
+3

php関数に固執する。そうすれば、あなたのコードは他のオペレーティングシステムに移植することができます。 –

答えて

1

あなたはすでにデータベースの使用を検討していたでしょうか?そうでなければあなたは車輪を再発明しているからです。データベースには、高速探索と行レベルのロックですべての利点があります。

ファイルを使用している場合は、自分でビルドする必要があります。

何らかの種類のデータベースに切り替えることを強くお勧めします。

ところで、値を置き換えるのか、単にファイルに追加するのかは言及していません。

+0

キー:値のため、基本的に検索と削除ができます。輸出が必要な場合、CSV輸出はそれをポータビリティにすることができます.Definitely、DBソリューションを検討する必要があります。すべての現在のwebapp(nodejs、rubyなど)はDBを読み取ることができ、dbからの読み取りはmsの単位で行われます。 – azngunit81

+1

これはコメントであって、回答ではありませんでした。 – Veve

+0

親愛なるマーク、ご意見ありがとうございます。 最初に:キーが存在する場合は、新しいタイムスタンプに置き換えられます。追加されない場合は、追加されます。 2番目:私の意見では、Imが単一のテーブルdbで動作する場合、リレーショナルクエリを実行していないのでファイルを使用することは同じですが、高速化する必要があります。どうか、これについてどう思いますか教えてください。ファイルの代わりにdbを使う良い/技術的な理由はありますか? – user2977753

関連する問題