私が正しく理解していれば、データベースよりもファイルからデータを取得する方がはるかに安価です。では、なぜMySQL は、などSELECT
を使用するたびに作成または更新されるファイルからデータを取得しないのでしょうか? セキュリティ上の問題がある理由はありますか?UPDATE
INSERT
DELETE
6 に答える
自問してみてください:データベースとは何ですか? これは、何らかの形でデータをどこかに保存し、再び取得できるようにするプログラムです。データベースは、このデータをファイルに保存するだけでなく、舞台裏で、何らかの形で、どこかに保存します。通常、MySQL はデーモンとして実行されます。そのデーモンに連絡して、データを要求します。そのデータがどこから来るかは完全に MySQL 次第です。多くの場合、このデータは RAM から取得されます。これは、ファイルを開いてそこから読み取るよりもはるかに安価です。データがまだ RAM にない場合は、ファイルから取得します。
したがって、あなたの質問は見当違いです。MySQLは、ある時点でファイルからデータを取得します。とはいえ、必ずしも「はるかに安い」とは限りません。データをRAMに保持するデータベースから取得する方が安い場合とそうでない場合があります。
おそらく、MySQL Query Cache について詳しく知りたいと思われるかもしれません: http://dev.mysql.com/doc/refman/5.1/en/query-cache.html
MySQL は通常、デフォルトでクエリ (クエリ キャッシュ) にいくつかのキャッシュ メソッドを使用しています。もちろん、そのキャッシュはメモリに保存されます;)
MySQLのほかに、基本的にファイルからデータを取得しています(テーブルエンジンによっては、データベース全体が単一のファイルになる場合があります)。
ソース: http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html
MySqlをリレーショナルデータベースとしてではなくドキュメントストアとして使用している場合は、「file_get_contents( "123.data")」と記述した場合、「id=123の場所から*を選択する」という権利がより速くなる可能性があります。
MySqlをデータベースとして使用している場合は、「「%doe%」のような名前が「すべてのファイルを開く」になるものから*を選択し、名前フィールドをチェックします。一致する場合は、結果に追加します。些細な量のデータははるかに遅くなります。さらに、phpでリレーショナルデータベースを作成する場合、結合のような操作は頭痛の種になります。
もちろん。ただし、MemcacheまたはAPCを使用する必要があります。これにより、有効期限を設定できます。それだけでなく、たとえば管理パネルで何かを更新する場合、次のロード時にそのコンテンツを更新するために指定した特定のキーを削除できます(DBを押して、次の更新または期限切れになるまで保存します)
データベースではなくファイルからデータを取得するのは安くはありません。データベース内のデータもファイルに保存されますが、最適化された方法で保存されるため、取得ははるかに高速です。ここでは、ファイルとデータ ソースが同じマシンにあると考えています。どちらの場合も、取得は I/O バウンドです。
適切にキャッシュしたい場合は、APC または Memcached、あるいはその両方を使用する必要があります。APC はローカル キャッシュ (アプリケーション構成、言語定数などの保存) として使用できますが、memcached は別のキャッシュ (ユーザー情報、セッションなど) として使用できます。
また、MySQL クエリ キャッシュを使用することもできますが、これは、適切な書き込み負荷の高いアプリケーションを使用している場合にはお勧めできません。さらに、クエリ キャッシュ ミューテックスを待機しているためにアプリケーションへの書き込みが多すぎる場合、クエリ キャッシュがクエリを停止させる可能性があります。