1

フラットファイルを使用してリアルタイムの訪問/クリックカウンターデータを保存する方が優れて高速であると常に確信していました。ファイルを追加モードで開き、ロックし、データを配置してから閉じます。次に、このファイルを crontab で 5 分に 1 回読み取り、コンテンツを DB に保存し、新しいデータ用にファイルを切り捨てます。しかし今日、私の友人は私に、それは間違った方法だと言いました。永続的な MySql 接続を確立し、クリックするたびにデータを DB に書き込むことをお勧めします。まず、DB は結果をメモリ テーブルに格納できます。第二に、ディスク上にあるテーブルに保存しても、このファイルはそれによって永続的に開かれるため、ディスク上で検索してクエリごとに何度も開く必要はありません。

あなたはそれについてどう思いますか?

UPD: 1 日あたり約 100 万の高トラフィック サイトについて話しています。

4

2 に答える 2

1

トランザクションなしでデータベースを使用すると、ファイルを使用するのと同じ基本的なパフォーマンスが得られ、信頼性が高く、コーディングが少なくなります。

データベースへの書き込みが重いのは事実です。たとえば、DB が別のサーバー上にあるためにネットワーク トラフィックが発生している可能性があります。または、すべての書き込みに少なくとも 2 回の書き込みがあるトランザクション DB である可能性があります (インデックスがしかし、これらすべてを認識していれば、DB を使用して、他の人が何十年にもわたって行ってきた作業を利用して、プログラミング作業を簡単にすることができます。

于 2013-11-10T00:13:54.890 に答える
1

あなたの友人は正しいです。ファイルに書き込み、次にcronjobを5分ごとにデータベースに送信しますか? それは非常に複雑に聞こえます。DB に直接書き込まない正当な理由は想像できません。

また、説明した方法でファイルに書き込むと、操作がシリアル化されます。ユーザーは、書き込みを行う前に、他のユーザーがロックを解除するのを待つ必要があります。必要になったとしても、それは単純に拡張できません。常に同じ行に書き込む場合、DB でも同じことが起こりますが、同じ値に対して複数の行を作成し、ランダムな行に書き込み、合計が必要なときにそれらを合計することができます。

この場合、メモリ テーブルを使用してもあまり意味がありません。データを永続化する必要がない場合は、おそらく既にどこかにある memcache を使用して、キーの値を単純にインクリメントする方がはるかに簡単です。

于 2013-11-09T21:26:24.687 に答える