まだはっきりしていないと思いますが、ファイルまたはmemcachedから物事を読み取る方が速いですか?どうして?
Memcachedの方が高速ですが、メモリには限りがあります。 HDDは巨大ですが、I/Oはメモリに比べて遅いです。 最もホットなものをmemcachedに配置する必要があり、他のすべてのをキャッシュファイルに移動します。
(または、人を増やして、 これらの人 :)のようなより多くのメモリにお金を投資します
一部のベンチマークについては、以下を参照してください。 キャッシュパフォーマンスの比較(ファイル、Memcached、クエリキャッシュ、APC)
理論的には:
Read 1 MB sequentially from memory 250,000 ns
Disk seek 10,000,000 ns
http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf
どちらか一方を支持する可能性のあるさまざまな側面がかなりあります。
ユースケースを見て、両方のアプローチのプロファイリングを行うことをお勧めします。あなたがファイルシステムの使用をやめることができれば、私はそうします。 memcachedを追加すると、複雑さと潜在的な障害点(memcachedクライアント/サーバー)の別のレイヤーが追加されます。
ディスクとメモリのパフォーマンスに関する他のコメントの価値については、ファイルシステムデータが定期的にアクセスされているかのように学術的である可能性があります。
「Faster」はコンテキストなしでは使用できません。たとえば、リモートサーバー上のmemcached内のデータへのアクセスは、ネットワークの遅延のために「遅く」なる可能性があります。一方、10Gbネットワークを介してリモートサーバーメモリからデータを読み取る方が、ローカルディスクから同じデータを読み取るよりも「高速」である可能性があります。
ファイルシステムでのキャッシュとmemcachedの使用の主な違いは、memcachedが完全なキャッシュソリューションであるということです。したがって、LRUリスト、有効期限の概念(データの鮮度)、cas/inc/dec/append/prepend/replaceなどの高レベルの操作があります。
Memcachedは簡単にデプロイおよび監視できます(ファイルシステムの「キャッシュ」ワークロードをカーネルなどとどのように区別できますか?キャッシュされたデータの総量を計算できますか?データ分散?容量計画など)。
cachelot のようなハイブリッドシステムもいくつかあります。基本的に、アプリケーションに直接埋め込むことができるのはmemcachedであるため、システムコールやネットワークIOなしでキャッシュにアクセスできます。
あなたは細部にひどく大げさです。そして、私はあなたが探している答えは状況に依存すると信じています。私の知る限り、常に他のものより優れている傾向があるものはほとんどありません。
明らかに、ファイルシステムの内容を読み取る方が速くはありません(ハードドライブであると仮定します)。 SDDでさえ、メモリ内の読み取りよりも著しく遅くなります。その理由は、HDD/FileSystemは速度ではなく容量を重視して構築されているのに対し、DDRメモリはその理由で特に高速であるためです。
優れたキャッシュとは、頻繁にアクセスされる部分をメモリに保持し、それほど頻繁にアクセスされない部分をディスク(永続ストレージ)に保持することを意味します。そうすれば、通常のケースは、キャッシュの実装によって大幅に改善されます。それがあなたの目標です。理想的なキャッシュポリシーを十分に理解していることを確認してください。それには、広範なベンチマークとテストが必要になります。
実際、メモリからの読み取りがHDDからの読み取りよりもはるかに高速であるほど簡単ではありません。ご存知のように、Memcachedはtcp接続に基づいています。sthを取得するか、sthをmemcachedサーバーに設定するたびに接続を確立すると(ほとんどのプログラマーがそうします)、ファイルキャッシュを使用するよりもパフォーマンスが低下します。静的なMemcachedオブジェクトを使用し、オブジェクトを再利用する必要があります。第二に、最近のOSは頻繁に使用されるファイルをキャッシュするため、ファイルキャッシュは実際にはTCP接続であるmemcachesよりも高速になる可能性があります。
キャッシュタイプ|キャッシュ取得/秒
配列キャッシュ| 365000
APCキャッシュ| 98000
ファイルキャッシュ| 27000 Memcachedキャッシュ(TCP/IP)| 12200
MySQLクエリキャッシュ(TCP/IP)| 9900
MySQLクエリキャッシュ(Unixソケット)| 13500
テーブルからの選択(TCP/IP)| 5100
テーブルからの選択(Unixソケット)| 7400
ソース:
https://surniaulula.com/os/unix/memcached-vs-disk-cache/
私の情報源の情報源:)
https://www.percona.com/blog/2006/08/09/cache-performance-comparison/
キャッシュがローカルに保存されているかどうかによって異なります。 Memcacheはネットワーク全体にデータを保存できますが、ローカルディスクよりも高速であるとは限りません。