redis は分散データベース CAP の原理を説明します
推奨 (無料): redis
従来の ACID とは
A (原子性) 原子性
C (一貫性) 一貫性
I (分離) 独立性
D (耐久性) 耐久性
リレーショナルデータベースは次のとおりですACID ルール。英語のトランザクションは、現実世界のトランザクションと非常によく似ています。次の 4 つの特徴があります。
1. A (原子性) Atomicity
原子性これは理解しやすいです。つまり、トランザクション内のすべての操作が完了するか、何も行われません。トランザクションの成功の条件は、トランザクション内のすべての操作が成功することです。If 1 つの操作がある限り、失敗すると、トランザクション全体が失敗し、ロールバックする必要があります。たとえば、口座Aから口座Bに100元を送金する銀行振込は、1)口座Aから100元を引き出す、2)口座Bに100元を入金するという2つのステップに分かれます。これら 2 つのステップは同時に完了するか、同時に完了しないかのどちらかで、最初のステップのみが完了し、2 番目のステップが失敗した場合、理由もなく金額が 100 元減額されます。
2. C (一貫性) Consistency
一貫性も理解しやすいため、データベースは常に一貫した状態でなければなりません。 , トランザクションを実行しても、データベースの元の一貫性制約は変更されません。
3. I (分離) 独立性いわゆる独立性とは、同時トランザクションが互いに影響を与えないことを意味します
,データがトランザクションによってアクセスされるデータは、別のトランザクションによって変更されます。他のトランザクションがコミットされていない限り、そのトランザクションがアクセスするデータは、コミットされていないトランザクションの影響を受けません。たとえば、口座 A から口座 B に 100 元を送金する取引があります。取引がまだ完了していない場合、この時点で B が自分の口座を確認しても、新しく追加された 100 元は表示されません。4. D (耐久性) 耐久性
永続性とは、トランザクションがコミットされると、その変更がデータベースに永続的に保存されることを意味します
。ダウンタイムがあっても失われます。CAP
C:一貫性
A:可用性 P:パーティション許容値)または分散許容値
CAP理論的には、分散ストレージ システムでは、最大でも上記の 2 つの点しか達成できないことを意味します。
強い一貫性: たとえば、データに含まれるものはそのままです。 分散システム内のすべてのデータ バックアップは同時に同じ値を持ちます
。 (データの同じ最新コピーにアクセスするすべてのノードと同等)
可用性: たとえば、淘宝ダブルイレブンを使用しないことは不可能です。 クラスター内の一部のノードに障害が発生した後でも、クラスター全体は引き続きクライアントの読み取りおよび書き込みリクエストに応答できますか?。 (データ更新の高可用性)
パーティションのフォールト トレランス: 実際には、パーティション化は通信の時間制限要件と同等です。 システムが制限時間内にデータの一貫性を達成できない場合は、パーティションが発生したことを意味し、現在の操作では C と A のどちらかを選択する必要があります。
例: Taobao バッグ 強い一貫性を確保するために、このバッグの「いいね!」の数は 141 である必要がありますが、これは間違ってはいけません。正確なガイダンスが必要ですが、同時実行性が高い場合にデータの均一性を確保するのは困難です。 高可用性の場合:「いいね!」や表示数のエラーが許容されるなど、一貫性が弱い場合がありますが、Web サイトの麻痺を引き起こすことはありません。 。
そのため、ほとんどの Web サイト アーキテクチャでは AP が使用されます。弱い整合性と高可用性
Nosql の場合、
パーティション トレランスを達成する必要があります
現在のネットワーク ハードウェアでは遅延パケット損失などの問題が確実に発生するため、 パーティション トレランスを達成する必要があります。したがって、一貫性と可用性の間でトレードオフを行うことしかできず、これら 3 つの点を同時に保証できる NoSQL システムはありません。
CA 従来の Oracle データベース ほとんどの Web サイト アーキテクチャの AP の選択 CP Redis、Mongodb
一貫性と可用性のバランスをとってください。ほとんどの Web アプリケーションは実際には強い一貫性を必要としません。したがって、P のために C を犠牲にすることが、分散データベース製品の現在の方向性です。
一貫性と可用性の選択
Web2.0 Web サイトの場合、リレーショナル データベースの主な機能の多くは役に立たないことがよくあります
データベース トランザクションの一貫性要件
多くの Web リアルタイム システムでは、厳密なデータベース トランザクションは必要なく、読み取りの一貫性に対する要件は非常に低く、場合によっては、書き込みの一貫性に対する要件はそれほど高くありません。最終的な整合性を実現します。
データベースのリアルタイム書き込みおよび読み取りの要件
リレーショナル データベースの場合、データの一部を挿入してすぐにクエリを実行すると、確実にデータを読み取ることができますが、多くの Web データベースでは、たとえば、それほど高いリアルタイム性は必要ありません。たとえば、Weibo にメッセージを投稿した後、数秒後、場合によっては 10 秒以上後に購読者がこのニュースを目にすることはまったく問題ありません。
複雑な SQL クエリ、特に複数テーブル関連のクエリの要件
大量のデータを含む Web システムでは、複数の大きなテーブルに対する関連クエリや複雑なデータ分析は非常にタブーです。レポート クエリの種類、特に SNS タイプの Web サイトは、需要と製品設計の観点からこの状況を回避します。多くの場合、単一テーブルの主キー クエリと単一テーブルの単純な条件付きページング クエリのみが存在し、SQL の機能は大幅に低下します。
古典的な CAP 図
CAP 理論の核心は、分散システムは一貫性、可用性、およびパーティションのフォールト トレランスを同時に満たすことはできないということです。 3 つのニーズのうち、同時に満足できるのは最大 2 つまでです。
したがって、CAP 原則に従って、NoSQL データベースは 3 つのカテゴリに分類されます: CA 原則を満たす、CP 原則を満たす、AP 原則を満たす:
CA - シングルポイント クラスター、一貫性と可用性を満たすシステムは、一般にスケーラビリティが低くなります。
CP - 一貫性を満たし、パーティショニングを許容する必要があるシステム。通常、パフォーマンスはそれほど高くありません。
AP - 可用性、パーティション許容度を満たし、一般に整合性要件が低いシステム。
BASE
BASE は、リレーショナル データベースの強整合性と可用性の低下によって引き起こされる問題を解決するために提案されたソリューションです。
BASE は、実際には次の 3 つの用語の略語です。
基本的に利用可能
ソフトな状態
最終的に整合性のある
It この目的は、全体的なスケーラビリティとパフォーマンスを向上させることです。システムは、特定の時点でデータの一貫性に対する要件を緩和できるようにすることで、システムを保護します。なぜこのようなことが言えるのでしょうか? その理由は、地理的な分散と非常に高いパフォーマンス要件のため、大規模システムでは分散トランザクションを使用してこれらのインジケーターを完了できないことが多いためです。これらのインジケーターを取得するには、別の方法を使用して完了する必要があります。これが BASE です。この問題の解決策
分散クラスタの概要
分散システム
は、コンピュータ ネットワーク接続 (ローカル ネットワークまたは広域ネットワーク) を介した複数のコンピュータと通信ソフトウェア コンポーネントで構成されます。エリアネットワーク)。分散システムは、ネットワーク上に構築されたソフトウェア システムです。ソフトウェアの特性だからこそ、分散システムは高度な凝集性と透明性を持っています。したがって、ネットワークと分散システムの違いは、ハードウェアよりも高レベルのソフトウェア (特にオペレーティング システム) にあります。分散システムは、PC、ワークステーション、LAN、WAN などのさまざまなプラットフォームに適用できます。
簡単に言うと:
分散: 異なるサービス モジュール (プロジェクト) が複数のサーバーにデプロイされ、RPC/RMI を介して通信および呼び出しを行い、外部サービスとグループ内サービスを提供します。
クラスター: 同じサービス モジュールが複数の異なるサーバーに展開され、分散スケジューリング ソフトウェアを通じて統合スケジューリングが実行され、外部サービスとアクセスが提供されます。
以上がredis は分散データベース CAP の原理を説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redis指令を使用するには、次の手順が必要です。Redisクライアントを開きます。コマンド(動詞キー値)を入力します。必要なパラメーターを提供します(指示ごとに異なります)。 Enterを押してコマンドを実行します。 Redisは、操作の結果を示す応答を返します(通常はOKまたは-ERR)。

Redisを使用して操作をロックするには、setnxコマンドを介してロックを取得し、有効期限を設定するために有効期限コマンドを使用する必要があります。特定の手順は次のとおりです。(1)SETNXコマンドを使用して、キー価値ペアを設定しようとします。 (2)expireコマンドを使用して、ロックの有効期限を設定します。 (3)Delコマンドを使用して、ロックが不要になったときにロックを削除します。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

Redisは、メッセージミドルウェアとして、生産消費モデルをサポートし、メッセージを持続し、信頼できる配信を確保できます。メッセージミドルウェアとしてRedisを使用すると、低遅延、信頼性の高いスケーラブルなメッセージングが可能になります。
