2011-08-02 8 views
2

基本的に私はデータを取り込むためのXMLファイルを持っており、5分ごとにそれを更新するcron(in PHP)があります。しかし、同時に、私はこのファイルに常にアクセスしています(そして私は数千人のユーザーについて話しています)。phpファイルから同時に読み書きする

2millionのテキスト行を.txtファイルに書き込んで同時に読むと、もちろんfile_get_contents()が.txtファイルの現在のテキストを取得していて、それが終了するのを待たずに終了したら内容を取得します。だから、私がやったのは、一時ファイルに書き込んだ後、元の.txtファイルに名前を変更します。私のPCの名前変更プロセスは0.003秒(microtime()を使って計算されます)を要します。

これは適切な解決策だと思われますか、またはファイルが存在しないというエラーが発生するユーザーがいますか?

+4

を証明したいですか? – afuzzyllama

+0

XMLにはもちろんDBからのデータが入っています:) - 5分で私はそれらを1に減らすために何千ものDB呼び出しを持っています - 基本的には5分の結果をキャッシュします – hex4

+0

5分で数千dbコール完全に管理可能なように聞こえる。また、ラウンドトリップを防ぐためにキャッシュを追加することもできます。 – Gordon

答えて

2

もちろんこれは適切ではありません。ファイルをこの0.003マイクロ秒でロックする必要があります。

非常に単純な方法は、例えば

フラグで作成し交換した後

をisReplacingという名前のファイルが実行され、ユーザーがファイルをgetfile.php

に言いたいとき

をisReplacingファイルを削除


while(file_exists("isReplacing")) 
{} 
//NOW echo file_get_contents() 

//BETTER: 
if(file_exists("isReplacing")) 
{ 
     //GET DATA FROM DATABASE 
} 
else 
{ 
     //ECHO THE FILE 
} 

NOTEが、これはダムの方法ですが、私はちょうどあなたがデータベースを使用していないのはなぜ

+0

5分ごとにファイルを削除して再構築し、ファイルが存在しない場合は、DBからデータを取得するだけです。 – hex4

+0

ok私は答えを編集しました:D –

関連する問題