分散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億ドルに達すると予想されている

推薦する

アマゾンAWSが中国でスタートアップ国際化プログラムを開始

2018 年 5 月 24 日 – AWS は西安で第 2 回 AWS スタートアップ デーを開催し...

クラウドネイティブ スーパーコンピューティングの登場: クラウドネイティブ スーパーコンピュータとは何ですか?

NVIDIA によると、英国ではケンブリッジ大学がクラウドネイティブのスーパーコンピューターを構築し...

記事内容のSEO最適化経験の共有

SEO に関しては、定期的に記事を更新し、オリジナルの記事、または少なくとも疑似オリジナルの記事を書...

ペットサイト運営の収益化方法の分析

著者の理解によれば、2000 年初頭から、海外では新しいペット ウェブサイト、特にコミュニティ ペッ...

2022年までに産業企業の90%がエッジコンピューティングを使用する

Frost & Sullivan の最近のレポートによると、エッジ コンピューティングは、レ...

SEOをうまく行うには、キーワードの分析方法を学ぶ必要があります

SEO をうまく行うには、キーワードの分析方法を学ぶ必要があります。これは言うまでもないと思います。...

ウェブサイトの優先ドメインの問題について簡単に説明します

最近、グループ内の何人かの友人とコミュニケーションを取っていて、何人かの友人から質問を受けたのですが...

faconhostはどうですか? AMD Ryzen 9 7900Xシリーズ香港VPSのレビュー

faconhostはどうですか? faconhost 香港 VPS はどうですか? Faconhos...

デジタル変革を加速する平安クラウドは、中小銀行の技術革新能力を全面的に強化します。

[51CTO.comからのオリジナル記事] デジタル経済は長い間、世界経済の重要な部分となり、徐々に...

医療用ソフト製品の宣伝方法に関する簡単な提案

医療用ソフト製品は常に議論の的となっています。医療用ソフト製品は医療ネットワークマーケティングのモデ...

FONEは2021年中国消費財業界CIOカンファレンスに参加し、ビジネスと金融のデジタル変革について議論しました。

[[408405]] 6月25日、中国消費財業界CIO会議が上海で開催されました。このサミットは、「...

Baidu の検索結果に表示されるグラフィックとテキストのロゴに気づきましたか?

最近、Baidu 検索エンジンは新たな動きを見せました。以下は、Baidu Webmaster Pl...

ginernet: 年間 9.99 ユーロ、スペイン語 VPS、著作権なし、コンテンツ無制限

スペイン(Interxion Madrid)のデータセンターで主にVPSを運営しているginerne...

SEOトレーニングアカデミーは、ウェブサイトのユーザーエクスペリエンスを向上させる10の側面をまとめています

ウェブサイトのユーザーエクスペリエンスを向上させることに関しては、多くの SEO 担当者は無知です。...

クラウド コンピューティングのトレンド: オーケストレーション自動化は RPA にどのような影響を与えますか?

先月、ガートナーは2021年のクラウドコンピューティングのトップ10トレンドを発表しました。その中で...