Googleの巨大分散データストアBigtableとDatastoreを理解する

ITpro

今回は、米Googleのクラウド環境に存在するデータベースBigtableとDatastoreサービスを紹介します。「巨大分散」という新たなデータベースの地平を切り開くためにどのような工夫をしているか、じっくり見ていきましょう。

 「Bigtable」は、Googleの主要なサービスを支える独自の巨大分散データストアです*1。Bigtableは、2005年4月から本格的な運用(プロダクション利用)が開始されたもので、Googleの検索サービスをはじめ、Gmail、YouTube、Google Maps、Google日本語入力、そしてApp Engineなど、70以上のプロジェクトで利用されています。その規模は、数P(ペタ)バイト~数十Pバイトに達しているでしょう。

Bigtableは、Google検索サービスにおける膨大なコンテンツやインデックスを保持し、高速に検索するための専用データストアとして開発されました。Bigtableは、リレーショナルデータベース(Relational Database、RDB)ではありません。「NoSQL(Not Only SQL)」に分類されることもある、リレーショナルモデルに基づかないデータストアです。

Bigtableでは、図1のように、行と列からなる「テーブル」にデータを格納し、「キー」を用いてテーブルの個々の行に対する読み書きを行います*2。「RDBと同じじゃないか」と思う人もいるかもしれませんが、違いは後で出てきます。

図1●Bigtableのテーブル例
図1●Bigtableのテーブル例

Bigtableの特徴は、スケーラビリティに制限がないことです。Bigtableのテーブルに保存可能な行数には制限がありません。例えば、数十億件に達するような膨大なデータをテーブルに保存して、テーブル全体に膨大な人数のユーザーが同時にアクセスしても、個々の読み書き処理は平均数十ミリ秒程度です。

可用性の高さも特徴です。Bigtableのテーブルにデータを書き込むと3台以上のサーバーにコピーされます。うち1台は異なるロケーションのデータセンターにあるサーバーが選ばれます。そのため、データセンター規模で障害が発生しても、Bigtableに保存されたデータが失われることはなく、短時間でサービスを復旧できます。

BigtableはハイエンドのRDBクラスタに匹敵するようなレプリケーション(複製)機能やディザスタリカバリー機能を備えており、サーバーやデータセンターの障害によってデータが失われる可能性は低くなります。データのバックアップ作業の負担が軽減されるでしょう。さらに、Bigtableのサービスを構成するサーバー群はすべてが冗長化されており、SPoF*3は徹底的に排除されています。

 

Bigtableでは「検索」ができない!

Bigtableが、RDBでは実現できないスケーラビリティや高可用性を実現できる理由の一つは、RDBでは当たり前の機能であるデータの検索(SQLのSELECT文)やテーブルの結合(JOIN文)といった機能をそぎ落としているためです。

Bigtableでは驚くべきことに、データの検索ができません。例えば、名前が「佐藤」である従業員一覧を取得するといった単純な検索でさえ、Bigtableの標準機能では行えません。さらに、テーブル結合の機能も備えていません。「部署テーブル」と「従業員テーブル」を結合し、従業員名とその部署名の一覧を取得する、といった処理もBigtableの機能だけではできません。RDBに慣れた開発者からすると、データベース管理システムの存在理由とも言えるこれら二つの機能が利用できないのは驚くべきことでしょう。

Bigtableにできる処理は、(1)キーによる行のCRUD(クラッド)、(2)キーによるスキャン(範囲検索)、という2種類です。キーによる行のCRUDとは、Bigtableの個々の行に割り当てられた「キー」(RDBにおける主キーに相当するもの)を指定して、行の追加(CREATE)、取得(READ)、更新(UPDATE)、削除(DELETE)を行うことです。一方、キーによるスキャンは、キーの前方一致検索もしくは範囲指定検索により、複数行を一括取得する機能です。

図2はキーによるスキャンの例です。(1)では、「02」で始まるキーを前方一致で検索して、2行を取得しています。(2)では、「020」から「050」の範囲内にあるキーを検索し、3行を得ています。

図2●Bigtableではキーによるスキャン(範囲検索)が可能
図2●Bigtableではキーによるスキャン(範囲検索)が可能

Bigtableにできることは、なんとこれだけです。RDBに慣れた開発者からすると、信じられないほど機能が少ないと思いませんか。アプリケーション開発者は、RDBに備わる豊富で強力な検索機能に代わるものを、アプリケーション側で工夫して実装しなければなりません。端的に言えば、Bigtableを使うと開発者の負担は増えてしまうのです。

続きを読む… ITpro

Be the first to comment

Leave a Reply

Your email address will not be published.


*