1. 背景
SQL ステートメントを分散キャッシュのキーとして使用する必要があります。
ただし、そうするとキーが長くなりすぎます。長すぎるキーにはいくつかの欠点があります。
ただし、キーが長すぎるという問題も解決できます。
この記事では、キーが長すぎる場合の欠点と解決策について詳しく説明します。皆様のお役に立てば幸いです。
2. キーが長すぎるデメリット
一般的に言えば、SQL はキーとしては長すぎるため、多くの欠点があります。
- キーが長すぎると、より多くのメモリ スペースが必要になり、キャッシュの効率とヒット率が低下します。
- キーが長すぎると、ネットワーク転送のオーバーヘッドが増加し、キャッシュの応答速度とスループットに影響します。
- キーが長すぎると、データの断片化が不均一になり、キャッシュ サーバー間の負荷差とデータ移行のコストが増加します。
- キーが長すぎると、削除、更新、監視などの操作など、キャッシュの管理とメンテナンスが困難になります。
したがって、合理的なキー設計仕様を使用し、長すぎる、または不要なプレフィックス、サフィックス、セパレータなどの使用を避けることをお勧めします。
3. ソリューション
3.1 ハッシュ (競合を解決するため)
ハッシュ アルゴリズム (MD5、SHA-1 など) を使用して、SQL ステートメントをキャッシュ キーとして固定長の文字列に変換できます。この方法により、キーの長さを短縮し、占有するキャッシュ スペースを削減し、検索効率も向上させることができます。
ただし、ハッシュ アルゴリズムに競合が発生する可能性があるため、キャッシュ キーの一意性に注意する必要があります。
競合によって引き起こされる一意性の問題を解決するにはどうすればよいですか?
- 異なるテナント、ストア ID、コードなどのプレフィックスをキー プレフィックスとして追加すると、競合の可能性を大幅に減らすことができます。
- 値の構造をカスタマイズできます
(1) 二次確認のために SQL を Value オブジェクトに格納します。
(2) 元の値が単一のオブジェクトである場合、コレクションとして定義できます。
ハッシュ値をキーとして値を読み取る場合、現在の Sql と Value に格納されている SQL が一致しているかどうかを比較します。
一貫性がある場合は、ハッシュの競合がないことを意味し、一貫性がない場合は、ハッシュの競合があることを意味し、新しい値をコレクションに入れ、コレクションをトラバースして、読み取り時に対応する値を取得できます。
擬似コードは次のとおりです。
public class Value{
String sql;
Object value;
}
public class CacheValueWrapper{
// 不冲突时存这里
Value value;
// 冲突时存这里
List<Value> values;
Value getValue(String sql){
// 先匹配 value
// 再匹配 values
}
}
3.2 ステートメントのマッピング (一意の値に変換)
テーブルのユニークキーの特性を利用できます。
SQL 文字列、ビジネス コード (ビジネス ID) を含む新しいマッピング テーブルを作成します。
SQL | ID |
---|---|
select * from user where id=21 | 10086 |
id=22 の生徒から名前、年齢を選択 | 10087 |
ビジネス コードまたはビジネス ID は、データベースの自己インクリメントまたは分散 ID ジェネレーターの機能を使用できます。
一意のキーとして設定された SQL 文字列。
最初に SQL を介してクエリを実行します。直接使用する場合は、そのような SQL 値がテーブルにない場合は挿入します。
次に、対応するビジネス コードまたはビジネス ID をキャッシュ キーの重要な部分として使用できます。
キャッシュキー: some_biz_prefix_10086
4.まとめ
この記事では、キーが長すぎるという問題を解決するためのいくつかのアイデアを提供し、同様の問題に遭遇した学生を刺激することを望んでいます.
創作は簡単ではありません. この記事が役に立ったら, いいね!, ブックマーク, 注目してください. 皆様の応援と激励が創作の最大の原動力です.
私のナレッジ プラネット、ナレッジ プラネット ID: 15165241 に参加して、一緒にコミュニケーションを取り、学びましょう。
https://t.zsxq.com/Z3bAieaは、CSDN から申請時にマークされます。
AI と私に質問できる Slack ワークスペースへようこそ。
https://join.slack.com/t/ai-yx51081/shared_invite/zt-1t8cp1lk3-ZMAFutZcN3PCW~8WQDGjPg