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

推薦する

権限がダウングレードされた後の原因究明と対処方法の事例分析

今朝早く、QQグループで誰かが自分のウェブサイトがダウングレードされたと苦情を言い、何が問題で、どう...

ローカル人材ウェブサイトのコア競争力の欠如という現象を打破する方法

地元の人材ウェブサイトは、雇用や採用を促進するための優れた基盤を築いてきましたが、雇用圧力が高まるに...

地方の小さな才能のウェブサイトの個々のウェブマスターにとってのブレークスルーポイント

「今日は引っ越しましたか?」かつて故郷を離れて大都市に憧れていた人たちにとって、大都市への憧れが今で...

簡単な説明: 新しいウェブサイトを公開後3日以内にインデックスに登録してランキング付けするためのヒントがいくつかあります。

まず、同じ業界の友人たちに聞きたいのですが、あなたの新しいウェブサイトはオンラインになってから、含ま...

初心者のための高品質な外部リンクの構築方法

自分のウェブサイトを最適化するとき、多くの初心者ウェブマスターは「コンテンツは王様、外部リンクは女王...

Vultr: クラウドサーバー、50ドル無料、16のデータセンター、いつでも作成および削除可能、Alipayが利用可能

Vultr が今年 3 月に開催した最新のイベントでは、新規ユーザーに 50 ドルを直接提供し、クラ...

AWS は、機械学習の経験がなくても、企業の日常業務を改革し改善する 5 つの新しい機械学習サービスを開始しました。

Amazon Kendra は、自然言語処理やその他の機械学習技術を使用してエンタープライズ検索を改...

新しいテクノロジートレンド: SaaS セキュリティ構成管理 (SSPM)

攻撃者や悪意のある行為が横行する今日のサイバー時代では、ほとんどの企業はクラウド構成のセキュリティを...

WeChat Momentsの運用における10の経験

WeChatはマーケティングツールというより、顧客とのより良いインタラクションに適しています。現在、...

「IT Diaosi」SKYCC 組み合わせマーケティングソフトウェアビデオマーケティング事例分析

「IT Diaosi」SKYCC 組み合わせマーケティングソフトウェアビデオマーケティング事例分析最...

良い店長になるには何をすべきでしょうか?

筆者は以前、有名な電子商取引の人事部長がゲスト出演したインタビュー番組を見ていた。ゲストの一人が話し...

URL構造の最適化におけるよくある2つの誤解の分析例

サイトの包含ランキングは、競争の激しい Web 業界でサイトが生き残れるかどうかに関係します。サイト...

2020 TECHO PARK 開発者会議セキュリティフォーラムで最先端のセキュリティ技術を探りましょう。

デジタル経済の波は止められない勢いで世界を席巻しています。クラウドコンピューティング、5G、AI、ビ...

COVID-19パンデミック下での現地生産においてエッジコンピューティングが重要な役割を果たす

[[359008]] COVID-19パンデミックにより、製造業者が現地生産と流通へとシフトするにつ...

Meilishuo: SEOの最高レベルはキーワードを作成することです

毎日 SEO を行っている友人にとって、最大の悩みは、ウェブサイトのキーワードランキングが下がってい...