Hybrid Blockchain Database Systems: Design and Performance(VLDB'2022)



概要

ハイブリッド ブロックチェーン データベース システムの出現により、いくつかの代表的なシステム間のパフォーマンスとトレードオフを深く分析することを目指しています。これを実現するために、Veritas と BlockchainDB をゼロから実装しました。Veritas では、クラッシュ フォールト トレランス (CFT) とビザンチン フォールト トレランス (BFT) のアプリケーション シナリオ用に 2 つのフレーバーを提供しています。具体的には、Apache Kafka を使用して CFT アプリケーション シナリオに Veritas を実装し、BFT アプリケーション シナリオに Veritas と Tendermint を使用します。これら 3 つのシステムを BigchainDB の既存のオープンソース実装と比較します。BigchainDB はコンセンサスに Tendermint を使用し、ブロックチェーン パイプラインを使用したデフォルトの実装と、ブロックチェーン パイプラインと並列トランザクション検証を含む最適化されたバージョンの 2 つのフレーバーを提供します。私たちの実験的分析は、分散データベースで一般的に使用される CFT 設計が、ブロックチェーン固有の BFT 設計よりも高いパフォーマンスを示すことを確認しています。一方、私たちの広範な分析は、開発者が直面するさまざまな設計上の選択肢を強調し、ハイブリッド ブロックチェーン データベース システムを設計する際に必要なトレードオフを明らかにします。


提示:以下是本篇文章正文内容,下面案例可供参考

2 背景と関連業務

ここ数年、ブロックチェーンとデータベースを統合したいくつかの作品がデータベース会議で発表されています [22, 30, 31, 37, 42, 46]。このようなシステムでは、すべてのデータベース操作が分散台帳によって追跡されるため、企業は自信を持ってビジネスを行うことができます。ただし、ビジネス シナリオが異なれば要件も異なるため、多くのハイブリッド ブロックチェーン データベース システムがさまざまなアプリケーション シナリオ用に構築されています。このセクションでは、既存のハイブリッド ブロックチェーン データベース システムについて説明し、元帳データベースとして分類できる類似のシステムについて簡単に説明します。

2.1 ハイブリッド ブロックチェーン データベース システム

Veritas [22] は、基礎となるブロックチェーン (台帳) を統合して、監査可能で検証可能な証拠を維持する共有データベース設計です。データベースとブロックチェーン間のやり取りは、バリデーターを通じて行われます。バリデーターは、データベースからトランザクション ログを取得し、正確性チェックの決定を行い、それらを他のバリデーターに送信します。すべてのバリデーターが合意した最終決定は、ブロックチェーンに記録されます。したがって、データの正確性は、ブロックチェーンに保存されている履歴レコードに対して検証できます。
このホワイト ペーパーで実装するために選択した Veritas [22] の代替設計では、検証可能な共有テーブルをキー ストアとして使用します。この設計では、図 1 に示すように、各ノードに共有テーブルの完全なコピーと、分散台帳の形式の改ざん防止ログがあります。台帳には、共有テーブルへの更新 (書き込み) のログが保存されます。各ノードはローカル ログを送信し、ブロードキャスト サービスを介してリモート ログを受信します。Veritas の検証可能なテーブル設計では、タイムスタンプ ベースの同時実行制御が使用されます。トランザクションのタイムスタンプはトランザクション ログのシーケンス番号として使用され、各ノードにはコミット ログ シーケンスの透かしがあります。トランザクション要求がノードに送信されると、ノードはまずトランザクションをローカルで実行し、結果をメモリにキャッシュします。次に、ブロードキャスト サービスを介してトランザクション ログを他のノードに送信します。ノードは、他のすべてのノードから承認を受け取るとすぐに、トランザクション バッファーをフラッシュし、コミットされたログのウォーターマークを更新します。

BigchainDB [42] は、ストレージ エンジンとして MongoDB [3] を使用します。つまり、図 2 に示すように、各ノードは独自のローカル MongoDB データベースを維持します。MongoDB は、BigchainDB の主要なデータ抽象化であるアセットのサポートのために使用されます。Tendermint [8] は、BigchainDB のノード間のコンセンサスに使用されます。Tendermint は BFT コンセンサス プロトコルであり、ノードが悪意のあるハッカーによって制御された場合に、他のノードの MongoDB データベースが影響を受けないようにします。ノードがユーザーの更新リクエストを受信すると、まずローカルで結果を生成し、Tendermint を介して他のノードに送信されるトランザクションの提案を提案します。BigchainDB のノードの大部分がトランザクションでコンセンサスに達すると、ノードはバッファリングされた結果を送信し、ユーザー クライアントに応答します。
BlockchainDB [30] は、ブロックチェーンの上に共有データベースを構築する設計を採用しています。図 3 に示すように、データベースをいくつかのシャードに分割し、それによって全体的なストレージのオーバーヘッドを削減するという点で、他のシステムとは異なります。この設計では、いくらかのストレージ スペースを節約できますが、データ リクエストが適切なシャードを見つけるために追加のルックアップを必要とする場合があるため、レイテンシが高くなります。BlockchainDB では、各ピアがシャード マネージャーを統合して、特定のキーが存在するシャードを見つけます。検証に関しては、バッチで行われる同期 (オンライン) および非同期 (オフライン) 検証を提供します。
FalconDB [46] は、サーバー ノードとクライアントの両方にデータ サマリーを保持することを要求することで、監査可能性と検証可能性を提供するシステムです。FalconDB のサーバー ノードは、共有データベースと、共有データベースの更新ログを記録するブロックチェーンを保持します。クライアント ノードは、サーバー ノードによって保存されたブロックチェーンのブロック ヘッダーのみを保存します。これらのヘッダーを使用して、クライアントはサーバー ノードから取得したデータの正確性を検証できます。これらのクライアント ノードは、ユーザーと実際のデータベースの間の仲介者として機能します。
ChainifyDB [37] は、「Whatever-Ledger Consensus」(WLC) と呼ばれる新しいトランザクション処理モデルを提案しています。他の処理モデルとは異なり、WLC はローカル データベースの動作について想定していません。WLC の主な原則は、トランザクションの順序ではなく、トランザクションの効果について合意を求めることです。ChainifyDB サーバーは、クライアントからトランザクションを受信すると、プロトコル サーバーにトランザクションを検証するためのヘルプを要求し、トランザクションの提案を順序付けサーバーに送信します。順序付けサーバーは、FIFO 順序で提案をブロックにバッチ処理し、Kafka [20] を介してブロックを配布します。トランザクションがコンセンサス サーバーによって承認されると、実行サーバーの基盤となるデータベースで順次実行されます。

高レベルでは、ブロックチェーン リレーショナル データベース [31] は Veritas [22] に非常に似ています。ただし、ブロックチェーン リレーショナル データベース [31] (BRD) では、単一のブロック内でトランザクションをシリアル化するのではなく、コンセンサスを使用してトランザクションのブロックを順序付けます。BRD ブロック内のトランザクションは、各ノードで Serializable Snapshot Isolation (SSI) と同時に実行され、順次検証およびコミットされます。PostgreSQL [5] は、BRD の基盤となるストレージ エンジンとして使用される Serializable Snapshot Isolation をサポートしています。トランザクションは、すべての「信頼できない」データベースで個別に実行されますが、順序付けサービスによって同じシリアル化可能な順序でコミットされます。

2.2 台帳DB

ハイブリッド ブロックチェーン データベース システムとは異なり、元帳データベース [6、12、26、44、48] は、元帳が単一の組織によって保持されるという点で集中化されています。この論文では、いくつかの既存の台帳データベースについて簡単に説明します。ただし、それらのパフォーマンスを評価および分析しませんでした。

Amazon Quantum Ledger Database [6] (QLDB) には、すべてのデータ変更を正確かつ順次に記録する不変のログが含まれています。ログは、ハッシュ チェーンに配置された追加専用ブロックで構成されます。つまり、データはログに追加することしかできず、上書きまたは削除することはできません。ログ全体がマークル ツリーとして設計されているため、ユーザーはデータ変更の整合性を追跡および確認できます。

Immudb [12] は、組み込みの暗号証明と検証を備えた軽量で高速な不変データベースです。Immudb は純粋な Go で書かれており、ストレージ エンジンとして BadgerDB [17] を使用しています。Badger は、LSM ツリー構造を使用して純粋な Go で実装された高速なキー値データベースです。Immudb は、データが SHA-256 を使用してハッシュされるマークル ツリー構造を内部で使用することにより、不変性を保証します。さらに、immudb は整合性チェッカーを構築して、データの正確性を定期的にチェックします。


Spitz [48] は、改ざん防止と不変のトランザクション ログをサポートする台帳データベースです。基になるストレージとして Forkbase [43] を使用し、データに対して git のようなマルチバージョン コントロールを提供します。Spitz は、データを格納するためのセル ストレージと、トランザクション ログを格納するための追加専用台帳を提供します。さらに、元帳に基づいてマークル ツリーを構築し、検証可能性を提供します。

LedgerDB [44] は Alibaba Group の集中型データベースです。TSA 時間公証アンカーを使用して、監査可能性を提供します。これらのアンカーは、双方向ペグ プロトコル [41] によって生成されます。以前の台帳データベースと比較すると、LedgerDB は、作成、更新、クエリ メソッドだけでなく、検証可能なデータを消去および隠蔽するメソッドもサポートするという点で異なります。これらのアプローチにより、LedgerDB は実際のニーズを満たすように設計されています。ただし、強力な検証可能性を提供しながら、不変性を壊す可能性があります。基盤となるストレージに関しては、LedgerDB は、HDFS [39]、RocksDB [2]、Merkle Patricia Tree [47] などのキー値ストア、および L-Stream [44] と呼ばれる線形構造の追加専用ファイル システムを含むファイル システムをサポートしています。 LedgerDB 用に特別に設計されています。

2.3 まとめ

要約すると、ハイブリッド ブロックチェーン データベースは、(1) MySQL、MongoDB、Redis などのストレージ エンジンを使用する共有データベース、(2) Kafka (CFT) や Tendermint などのコンセンサス メカニズムを介して複製される共有台帳という 3 つの主要コンポーネントを備えた分散型システムです ( BFT) など、および (3) は一般に、単純なキー値 (KV) ストアと、プットおよび取得操作用のユーザー インターフェイス (API) をサポートします。表 1 に、これら 3 つの主要コンポーネントに対して既存のハイブリッド ブロックチェーン データベース システムで使用される手法をまとめます。

四、業績分析

このセクションでは、前のセクションで説明した 5 つのシステム、つまり Veritas (Kafka)、Veritas (TM)、BigchainDB、BigchainDB (PV)、BlockchainDB のパフォーマンスを分析します。次に、実験装置について説明します。

4.1 実験設定のセットアップ

すべての実験は、Ubuntu 18.04 オペレーティング システム (OS) のローカル マシンで実行されました。このマシンには、256 個の物理 CPU コア、8 TB の RAM、および 3 TB のハード ディスク (HDD) ストレージが搭載されています。iostat ツールを使用すると、マシンの IOPS は 5.35 と推定されます。テスト中のシステムのすべてのサーバー ノードとクライアント ノードは、このマシンの異なる CPU コアの Docker コンテナーで実行されています。

テスト対象の 5 つのシステムのパフォーマンスを評価するために、各システムに 100,000 回のトランザクションを送信しました。クライアント数を表す同時実行パラメーターに基づいて、複数のトランザクションをシステムに並行して送信します。トランザクションは、システム内のさまざまなサーバー ノードに均等に分散されます。スループットを計算するために、最初のトランザクションの開始時刻とすべてのトランザクションの完了時刻を記録します。次に、正常にコミットされたトランザクションの数を記録し、この数を以前に記録された間隔で割ってスループットを計算します。スループットを計算するときは成功したトランザクションのみを考慮しますが、失敗することもあります。各実験を 3 回繰り返し、平均を報告しました。トランザクションを実行する前に、1,000 バイトのキー値レコードを 100,000 個、各システムにロードしました。

Yahoo! データベースとブロックチェーンのベンチマークに広く使用されている Cloud Services Benchmark [13] (YCSB) データセット [19、35]。YCSB は、書き込み (挿入、変更、削除) や読み取りなどの一般的なデータベース操作をサポートしています。YCSB では 6 つのワークロードが定義されていますが、私たちの実験では、これら 6 つのワークロードのうち 3 つを選択しました。3 つのワークロードは、(i) 50% の更新操作と 50% の読み取り操作で構成されるワークロード A、(ii) 5% の更新操作と 95% の読み取り操作で構成されるワークロード B、および (ii) 100% のワークロード C です。読み取り操作。さらに、(i) すべてのキーに対して一様に動作する均一なディストリビューション、(ii) キーのサブセットのみで頻繁に動作する zipfian ディストリビューション、および (iii) ほとんどのキーで動作する最近のディストリビューションの 3 つのキー ディストリビューションを使用しました。操作に最近使用したキー。特に明記しない限り、ワークロード A と均一分散をデフォルトとします。
ベンチマーク ツールは、goroutines [14] とチャネル [14] を並行セーフ リクエスト キューとして使用して、Go で開発されました。チャネルを使用すると、明示的なロックや条件変数なしでゴルーチンを同期できます。各ベンチマーク クライアントは、現在のリクエストを完了するとチャネルから新しいリクエストを取得するゴルーチンによって表されます。

1.パンダとは?

例: pandas は、データ分析タスクを解決するために作成された NumPy ベースのツールです。

2.ステップを使用する

1. ライブラリのインポート

コードは次のとおりです (例)。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2. データの読み取り

コードは次のとおりです (例)。

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

ここで使用される URL ネットワークによって要求されたデータ。


要約する

提示:这里对文章进行总结:

例: 上記は、今日お話しする内容です. この記事では、pandas の使用法を簡単に紹介するだけであり、pandas は、データを迅速かつ便利に処理できるようにする多数の関数とメソッドを提供します.

おすすめ

転載: blog.csdn.net/weixin_41523437/article/details/124555901