php エディター Zimo が、KV ストアのキーロックの秘密を公開します。 KV ストアでは、キー ロックは一連の複雑なアルゴリズムとテクノロジーを通じて実現されます。まず、システムはキーごとに一意の識別子を生成し、対応する値とともにデータベースに保存します。同時に、システムはハッシュ関数を使用してキーを暗号化し、セキュリティを確保します。さらに、システムはアクセス制御リスト (ACL) を使用してキーへのアクセスを制限し、許可されたユーザーのみが読み取りおよび書き込み操作を実行できるようにします。これらのセキュリティ対策により、KV ストアはキーのセキュリティと信頼性を確保し、安全で信頼性の高いデータ ストレージ サービスをユーザーに提供します。
分散システムと同時実行性について詳しく学ぶために、分散 kv ストアを構築しています。私が構築している kv ストレージの実装は完全にトランザクション対応であり、インメモリ トランザクション ログを備えています。物事をシンプルにするために、ストレージも完全にメモリ内にあります。 API は、get
、insert
、update
、remove
を公開します。すべてのエンドポイントは、一連のキーではなく、単一のキーで動作することに注意してください。
私はロックを通じて同時実行性を管理しています。ただし、データ ストア全体をロックするグローバル ロックがあります。 k2
の更新中に k1
の値を読みたい場合、それは関係ありませんが、k2 の更新が完了するまで待たなければならないため、これは非常に非効率的に思えます。
一部のデータベースでは、よりきめ細かいロックが使用されていると思います。たとえば、mysql サーバーには行レベルのロックがあります。キーレベルのロックを実装するにはどうすればよいですか?
###私は持っている### リーリー次のようなものを追加する必要がありますか? :
リーリーこれを行う場合、問題は、
locks と store
の同期を維持する必要があることです。別のオプションは 2 つのマップをマージすることですが、その場合でも、remove
リクエストが get
より前に来ると、ロック中に remove
リクエストがマップ内のエントリを削除することになります。 ###問題。 ソリューション
強力な一貫性とは、読み取り操作がどこで実行されたかに関係なく、データベースからのすべての読み取りで最新の書き込みが返されることを保証するプロパティを指します。言い換えれば、強力な一貫性は、すべてのクライアントが同じデータを参照できること、およびデータがシステム全体で最新で一貫性があることを保証します。
paxos や raft などのコンセンサス アルゴリズムを使用して、強力な一貫性を確保できます。データを保存するときに、データのバージョンを保存し、それを paxos の ID として使用できます。
KVストレージをロック
キー/値 (kv) ストアでは、通常、ミューテックスやリーダー/ライター ロック (@paulsm4 が提案したように) など、ある種のロック メカニズムを使用してキーがロックされます。これにより、データの一貫性と正確性を確保しながら、複数のスレッドまたはプロセスが kv ストア内のデータに同時にアクセスして変更できるようになります。
kv ストレージでキーをロックする方法の具体的な詳細は、kv ストレージの実装によって異なる場合があります。一部の KV ストアでは、データ ストア全体をロックするためにグローバル ロック (すでに行っているように、非効率な場合があります) を使用する場合がありますが、他の KV ストアでは、行レベルのロックやキーレベルのロックなど、よりきめの細かいロック メカニズムを使用する場合があります。より多くの操作を許可します。データへの同時アクセス。
ということで、tldr; 概念的には、あなたの言う通りです。問題はロックの実装の詳細にあります。
###コーディング###ロックに関する質問に厳密に答えるには、@paulsm4 が提案した
リーダー/ライター ロックを検討してください。 golang では、同様のロックは
です。 同期に使用されます。地図######。###
これは短い例です:
リーリー
これに加えて、レプリカ間の一貫性を確保するために paxos が必要です。
以上がKV ストアのキーはどのようにロックされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。