分散KV-1スタンドアロンKVの実装

分散KV-1スタンドアロンKVの実装

[[437220]]

この記事はWeChatの公開アカウント「roseduanの執筆場所」から転載したもので、著者はroseduanです。この記事を転載する場合は、roseduanが執筆しているローカルの公開アカウントまでご連絡ください。

多くのコードフレームワークが提供されており、特定のロジックを記入するだけで済む、シンプルな分散 kv を実現することを目的としています。

このコースは 4 つのプロジェクトに分かれています。

  • スタンドアロンKV
  • ラフトKV
  • マルチラフトKV
  • 取引

KV のスタンドアロン バージョン、ラフト (およびマルチラフト) コンセンサス アルゴリズムに基づく KV、および分散トランザクションを備えた KV を実装する必要があります。難しくない最初のスタンドアロン KV を除いて、他のプロジェクトは手書きのラフト アルゴリズムと分散トランザクションを伴い、非常に困難です。

もちろん、このコースは分散ストレージの分野を始めて実践するための優れた学習リソースでもあるので、自分の学習プロセスを記録してください。

今日の記事では、最初のプロジェクトについて見ていきます。

最初のプロジェクトは、Badger を統合して、シンプルなスタンドアロン kv を実装することです。

Badger は、LSM ツリーに基づく優れたオープン ソースのスタンドアロン kv ストレージ エンジンであり、優れた読み取りおよび書き込みパフォーマンスを備えています。したがって、Badger の使い方をよく理解しておく必要があります。公式の例を参照できます: github.com/dgraph-io/bager。

TinyKV では、ストレージ層は、ラフト ストレージ、メモリ ストレージ、スタンドアロン ストレージを実装する抽象インターフェイスです。ここでは、スタンドアロン ストレージを実装するだけで済みます。

具体的な実装は、kv/storage/standalone_storage/standalone_storage.go にあります。 Badger をカプセル化してから、ストレージ インターフェイスで定義されたいくつかのメソッドを実装する必要があります。

構造の定義は次のとおりです。

  1. タイプStandAloneStorage構造体{
  2. // ここにあなたのデータを入力してください (1)。
  3. バッジャDB *バッジャ.DB
  4. オプション アナグマ.オプション
  5. }

Reader メソッドでは、StorageReader インターフェイスを返す必要があることに注意してください。これは抽象的なインターフェースであり、特定のロジックをカスタマイズする必要があります。

  1. func (s *StandAloneStorage) Reader(ctx *kvrpcpb.Context) (storage.StorageReader, error) {
  2. // ここにコードを記述します (1)。
  3. トランザクション:= s.badgerDB.NewTransaction( false )
  4. リーダー:= NewStandaloneReader(txn)
  5. リーダーを返す、nil
  6. }

たとえば、StandaloneReader を定義しました。

  1. StandaloneReader 構造体型 {
  2. 送信 *バジャー.送信
  3. }
  4.  
  5. func NewStandaloneReader(txn *badger.Txn) *StandaloneReader {
  6. &StandaloneReader{を返す
  7. 送信: 送信、
  8. }
  9. }

これを完了したら、kv/server/raw_api.go 内の対応する gRPC インターフェースを改善し、渡されたパラメータを直接解析して、Storage インターフェース内のメソッドを呼び出す必要があります。次に例を示します。

  1. func (server *Server) RawGet(_ context.Context, req *kvrpcpb.RawGetRequest) (resp *kvrpcpb.RawGetResponse, err error) {
  2. // ここにコードを記述します (1)。
  3. 応答 = &kvrpcpb.RawGetResponse{}
  4.  
  5. // ストレージ リーダーを取得します。
  6. var リーダーストレージ.StorageReader
  7. リーダー、エラー = server.storage.Reader(req.Context)
  8. err != nil の場合 {
  9. 戻る 
  10. }
  11. 読者を延期します。近い()
  12.  
  13. val, err := reader.GetCF(req.Cf, req. Key )
  14. len(val) == 0 の場合 {
  15. 回答: NotFound = true  
  16. }
  17. それぞれ値 = val
  18. 戻る 
  19. }

ここでいくつかのインターフェースを完了すると、完全なスタンドアロン KV が完成します。

TinyKV コードをクローンし、私のペースに従ってステップ バイ ステップで実行してください。分散ストレージの分野について予備的な理解が得られると思います。

<<:  チップ不足、エッジコンピューティング、IoTが2022年のIT変革を推進する

>>:  世界の医療クラウドコンピューティング市場規模は2026年に768億ドルに達すると予想されている

推薦する

SEOは今後どのように発展していくのか

テレビドラマの魔術師のように検索エンジンの今後の発展を予測できるわけではありませんが、近年の発展傾向...

Baidu の信頼を得るための 7 つの方法

ウェブサイトの品質を測る重要な指標が何かご存知ですか?それはウェブサイトの信頼性です!ウェブマスター...

SEO面接スキルとSEO関連技術の共有

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますShiji...

SEOサービスでは、顧客に最適化の知識を伝える必要があります

クライアントがウェブサイトの SEO サービスを依頼した場合、SEO プロセス全体をクライアントにど...

安徽国際ビジネス専門学校のクラウド変革が明らかに:PC島からクラウド大陸への変革

デジタル化の波に後押しされ、安徽省合肥市にある公立全日制総合大学である安徽国際ビジネス職業学院は、大...

サイトのトラフィックとユーザーエクスペリエンスの信頼性を特定する

サイトのトラフィックが膨れ上がることはよくあることです。企業で最適化作業を行う最適化担当者の中には、...

Yunzhiウェブサイト構築はBaidu Xiongzhangアカウントに接続し、新しいウェブサイトをローンチ当日に含めることができる

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています最近、あな...

justg Japanese VPS はどうですか?日本のネイティブ IP VPS のレビュー、Netflix\tiktok\chatgot などのブロック解除。

justg は、デフォルトで KVM 仮想化、純粋な SSD アレイ、500Mbps の帯域幅 (実...

クラウドへの移行を成功させるための手順

調査によると、現在進行中の COVID-19 パンデミック中に、エンタープライズ クラウド コンピュ...

シャオ・ジュン:ウェブマスターが直面しなければならない6つの天敵を数えてみましょう

ウェブマスターは比較的特殊なグループであり、ウェブマスターという言葉が言及されるたびに、人々は自然に...

Douyin アシスタント ソフトウェア_Douxiaozhu カスタマー サービス ソフトウェアはいかがでしょうか?特徴は何ですか

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスDouyin Assis...

エッジコンピューティングがエネルギー業界のミッシングリンクである理由

エネルギー業界は大きな変革期にあり、再生可能エネルギーの導入、電力需要の急増、電気自動車の増加など多...

ウェブマスターツールで最近リリースされた新機能のキーワードに触発されて

SEOERの友人は皆、ここ数日でウェブマスターツールが改訂され、いくつかの人間化された機能が導入され...