「分散型」の意味。分散型データベース(DB)とブロックチェーン、分散型台帳の違いとは?

今回は「分散型データベースとパーミッションブロックチェーンはどう違うのか」という疑問について、以前調べたことをまとめたいと思います。

ことの発端はこのツイート。

匿名の人からでも示唆を得られるTwitterって最高だなと思いつつ、ふぁぼの多さに「ひょっとしたら自分以外にもコンピュータサイエンスを体系的に勉強してこなかった人間は同じような疑問を持っているのでは?」と思い立ちこの記事でまとめておくことにしました。

何か誤植があればいつでもお待ちしています。

今回書いていく内容は以下の通りです。

  • パーミッションブロックチェーンとは何か
  • 「パブリックブロックチェーン」「分散型台帳」という言葉との関係
  • 分散型データベースとパーミッションブロックチェーンの違い

では以下順番にみていきます。

パーミッションブロックチェーンとは何か

まずパーミッションブロックチェーンとは何かという言葉の定義についてですが、おおよそ「参加できるコンピュータが限定されているブロックチェーン」ということになります。特定の管理権限を持つコンピュータによりネットワークへの参加が承認される意味で、広義のプライベートブロックチェーンともされています。

これと反対の概念がパブリックブロックチェーンであり、パブリックブロックチェーンにおいては世界中の全てのコンピュータがブロックチェーンへ参加することが可能です。

代表的なものがビットコインやイーサリアムと言った「仮想通貨」です。これらは悪意あるコンピュータも含めて全てのコンピュータ、すなわちノードがネットワークに参加することができるため、それでもなお悪意ある意思決定を排除するためのコンセンサスアルゴリズムが重要になってきます。

反対にプライベートブロックチェーンにおいては参加者が限定されています。参加者が一つの会社であれば「プライベートブロックチェーン」、複数の参加者がいれば「コンソーシアムチェーン」もしくは「コンソーシアム型」などと呼称されます。

代表例がLinux Foundation主導のHyperledgerでしょう。Hyperledgerはオープンソースで開発されており、その上にはIBMが主導するHyperledger Fabricやソラミツ主導のHyperledger Irohaなど、10のプロジェクトが動いています。

「パブリックブロックチェーン」「分散型台帳」との違い

さて先述したようにパブリックチェーンとは参加者が限定されている点が異なっているのですが、ユースケースも全く異なっています。パーミッションチェーン、特にコンソーシアム型のチェーンは既存の銀行のような金融機関同士が国際送金システムを作ったりすることに使用されることが多いのに対して、パブリックブロックチェーンにおいてはビットコインに代表されるようにそもそも銀行を介さないで国際送金をするための仕組みとして開発されている点にそれが顕著にみられます

また最近よくメディアでは「ブロックチェーンは分散型台帳!」という言い方がされていますが、確かにパーミッションブロックチェーンは分散型台帳ではあるものの、パブリックチェーンは分散型台帳に限定されているものではありません。

そもそもコンピュータが取引を記録する台帳(取引を記録しておくための紙やコンピュータファイル)をこれまでは一つのコンピュータが記録していたのに対し、同一の記録がされた内容をネットワークに参加する複数のコンピュータが保持することで利害関係の異なる複数当事者同士が不正を防ぎ、マシンコストを引き換えにビジネスコストを下げようとするものが、分散型台帳です。

しばしばメディアなどで「ブロックチェーンは低コストで高セキュリティを実現!」という言い方がされますが、これも厳密にコストの中身を見る必要があります。ブロックチェーンが下げているコストは合意決定をプロトコルで規定することでビジネス上の摩擦を避ける、すなわちソーシャルコストであって、従来一つのコンピュータが管理していた情報を何台ものコンピュータが持っていること自体はどう考えても物理的なコンピュータ管理コストは上がっています。

この点大手ブロックチェーン企業Consensysも自社メディアで言及していたように、分散型台帳=パーミッションブロックチェーン(というか主にコンソーシアムチェーン)という図式は確かに成り立ちます。

こちらの記事にも書いてありますね。

一方でパブリックブロックチェーンというのは全てのコンピュータがネットワークに参加できます。ゆえに不正を働くコンピュータをいかに排除しながら取引の承認およびブロックの生成を行うかが鍵となります。そのためのブロック生成にかかる意思決定をプロトコルレベルで規定しているのがビットコインのPoWやイーサリアムの(移行が予定されている)PoSと言ったコンセンサスアルゴリズムです。この点がブロックの生成権が承認された者のみに与えられているパーミッションブロックチェーンと決定的に異なります。

分散型データベースとパーミッションブロックチェーンの違い

ではパーミッションチェーンと「分散型データベース」にはどのような違いがあるでしょうか。

まず分散型DBの前提として、物理的に同じ場所の複数台のコンピュータで構成される場合もあるし、ネットワークで相互接続されたコンピュータ群であることもありますが、基本的には分散型DBは分散したノードで個別に台帳を管理しています。
なぜ地理的に離れたDB同士が連携して同じデータを格納できるのか、なぜ分散配置されたデータベースの内容が最新であると保証できるのか?という点については、こちらのQiita記事にも書かれているように、以下の二つの処理を実施しているためです。
  1. レプリケーション。他のDBで新しいデータが更新されているのを発見次第、自分のDBも更新しようとする仕組み。ただ分散しているDBの数が多いほど処理に時間がかかり、計算資源も使うし、処理のスピードがDBによって違うために一時的にDB間でデータが矛盾する
  2. デプリケーション。一つのDBをマスターとして決めておき、決められた時間に一斉に他のDBがマスターの複製を行う。この場合、データの更新などはマスターDBにだけ行われ、他のDBはデータの更新を行わない。
分散型DBの意義としては、例えば企業の中で部門ごとにDBを置いてそれらを統合して分散DBとすることができます。そうなると各部門は自分たちの持っているデータを制御できるし、火事などがおきてもデータが分散されていれば全体の機能は損なわれません(もちろん代わりに制御は集権型DBと比較すると大変ですが)。
さてこの分散型DBは「分散したノードで個別に台帳を管理している」のに対して、パーミッションブロックチェーン(というかコンソーシアムチェーン)では分散したノードはただ一つの台帳を全員で管理しています
つまり管理する記録をもつ台帳は一つしかないので、これを書き換えるために合意をとる必要があります。分散型DBならば個別にデータを書き換えればそれがレプリケートされますが、パーミッションブロックチェーンではデータを書き換えるのには全ノードによる合意形成が必要です。
そしてデータを書き換えたりといったことも分散型DBでは書き換えたコンピュータにしか記録されませんが、パーミッションブロックチェーンでは履歴まで含めた全てのコピーを持っています(こちらの日本語資料英語動画をご覧ください)。
分散型DBでは現在の値のみを保存しているので、履歴を見るには過去のログを参照する必要があります。となると過去の履歴は変わらないため、改ざんされても気づかない可能性があるのですが、パーミッションチェーン(分散型台帳)においては取引を積み重ねて保有(取引をブロックに格納、そのブロックをブロックチェーンに接続することにつき合意形成することで)しているので、取引の履歴を確認するのが簡単です。
つまり分散型DBとパーミッションチェーンは
  • ノードが管理するのが個別の台帳であるか、同一台帳であるか
  • 台帳の取引記録について、現在の値のみを保存しているのか、過去の取引もログとして残しているのか

の2点が決定的に異なっていると言えます。

逆に言えばこれらの点にパーミッションチェーンの意義があり、異なる利害関係をもつ会社同士が同一台帳にて共有しておいた方が良い情報を管理・参照することで、ビジネスの摩擦を避けられる、という先の話に繋がるわけです。
ゆえにシステムに分散型データベースを使用するか・パーミッションブロックチェーンを使用するかの判断基準は、
  • データのシームレスな共有を目的とするか、
  • 合意形成にかかるコストを軽減するか
が分水嶺であるように思われます。
今回は「分散型データベース」「パーミッションブロックチェーン(主にコンソーシアムブロックチェーン)」「分散型台帳」と言った紛らわしい言葉について、備忘録も兼ねてまとめました。コメントいつでもお待ちしておりますので、何かあればTwitterでご連絡ください。
長くなってしまいましたがこの記事が皆さんのブロックチェーンに対する理解の一助になれば嬉しいです!