検索
連載

グラフ型NoSQLデータベース(Neo4j、InfiniteGraph)編知らないなんて言えないNoSQLまとめ(4)(1/2 ページ)

カラム型、キーバリュー型と比較してあまり知られていないグラフ指向のデータベースはどんな使い方ができる? 主要プロダクトを見てみよう。

Share
Tweet
LINE
Hatena
※本記事はアフィリエイトプログラムによる収益を得ています

書籍紹介

本連載は下記書籍から第5章を基に、@IT向けに再構成して掲載しています。

目次

  • 序 章 ビッグデータの時代
  • 第1章 NOSQLとは何か?
  • 第2章 NOSQLのデータモデル
  • 第3章 アーキテクチャの基本概念と技術
  • 第4章 HadoopはNOSQL?
  • 第5章 主なNOSQLデータベース製品
  • 第6章 NOSQLデータベースの選択基準
  • 第7章 NOSQLを使うビジネス

 本連載は書籍『NOSQLの基礎知識』(リックテレコム刊、ISBN:978-4897978871)で解説されている内容から一部を抜粋し、本連載向けに一部再編集して掲載したものです。

 書籍では、一般にNoSQLと呼ばれている各種データベース技術について、基本概念から主要なプロダクトの特性、ベンチマーク結果までを紹介しています。データモデルやアーキテクチャの違いといった基本概念から、各プロダクトの特徴を理解できる内容になっています。

 本連載では、この書籍の内容から、主要プロダクトを紹介している第5章を抜粋し、そのエッセンスを紹介していきます。今回はその中でもグラフ型データベースに分類されるNoSQLの主要プロダクトを見ていきましょう。

グラフを高速処理するNeo4j

 Neo4jは、Neo Technologyが開発したグラフ型のNoSQLデータベースです。オープンソースと商用パッケージ版のデュアルライセンスで提供されています。

 グラフ型のデータモデルは、ノード(頂点)、リレーションシップ(エッジ)、プロパティ(属性)という3つの基本構成要素により、オブジェクトであるノード間の関係性を表現します。そして、経路やインデックスにより、例えば「知人を探す」「知人の知人を探す」「最短経路を探す」といったクエリの答えを得るために最適化されています。

 RDBでこのような関係性を探し出すには、結合(Join)のための演算が大量に必要になりますが、Neo4jでは数十億のノード、リレーションシップ、プロパティをもつグラフを高速に処理できます。

マスタ/スレーブ型で複製

 Neo4jのアーキテクチャはマスタ型であり、マスタ/スレーブの構造を持ちます(図5-7)。書き込みはスレーブにも行うことができ、必ずしもマスタに書き込む必要はありません。その代わりスレーブは、データの整合性を保つために、マスタと更新を同期させなければなりません。

 従って、あるスレーブに行われた更新が、マスタから全てのスレーブに反映されるまでの間、他のスレーブでは更新されたデータを見ることができません。


図1 Neo4jのアーキテクチャ

ZooKeeperによる障害検知

 Neo4jはZooKeeperを使うことで、障害が検知されたサーバをクラスタから取り除きます。マスタサーバがダウンしたときには、新たにマスタとなるサーバを自動的に選び出します。このプロセスは数秒間で完了しますが、その間、書き込みは実行できなくなります

永続化とトランザクションをサポート

 Neo4jはディスクベースで動作し、データの永続性をサポートしています。また、単体のサーバで利用される場合に限り、トランザクションをサポートします。

単体サーバでの利用に適すデータベース製品

 Neo4jは水平拡張して膨大なデータを扱うというよりも、単体のサーバでオブジェクトをグラフ化するという用途において、RDBよりもはるかに高い性能を発揮するといえます。

Column:HBaseをフル活用、毎秒600万件の分析を実行するStumbleUpon

 StumbleUpon(スタンブルアポン)は、自分のWebサイトの好みを登録することで、自分にあったWebサイトの推薦を受けるとともに、好きなWebサイトを仲間内でシェアできるSNSです。専用のツールバーをブラウザに追加インストールすると、Thumbsup(いいね)、Thumbsdown(よくない)、Stumble(見つけた、ちょっと気になる)といったボタンを押すことで、Webサイトを評価できます。

 いいと思ったWebサイトに投票したり仲間とシェアしたりするための印を、Stumbleマークといいます。Stumbleマークは2011年8月時点で累積250億件、毎月10億件のペースで増加しています。

短縮URLサービスや広告プラットフォームにHBaseを利用

 StumbleUponは、ユーザーが記録したStumbleマークの履歴に基づき、その人が関心を持ちそうなWebサイトを推薦します。そのユーザーの履歴の格納先としては、FacebookやTwitterと同様に、シャーディング構成のMySQLを使用しています。しかし、この構成では運用の負荷が高いため、後発のサービスである「短縮URL」と「広告プラットフォーム」にはHBaseが採用されました。

 「Su. pr」はStumbleUponのリコメンド機能付き短縮URLサービスです。サービス初日からHBaseに90億件を超えるデータが格納され、短縮URLを通じたユーザーの行動履歴が日々蓄積されています。行動履歴は、HadoopMapReduceによって毎秒600万件のスピードで分析され、リコメンド情報としてHBase上の別のテーブルに格納されます。

 広告プラットフォームでは、広告主向けのレポートのリアルタイム性が要求されます。そのため、MapReduceによる集計は行わず、広告が表示されるごとにHBaseに格納された広告表示回数の情報を直接カウントアップしています。このような処理は、結果整合性を採用したDBMSでは実現できません。強い整合性を採用したHBaseを生かした設計といえるでしょう。

 このように、同社ではHBaseを利用することで、データを安全に整理し、素早く探し出し、適切に削除・更新し、分析を行っています。そして、こうした用途において、複数の安価なハードウェアにデータを格納できるNoSQLデータベースを高く評価しています。


OpenTSDBを開発し多様なデータをモニタ

 StumbleUponはさらに、HBaseをベースとして、分散拡張型の時系列データベースを開発しました。これはOpenTSDBと名付けられました。大規模なコンピューターシステムを構成するネットワーク、オペレーティングシステム、アプリケーションから収集されたデータを格納し、インデックス化し、測定するというニーズに対応し、そのデータに簡単にアクセスしてグラフ化するためにOpenTSDBは開発されました。

 StumbleUponは、数千のホストとアプリケーションから数千種に及ぶ測定値を集めています。そして、データを削除したりサンプルの形に間引いたりはせずに、そのまま格納しています。実際に数十万本の時系列を追跡し続けており、メインのデータセンターには日次6億件以上のデータを集積しています。その中でOpenTSDBは「大量データを非常に詳細にリアルタイムで監視しながら、わずかな運用作業でグラフを作成できる」と評価されています。


Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
PREVIEW
'; }else{ mask.innerHTML = '
画像をご覧いただくには会員登録が必要です
' + btn_txt + '
'; } if((_preview && location.hash.indexOf('maskoff') !== -1) || (typeof itmIdLogin !== 'undefined' && itmIdLogin == 1)){ img.style.visibility = 'visible'; }else{ nxt.parentNode.insertBefore(mask,nxt); } } } }; (function(d){ var _preview = d.domain.match(/(preview|broom|localhost)/); window.addEventListener('load',function(){ // islLogin 呼出済|preview if(d.getElementById('isLogin') || _preview){ mask_images({ sc:'0c1c43111448b131d65b3b380041de26f2edd6264ee1c371184f54d26ab53365', lc:'7d7179c146d0d6af4ebd304ab799a718fe949a8dcd660cd6d12fb97915f9ab0a', ac:'1a599d548ac1cb9a50f16ce3ba121520c8ab7e05d54e097bfa5b82cb5a328a0f', cr:'2c93f81754142e105c8bca17824745d14c8c4d69e9d7ede513e5530546e97641', bc:1 }); // islLogin なし }else{ var js = mask_images.setISLOGIN('//status.itmedia.co.jp/isLoginAIT.cgi','0c1c43111448b131d65b3b380041de26f2edd6264ee1c371184f54d26ab53365'); js.addEventListener('load',function(){ mask_images({ sc:'0c1c43111448b131d65b3b380041de26f2edd6264ee1c371184f54d26ab53365', lc:'7d7179c146d0d6af4ebd304ab799a718fe949a8dcd660cd6d12fb97915f9ab0a', ac:'1a599d548ac1cb9a50f16ce3ba121520c8ab7e05d54e097bfa5b82cb5a328a0f', cr:'2c93f81754142e105c8bca17824745d14c8c4d69e9d7ede513e5530546e97641', bc:1 }); }); } }); })(document);
LOADING
'; w.removeEventListener('scroll',arguments.callee,false); htmlRequest(_xhrfile,_idname); elem.setAttribute('data-status','true'); console.log('finished : ' + _idname); }else{ // console.log('retry : ' + _idname); } }else{ e_loader.innerHTML = '
LOADING
'; w.removeEventListener('scroll',arguments.callee,false); htmlRequest(_xhrfile,_idname); elem.setAttribute('data-status','true'); console.log('finished : ' + _idname); } } }; w.addEventListener('scroll',scrolling,false); // スクロールイベント scrolling(); // スクロールイベント(閲覧位置が半端な場合のために 1 回実行させる) }; w.addEventListener('load',loading,false); // LOAD 後に実装 };