[P2P][DHT]P2P型分散データベースの提案
Oracleがグリッドについて積極的に取り組んでいるが、今回はDHTを使ったスケーラブルな分散型データベースを提案したい。なお、データベースについてはDB、分散型データベースはDDBと省略する事にする。
さて、ご存知のとおりDHTを使うと、一般的にあるデータdataはNode_ID=hash(data)というノードに格納する。
DBについては一般に主キーというのがあって、これを基に検索などの処理を書けることになる。
今回はDHTによるDDBの可能性を考えるために簡単なモデルを提案する。実際にはDDBを運用する上でもっと多くの課題があるはずだし、それはこのBlogを見て頂いたみなさんと共に解決していきたい。
今、あるDBのテーブルがあるとする。このテーブルには主キーがある。
DDBを使うととても巨大なDBを扱える可能性がある。まずそれにはDDBのテーブルを分割する必要がある。
まず、主キーについてはハッシュ値を計算し、主キー(及び主キーに紐づいた他のテーブル項目)をハッシュ値の昇順でソートする。テーブルはあるハッシュ値をトリガーにして複数に分割する。つまり、全体のテーブルをTableとすると
[式1]Table=Table(0.A)+Table(A+1,B)+Table(B+1,C).....
と分割できるはずだ。なお、Table(S,Q)は主キーのハッシュ値において、SからQについて構成しているテーブルを意味している。なお、このテーブルはノードやネットワーク負荷、DBサイズによって自律的に分割、結合を行う。
なお、Table(S,Q)を保持するノードはNode_ID=Sとしよう。
これだけだと単にTableの分割を行っただけだ。そこで実際にSQL文を叩いて作業をするにはどうすればよいのだろうか?
今、バーチャルDBノードと言うのを定義する。略してVDBノードと呼ぼう。これはあるノードAがVDBノードにSQL文を投げれば、ノードAから見てVDBノードがあたかも全てのDBの処理をしているように見えるノードを意味する。
VDBノードはNode_Id=hash(Table_name)である。VDBノードは式[1]のようにテーブルを分散したときに、その分散したテーブルを保持するノードのNode_IDのリストを保持する。今、このリストを分散テーブル管理リストと呼ぼう。つまり分散テーブル管理リストは
[式2]{0,A+1,B+1,C+1.....}
となる。
これで準備が整った。
では、これからSQL文を実際に発行して処理させるようにしよう。
まず、SQL文を発行するノードAはVDBノードにSQL文を通知する。VDBノードはSQL文を分散テーブル管理リスト{0,A+1,B+1,C+1....}を保持しているので、Node_ID={0,A+1,B+1,C+1....}にSQL文をマルチキャストする。なお、VDBノードは事前処理を行い、不要なSQL文を処理に関係ないノードに送らないようにする。
分散テーブルを保持しているノードNode_ID={0,A+1,B+1,C+1....}はSQLの処理結果をVDBノードに通知する。最終的ににはノードAにSQL処理の結果を通知することになる。
異なるDBテーブルとの結合等についても処理はややこしくなるが、可能であろう。
今回はP2P型分散データベースについて簡単ながら提案・検討を行った。DHTを使うと、とても大きいサイズのDBが構築可能となるかもしれないし、それを高速に処理できるかもしれないので、研究すると面白いかもしれない。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント