そして、その高い性能特性へのキャッシュの並行性は、広くプロジェクトで使用されています。図は、バッファ処理を読み取る以下の通りであります:
デュアル書き込み一貫性は、次の3つの要件があります。
- キャッシュはダーティデータを読み取ることができません
- キャッシュは古いデータを読み取ることがありますが、最終的には一貫性の許容時間内に達成するために
- できるだけ小さな許容時間
特定の矛盾が発生しないことを確認するように応えるために、上記の3つは、行くためにメモリ・キューに要求シリアライズされた文字列を読み書きするために使用することができます。しかし、直列化した後、それは、通常の状況下では、オンライン要求をサポートするために、マシンの数倍以上を使用するようになり、システムのスループットの大幅な減少につながります。
だから、ここで、我々は3つの一般的な方法について説明します。
- データベースを更新し、キャッシュを更新するには
- キャッシュを削除し、データベースを更新
- データベースを更新し、キャッシュを削除するには
1.まず、データベースを更新し、キャッシュを更新
以下の2点に焦点を当てたので、このアプローチは、一般的に、すべての人に反対されています。
理由1:安全性の観点を通します。
要求A及びB更新操作要求が、そこになりつつ。
- データベースの更新スレッド
- スレッドBは、データベースを更新します
- スレッドBはそのキャッシュを更新します
スレッドAは、キャッシュ更新
キャッシュを更新Bよりも早く魚を要求すべきキャッシュを更新する要求に登場したが、ネットワークやその他の理由から、Bは、以前のキャッシュよりも更新されます。これは、ダーティデータにつながり、そのためと考えられていません。「最初は、キャッシュを更新し、データベースの更新」このスキーム同じトークンは、ダーティデータによって引き起こされ、それが考慮されていません
理由2:ビジネスシナリオの視点。
以下の2点があります。
- あなたはより多くのデータベースのシナリオを書き、そしてシーンは基本的にデータを読んでいないにつながる、このプログラムを使用して、比較的小規模のビジネスニーズ、あるデータを読んでいる場合は、キャッシュは、頻繁に廃棄物の性能が更新されます。
- データベースの値を書き込む場合は、直接キャッシュを書きますが、複雑な計算を再書き込みキャッシュのシリーズを通過しません。それぞれが、データベースへの書き込みの後にそう、計算された値は、再びキャッシュにパフォーマンスのは間違いない廃棄物を書かれています。明らかに、キャッシュを削除することがより適しています。
あなたがキャッシュを更新する必要がある場合は、キャッシュデータは、バージョン番号を増加することが考えられます
2.キャッシュを削除し、データベースを更新
プログラムはまた、矛盾につながります。要求A及びB更新操作要求が、そこになりつつ。
- キャッシュを削除、書き込み要求
- B要求の問い合わせは、キャッシュが存在しないました
- 古い値を取得するには、データベースを照会するB要求
- Bは、書き込みキャッシュの古い値を要求します
- 上記の状況のデータベースに書かれた新しい値の要求は矛盾につながります。キャッシュポリシーの有効期限を設定するために使用されていない場合はさらに、データは常に汚れています。
ソリューション:
- キャッシュを削除します
- 書き込みデータベース(この2つのステップは、元のように)
- 一定期間(例えば、1秒又は200ミリ秒)をスリープ、再びキャッシュを削除します。そのためには、キャッシュダーティデータを再び削除することができます。
しかし、休止状態のスレッドのために、この解決策はまだ非常にスループットに影響を及ぼしています
3.最初の更新のデータベース、およびキャッシュを削除します
このアプローチは、多くのエンジニアリングソリューションで使用されている、我々は特定のセキュリティかどうかを見てください。
、2つの要求があり、クエリの動作Aを行うための要求を仮定し、B更新操作を行うための要求、その後、事態が生成されます。
- キャッシュだけ失敗
- データベースを照会する要求は、古い値でした
- Bは、データベースに書かれた新しい値を要求します
- キャッシュを削除するB要求
- 見つかった書き込みキャッシュの古い値への要求
このように、ダーティデータが発生、しかし、このような状況は、そのデータベース内の書き込み要求より高速読取り要求よりも仮定することです。書き込み動作時よりも実際には、プロジェクトデータベースにおける読み出し動作の速度が非常に速いです。
いずれかまたは2PCプロトコルによるパクシは、一貫性を保証し、または2PCを考慮すると、あまりにも複雑で、パクシ、遅すぎる、Facebookは番目のオプションを選択したためか、同時汚いの確率を低減する方法を見つけることです。
あなたはキャッシュを削除した場合には、どのように行うことができませんか?
binlogのサブスクリプションデータベースを購読するプログラムを起動し、アクセスデータを操作する必要があります。アプリケーション、プログラムから他の、このサブスクリプション・プログラムからの情報へのアクセスでは、キャッシュ操作を削除します。
アリオープンソースのミドルウェア運河は、関数はバイナリログログを購読満たすことができます。
概要
この記事では、私はあなたが何かを得る願って、一貫性のあるプログラムの要約されているインターネットで現在利用可能です。
最後に、私の経験は限られたレベルに制限され、読者は歓迎貴重な提案や意見のテキストのコメントがあります。あなたはより多くのリソースを取得したり、一緒に多くの技術の愛好家の交流を勉強したいしたい場合は、私は公共の数に焦点を当てることができ、「自然食品エンジニアXiaohui、」背景キーワードは、フロントとバックエンド技術交換基に、学習教材を受け取り、プログラマ返信副業グループ。為替で735 764 906:プログラマは、グループ副業Qグループに参加することができます。