ScalarDL 設計ドキュメント
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
この設計ドキュメントでは、ScalarDL の設計と実装について簡単に説明します。ScalarDL の背景と目的については、ScalarDL の概要 を参照してください。
設計目標
ScalarDL の主な設計目標は、データの改ざん検知性と高性能のスケーラビリティの両方を実現することです。ScalarDL は、ACID 準拠、正確なファイナリティ、線形化可能な一貫性、および高可用性を提供します。ScalarDL のパフォーマンスは、基盤となるデータベースのパフォーマンスに大きく依存しますが、疎結合アーキテクチャのため、基盤となるデータベースを要件に適したものに置き換えることが可能です。使いやすさとシンプルさも、ScalarDL をスケーラブルにするための鍵となるため、主な設計目標の一部です。
故障モデル
ScalarDL は、ビザンチン故障を扱う以前の研究の標準的な仮定に則っています。1 そのため、ScalarDL は、ビザンチン故障ノード (たとえば、Ledger コンポーネント) が任意に動作すると想定しています。つまり、故障の動作に関する仮定はありません。
データモデル
ScalarDL は、データをアセットの集合として抽象化します。アセットは任意のデータですが、データの履歴として考える方が適しています。たとえば、アセットは有形 (不動産やハードウェア) から無形 (契約や知的財産) まで多岐にわたります。
アセットは1つ以上のアセットレコードで構成され、各アセットレコードはアセット ID と世代で識別されます。世代が M
のアセットレコードには、世代が M-1
の以前のアセットレコードの暗号化ハッシュがあり、ハッシュチェーンを形成します。そのため、チェーンをトラバースすることで、中間のアセットレコードの削除または更新を検出できます。
さらに、複数のアセット間にはチェーン構造が存在します。このチェーンは、ScalarDL では「コントラクト」と呼ばれるビジネスロジックまたはアプリケーションロジックによって構築される関係です。たとえば、銀行アプリケーションでは、あるアカウントから別のアカウントに送金されると、両方のアカウントが更新され、アセット間にこのような関係が作成されます。