1

私が最後に php に手を出したのは 2004 年にさかのぼります。スクリプトがファイルを読み取り、インクリメントし、書き戻すカウンタを作成することが許容されていた当時の nukephp の時代です。当時、私がこれらのタイプのスクリプトを書いたとき、ファイルをロックし、ロックを取得できない場合に次のリクエスト die() を行うことについて心配していませんでした。

今、私は。そして、私はあなたの多くがそうであると確信しています。では、現代の Web 開発者はこの問題にどのように対処しているのでしょうか? それに対する新しい体系的なアプローチはありますか?私の知る限り、Ajax自体はこれに対処する方法を提案していません。サーバーが2つの個別の値で同時にファイルを更新するように要求する2つのクライアントを処理する方法については何もないようです。

いずれにせよ、メカニズム、モデル、パターン、アーキテクチャーなど、PHP の世界には、かつて私が以前の時代に持っていたと感じていた原子性という幻想だけではなく、元に戻すことができるものはありますか? stackexchange/utube コメントなどの Web サービスをより現代的に作成したい場合、関与すべきリソースはありますか?

編集: ロックレス通貨を提供し、トランザクションの調整を処理するためにデータベースに依存せず、ファイル システム上のデータを処理できるもの (このデータは構造化されていません、データベースに存在する必要はありません)。

4

1 に答える 1

1

うーん...あなたにそれを壊すのは嫌いですが、「ロックレスの同時フラットファイル更新」を求めることは、地獄でアイススケートをしている空飛ぶ豚を見つけようとするようなものです.

解決策であるlock filesは、過去 8 年間変更されておらず、今後も変更されることはありません。それは基本です。ロックまたはデータベースを使用します。データに構造がないことは問題ではありません。おそらくすでにデータベースを使用しているので、どこかにテーブルにフィールドを作成するか、より堅牢な構造を作成して、データをより深く掘り下げることができます。任意の日付以降のすべてのヒットを集計するだけです。

TABLE Articles
  ID INT PK
  ...

TABLE Viewcount
  Date        DATE  PK
  Article_ID  INT   PK
  NumViews    INT

INSERT INTO Viewcount (Date, Article_ID, NumViews)
  VALUES(TODAY(), 12345, 1)
  ON DUPLICATE KEY UPDATE NumViews=NumViews+1

注意として、C のようなコンパイル済み言語を使用している場合は、デーモンを記述してそのファイルに座ってインクリメントすることができますが、基本的にはロック ファイルを RAM のどこかにある bool に移動するだけです。

于 2013-01-08T16:23:12.833 に答える