Blockchainと分散DBなどの違いとは

# Blockchainとは

以前に簡単にBlockchainについては説明しているので[こちら](https://qiita.com/b4tchkn/items/47d6bdc5248e7eafe812)をご覧ください．
私はブロックチェーン技術について興味があり，色々と調べてきたのですが，分散DBなどと何が違うのか混乱してきたため，ここにまとめて改めてブロックチェーンの他の技術にはない特徴を整理できたらいいなと思います．  

# DBとその他類似技術
DBなどについてはサイトをちらほら見た程度ですが，類似している分散DB，分散トランザクション，ファイルサーバー，共有フォルダについて軽く説明しブロックチェーンとの違いをまとめていきたいと思います．  

## DB（データベース）
そもそもDBとはなんなのか[Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)によると，***検索や蓄積が容易にできるよう整理された情報の集まり。***だそう．   
要は，整理しやすいデータの置き場所というようなイメージでしょうか．  

## 分散DB
地理的に分散しているDBのことを指します．   
分散されているDBの中にはどれも同じデータが格納されています．  
なので，普通に１つのDBでデータを管理するよりもなにか障害（地震や故障）が起きた際でも他にも同じデータを格納しているDBが存在しているのでデータが完全に無くならないという利点があります．また，１つのDBだと処理が一箇所に集中してしまいますが，同じDBが色んなところに散らばっているので負荷も分散させることができます．使うユーザから見ると，１つのDBで管理している時と挙動が変わらないというところがポイントです．  

どのように地理的に離れたDB同士で連携して同じデータを格納しているのかというと，そこには`レプリケーション`と`デプリケーション`と呼ばれる仕組みがあります．
### レプリケーション
レプリケーションは，他のDBで新しいデータが更新されているのを発見次第，自分のDBも更新しようとする仕組みです．これには分散しているDBの数にもよりますが，かなり処理に時間がかかり，計算資源も使うのだそう．また，処理を行う進捗は各DBによって違うので一時的にDB間でデータの矛盾が起きる可能性があります．

### デプリケーション
デプリケーションは，一般的に１つのDBをマスターとして決めておき，決められた時間に一斉に他のDBがマスターDBの複製を行う仕組み．この仕組みでは，データの更新などはマスターDBにだけ行われます．

## 分散トランザクション
DB分野にもブロックチェーンのように`トランザクション`という言葉があります．DBの世界でいうトランザクションとは，「あるDBのこの値をちょっと違うところにコピー．そしてそのDBのここにこの値を更新．」というような複数の命令が必ずセットで実行されなければいけない最小の命令のことをトランザクションと呼ぶようです．この時，命令が複数のDBにまたがるようなものが含まれている時分散トランザクションと呼ぶみたいです．  
例を用いて説明すると，A銀行からB銀行にお金を送金するときのことを考えます．このとき「A銀行のDBからある金額マイナスしてB銀行のDBに送金されてきた分プラスする．」という分散トランザクションが実行されることになります．この分散トランザクションはA銀行のDBからB銀行のDBに処理がまたがっているトランザクションのため分散トランザクションとなります．そして，この分散トランザクションに含まれている２つの命令は必ずどちらも実行されなければなりません．そうでないと，A銀行からは金額がマイナスされているのにB銀行には金額が反映されていないというような事態に陥るためです．  
分散トランザクションではこのように複数セットになった命令が１つのトランザクションとして確実に実行されるように`２相コミット`と呼ばれる仕組みがあります．中身としては，一度仮でトランザクションを実行しA銀行DBとB銀行DBからも期待した結果が返ってきたら実際に処理を確定させるというような仕組みです．  
このとき，片方から返事が返ってこなかったりした場合はもう片方がokの返事が来ていたとしてもトランザクションとしては破棄されることになります．

## ファイルサーバ
ファイルサーバは複数の人同士でファイルを共有して見れるサーバのことです．ファイルサーバ自体にアクセス権限の設定をすることで許可された人のみファイルサーバの中身を見れるというような設定もできます．複数の人同士でファイルを共有するときにあちこちにファイルが散らばっていると共有が面倒ですが，ファイルサーバを使うことで簡単に共有できるようになります．  
しかし，そこに大事なデータを保存して共有していて故障か何かでファイルサーバが使えなくなってしまうと困るといった欠点もあります．

## 共有フォルダ
これもファイルサーバとできることはほぼ一緒です．共有フォルダは自分のPCに保存してあるフォルダ（ファイル）を同じネットワーク上の他のPCからも見れるように設定したフォルダのことを言います．これもどのPCに共有するか設定することでアクセス権限を設定することが可能です．

## オンラインストレージ
この辺りもファイルサーバや共有フォルダとできることにあまり変わりはありません．近年はクラウドが普及して来ていてwordのファイルなどをDropboxやGoogle Driveなどに保存してPCからでもスマホからでも見れるようにしているという人も多いと思います．  
ファイルサーバなどとの違いとしては，オンラインストレージはDropboxやGoogleが管理していてファイルサーバは自分で管理するというところが大きな違いかと思います．なので，オンラインストレージだと無料枠に○GBまでなど制約があったりしますがファイルサーバはいくらでも自分の好きなように構築することができます．  
また，オンラインストレージであってもこのファイルを誰と共有して見るという設定ができます．DropboxやGoogle　Driveにもそのファイルが保存されているURLを共有した人同士で同じファイルを編集したり閲覧のみ可にしたりできますよね？

## 本題
さてこれでブロックチェーンと他の類似技術について比較する材料が揃いました．  
実際に比較して考えていきましょう．

## 分散DBとブロックチェーン
[この](http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/ds_concepts.htm)記事や[この](https://blockchain-jp.com/guides/196)記事が言うように，結局分散DBはクライアント・サーバ型である特別なノードが存在してそのノードにあるデータを複数に散らばらせていると言う感じみたいです．  
この点でいうと，分散してデータ（台帳）を保存している点はブロックチェーンと同じですが，ブロックチェーンにはそんなこのデータを分散して保存しろという特別なノードが存在しないというのが大きな違いかと思います．また，そのようなこともあり分散DBの場合，どんなデータが保存されるかはその特別なノードによって左右されます．その特別なノードが保存しろと言ったデータが本当に正しいデータかどうかはそのノードを信頼しているかどうかだけで保証されています．  
ブロックチェーンの場合，合意形成（PoWやPoSなど）により保存しようとしているデータが正しいのかどうか保存し合う間で確認して保存している点が大きく違うと思います．  

## 分散トランザクションとブロックチェーン
これに至ってはなんとなく単語がブロックチェーンと比較できそうだなと思って調べてみたのですが，ブロックチェーンと比較するのは適切でない気はします．  
なぜなら，分散トランザクションは**複数のDBに対して**処理を行うトランザクションですが，ブロックチェーンでは**各ノードが保持しているDB（台帳が保存されたブロックチェーン）は１つしかない**からです．

## ファイルサーバ・共有フォルダとブロックチェーン 
ファイルサーバや共有フォルダはブロックチェーンの中でも特にコンソーシアム型のブロックチェーンやプライベート型のブロックチェーンと似ている気がします．  
どちらもどの人にデータを見れるようにするかアクセス権を与えている点が似ています．　　  
ファイルサーバでも誰にサーバ内のファイルを見れるようにするか設定しているのと同じように，ブロックチェーンでもビジネス向けに開発されたHyperledger Fabricなどの基盤も信頼できる人同士でブロックチェーンネットワークを作ることをしています．　  
ブロックチェーンとの違いというと，そもそもDBなどとの違いという風になりますが，基本的にブロックチェーンでは一度保存した情報は後から変更したり消したりすることはできません．しかし，ファイルサーバなどは当たり前のように好きな時に特に誰かからチェックされるわけでもなくファイルを上げて，更新して，いらなくなったら削除するということを行います．  
そもそもブロックチェーンとファイルサーバなどでは保存しようとしているデータが異なります．  
例えていうなら，ファイルサーバなどはファイルやデータそのものを保存しようとしているのに対し，ブロックチェーンはそのデータを誰がどのように変更を加えたかのログを保存しているような感じです．gitみたいな感じです．　　
また，ファイルサーバ自体にはその中のデータが信頼されている人同士の中でも誰かに後から改ざんされしまうことに対して耐性はありませんが，ブロックチェーンはブロックとチェーンによるデータ構造をしているので後から一度保存されたデータを改ざんすることはほぼ不可能となっています．
なので，使う用途が違うというのが答えかもしれません．  

## オンラインストレージとブロックチェーン
これについても保存している場所を管理しているのが自分か，信頼できる第三者（DropboxとかGoogle）かという違いなだけで他は，変わりません．  
ちなみにブロックチェーンでは，データを管理しているノードはみんな平等なのでどこかのノードが権限を持って「絶対これをみんな保存するんだ」ということはできません．みんなで確認しあってからデータを書き込みます．  
また，データを共有するという点では，ブロックチェーンとオンラインストレージは似ていますが，オンラインストレージの場合，データは一箇所に集約されていてもしオンラインストレージを提供しているサービスが終了すると使えなくなりそれはサービス提供者に完全に委ねられています．

# まとめ
この記事は私の「ブロックチェーンて結局みんなでデータ共有してる感じだから分散DBとかファイルサーバでもいいんじゃね」という疑問から始まったものでした．  
結論を言うと，ブロックチェーン以外の技術を使って仮想通貨を流通させるようなことはできなくもないけど難しいのではないでしょうか．  
と言うのもブロックチェーンできるまで今みたいに実用的にできていなかったわけですし．  
ブロックチェーンのようにみんなで同じ台帳を持って改ざんされないようにデータを保存しようと言うのは頑張ればできると思います．  
しかしそれにはセキュリティ面などでかなり工夫してコストをかけなければいけないと思います．　　
ブロックチェーンのすごいところはやはり，保存された情報が後から悪意のある人によって改ざんされず，分散DBのように同じデータがあちこちに散らばっていることによりちょっとやそっとのことじゃシステム全体が止まらないということが０に近いということを実現できているところではないでしょうか．  
だからこそ仮想通貨のように保存されているデータに価値が出てみんな資産をつぎ込んでいるわけです．  

最後まで読んでいただきありがとうございます．分散DBなどの説明などが違っていたら指摘してくださると嬉しいです．  
また，これは私の一意見なので「いや，分散DBとかファイルサーバをこうやってこうしたらブロックチェーンと同等もしくはそれよりすごいことできるんじゃない？」みたいな意見もあればぜひお待ちしております．

# 参考
ブロックチェーンと分散型データベースの違い
https://blockchain-jp.com/guides/196
分散データベースの概念
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/ds_concepts.htm
分散トランザクションとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
http://wa3.i-3-i.info/word16108.html
分散トランザクション
https://ja.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
今さら聞けないファイルサーバーの基礎知識とお手軽サーバー自力構築法
https://navi.dropbox.jp/file-server#page1