01. はじめに データのクエリ速度を向上させるために、キャッシュがよく使用されます。キャッシュ容量には制限があるため、キャッシュ容量が上限に達すると、新しいデータを追加できるように、一部のデータを削除してスペースを確保する必要があります。キャッシュされたデータはランダムに削除することはできません。一般的に、特定のアルゴリズムに基づいてキャッシュされたデータを削除する必要があります。一般的な除去アルゴリズムには、LRU、LFU、FIFO などがあります。この記事では、LRU アルゴリズムについて説明します。 02. LRUの紹介 LRU は Least Recently Used の略です。このアルゴリズムでは、最も最近使用されたデータはホット データであり、次回も高い確率で再び使用されるとみなされます。最近ほとんど使用されていないデータは、次回も使用されなくなる可能性があります。キャッシュ容量がいっぱいになると、最近あまり使用されていないデータが最初に削除されます。 キャッシュの内部データが以下のようになっていると仮定します。 ここでは、リストの最初のノードをヘッド ノード、最後のノードをテール ノードと呼びます。 キャッシュを呼び出してキー = 1 のデータを取得する場合、図に示すように、LRU アルゴリズムはノード 1 をヘッド ノードに移動する必要があり、他のノードは変更されません。 次にkey=8のノードを挿入します。このときキャッシュ容量が上限に達しているため、追加する前にデータを削除する必要があります。各クエリはデータをヘッド ノードに移動するため、クエリされていないデータはテール ノードに移動します。テールのデータは最もアクセスが少ないデータであると考えられるため、テール ノードのデータは削除されます。 次に、データをヘッドノードに直接追加します。 LRU アルゴリズムの具体的な手順の概要は次のとおりです。
03. LRUアルゴリズムの実装 上記の例からわかるように、LRU アルゴリズムではヘッド ノードを追加し、テール ノードを削除する必要があります。リンクリスト内のノードの追加/削除の時間計算量は O(1) であるため、ストレージ キャッシュ データ コンテナーとして非常に適しています。ただし、通常の一方向リンク リストは使用できません。一方向リンク リストには、いくつかの欠点があります。
上記の問題は、他のデータ構造を組み合わせることで解決できます。 ハッシュテーブルを使用してノードを格納すると、ノードを取得する複雑さは O(1) に削減されます。ノード移動の問題は、前のノード情報を記録するための先行ポインタをノードに追加することで解決できます。これにより、リンク リストが一方向リンク リストから双方向リンク リストに変更されます。 要約すると、図に二重リンクリストとハッシュテーブルの組み合わせを使用したデータ構造が示されています。 2 つの「センチネル」ノードは双方向リンク リストに意図的に追加されており、データの保存には使用されません。センチネル ノードを使用すると、ノードを追加/削除するときに境界ノードが存在しないかどうかを考慮する必要がなくなり、プログラミングの難易度が軽減され、コードの複雑さが軽減されます。 LRU アルゴリズムの実装コードは次のとおりです。簡略化のため、key と val は両方とも int 型とみなされます。
04. LRUアルゴリズムの分析 キャッシュ ヒット率は、キャッシュ システムの非常に重要な指標です。キャッシュ システムのキャッシュ ヒット率が低すぎると、クエリがデータベースに逆流し、データベースにかかる負荷が増加します。 上記の分析と組み合わせると、LRU アルゴリズムの長所と短所がわかります。 LRU アルゴリズムの利点は、実装が難しくなく、ホット データの場合、LRU 効率が非常に優れていることです。 LRU アルゴリズムの欠点は、履歴データのバッチ クエリなどの不定期のバッチ操作では、キャッシュ内の人気データがこれらの履歴データに置き換えられ、キャッシュ汚染が発生し、キャッシュ ヒット率が低下し、通常のデータ クエリが遅くなる可能性があることです。 05. LRUアルゴリズムの改善 以下のソリューションはMySQL InnoDB LRU改良アルゴリズムから派生したものである。 図に示すように、リンク リストをホット データ領域とコールド データ領域の 2 つの部分に分割します。 改善後、アルゴリズムのフローは次のようになります。
時々実行されるバッチ クエリの場合、データは単にコールド データ領域に送られ、すぐに削除されます。よく使用されるデータ領域のデータは影響を受けないため、LRU アルゴリズムのキャッシュ ヒット率が低下する問題が解決されます。 その他の改良された方法には、LRU-K、2Q、LIRS アルゴリズムなどがあります。興味のある学生はぜひチェックしてみてください。 |
<<: PythonコードからAPPまで、必要なのは小さなツールだけ:GitHubには3,000以上のスターがある
情報の海の中で、価値ある洞察を見つけることが重要です。最新の情報管理は、高度なテクノロジーと革新的な...
[[387622]]ビジネスの世界が人々の想像よりも速く変化することは周知の事実です。この問題に対処...
[[322859]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
[[396585]]ビッグデータダイジェスト制作編纂者:朱克進DeepShake ネットワークのト...
製造強国戦略の徹底的な実行の重要な部分として、ロボット産業はますます多くの人々の注目を集めています。...
自動運転とは何ですか?自動運転とは、さまざまなセンサー、コンピュータービジョン、人工知能、機械学習な...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
世界で最も強力な AI - ChatGPT は、さまざまなテストに合格し、真偽を区別するのが難しい回...
2023 年には、AI、ML、特に GenAI があらゆるところに存在しますが、内容よりもパフォーマ...
6月28日、Unityは開発者向けAIソフトウェアマーケット「AI Hub」を正式に立ち上げ、AIソ...
[[265249]]新華社、上海、5月13日。AI技術の発展により、動画の顔を変える技術的ハードルが...
人間の子どもの最も基本的な運動知能、例えばつかむ、持ち上げる、あるいはキルトや衣服をたたむといった家...
IBMは最近、新たな企業投資ツールであるEnterprise AI Venture Fundを立ち上...