メニュー

スケーラブルな NoSQL データベースサービス Cloud Bigtable を使ってみよう!

【GCP入門編・第10回】スケーラブルな NoSQL データベースサービス Cloud Bigtable を使ってみよう!

GCP

記事投稿 | 2017.11.29

スケーラブルな NoSQL データベースサービス Cloud Bigtable を使ってみよう!

この記事では、 GCP のストレージサービスのひとつである、 Cloud Bigtable について紹介します。 Bigtable といえば、 NoSQL という概念が登場した初期から話題になることの多かった Google の内製ストレージシステムです。 Bigtable は Google 社内でのみ使用されるシステムでしたが、2006年に論文が公開されたことで存在が公になりました。現在多くのサービスが使用している HBase が、 Bigtable の論文をもとにして開発されたことは有名です。

GCP では、2015年から Bigtable をサービスの一部として利用することができるようになっています。 Bigtable の使いどころや特徴の解説、 Bigtable を利用する簡単なデモを通して、その強力な機能について知っていただければと思います。

この記事の目的

  • Cloud Bigtable の使いどころや特徴を学ぼう。
  • Cloud Bigtable の簡単なデモを通して、使い方を覚えよう。

Cloud Bigtable とは

Bigtable は、2006年に Google が公開した論文で、その詳細が明かされた Google の内製ストレージシステムです。特徴は、サーバー数を増やすことでペタバイト級の巨大なデータを扱えるスケーラブルな設計、要求される性能が高スループットであろうと低レイテンシーであろうと対応することができるパフォーマンスの高さ、そしてリレーションをサポートしない列指向のデータベースであるといったところでしょう。

Google では検索システムのインデックスの保存や、 Google Analytics のユーザーの行動データの蓄積、 Google Map や Google Earth のデータストアとしてなど、様々な用途に利用されています。 Bigtable は分散ロックサービスの Chubby 、分散ファイルシステムの Google File System (GFS)に依存しており、 GFS を中心としたこのエコシステムはそのまま Hadoop とそのサブプロジェクトに大きな影響を与えました。 この中でも HBase は、 Bigtable の論文を基に実装されたシステムです。

Cloud Bigtable はどのような場面に適しているか?

高いスループットをもち、データサイズが巨大になっても動作するというスケーラビリティを持つ一方、 RDBMS でおなじみの関連モデルを扱えないなど、かなり癖の強そうな Bigtable ですが、どのような場面に適しているのでしょうか。 Cloud Bigtable のドキュメントには、 最適なユースケースとして、金融取引のデータ、株価の変動データ、 IoT デバイスから出力されるデータ、時系列データが挙げられています。また、高いスループットが求められること、1つ1つの値は10メガバイトを超えないこと、といったことも注意点として書かれています。さらに、1テラバイトにデータが収まる場合には向かない、といったことも書かれています。ドキュメント中の ”Cloud Bigtable and other storage options” には、この場合はこの製品が適している、といった選択肢が挙げられていますので、 Cloud Bigtable を検討する際には参照するとよいでしょう。

Cloud Bigtable を使ってみよう

さて、それでは実際に Bigtable を使用してみましょう。 MySQL や PostgreSQL のような RDBMS に慣れていると、新鮮な感覚がするのではと思います。

Cloud Bigtable のインスタンスを立ち上げる

まずは GCP のコンソールを開き、左上メニューをクリックし、 ”API Manager” のページを開きます。 API Manager で ”Library” をクリックし、検索ボックスに ”Cloud Bigtable” と入力します。

01.png

ここで表示される API のうち、 ”Cloud Bigtable API” と ”Cloud Bigtable Admin API” をそれぞれ有効にしましょう。APIの名前をクリックしてジャンプした先にある [ENABLE] を押すと、 API が有効化されます。

02.png

API の有効化が完了したら、次は Cloud Bigtable のインスタンスを起動しましょう。インスタンスの起動はコンソール左上のメニューボタンを押して表示したメニューの “Bigtable” をクリックした先で行います。

03.png

初期状態では画面中央にサービスの紹介と、 [Create Instance] と [Learn More] のボタン以外は何も表示されていないかと思います。 [Create Instance] をクリックしましょう。

“Instance name” の欄に bigtable-instance-1 と入力します。入力が完了すると、 Instance ID 、 Cluster ID が自動的に生成されます。記事執筆時点では、選択できる Zone に asia-northeast1-a はありませんので、ここでは “asia-east1-a” を選択します。ノード数はデフォルトの3、 Storage Type は SSD にしておきます。なお、 SSD と HDD を選択するとパフォーマンスとコストの表示が切り替わります。実際に利用する際には、コストとワークロードに合わせて選択してください。

04.png

[Create] を押すと、インスタンスの起動が開始されます。起動が完了すると、以下の画面のようになっているでしょう。

05.png

cbt を使って Cloud Bigtable に接続する

次に、コマンドラインツールである cbt を利用して、 Cloud Bigtable に接続してみます。 cbt を利用するには、 Go 言語のランタイムが必要です。このページを参考にして、ランタイムをインストールしてください。その際、 $GOPATH/bin をパスに追加することを忘れないでください。 bash であれば、 ~/.bashrc もしくは ~/.bash_profile に以下のように追記します。

export PATH="$PATH:$GOPATH/bin"

さて、 Go 言語のランタイムのインストールが完了したら、 cbt のインストールを行います。以下のコマンドで cbt をインストールすることができます。

$ go get -u cloud.google.com/go/bigtable/cmd/cbt

06.png

特に何も出力されませんが、これで正常にインストールは完了しています。以下のコマンドで確認してみましょう。

$ cbt

07.png

ヘルプが表示され、インストールが成功したことがわかります。次に、以下の設定ファイルを ”~/.cbtrc” に記述します。

project = プロジェクト名
instance = bigtable-instance-1

これで cbt の設定は完了です。 Cloud Bigtable を操作してみましょう。

cbt で Cloud Bigtable を操作する

まず、テーブルを作成します。テーブルは、 RDBMS でいうところのテーブルと似たような概念です。

$ cbt createtable test-table

08.png

gcloud コマンドの認証情報が利用された事以外は特に何も出力がありません。以下のコマンドでテーブルの作成を確認します。

$ cbt ls

09.png

test-table という名前のテーブルが作成されています。次に、テーブルに対してカラムファミリーを追加します。カラムファミリーは Bigtable のアクセスコントロールの最小単位で、複数のカラムをまとめたものです。 Bigtable ではテーブルに対してまずカラムファミリーを作成し、そのカラムファミリーにカラム(キー)と値を入力する、という順番で操作を行います。

まず、 test-table に対して新しいカラムファミリー、 testcf を追加します。

$ cbt createfamily test-table testcf

10.png

カラムファミリーの追加を確認します。

$ cbt ls test-table

11.png

それでは、値を格納してみましょう。

$ cbt set test-table r1 testcf:column1=test-value
$ cbt set test-table r2 testcf:column1=test-value2

12.png

次に、テーブルに格納された値を読み出します。

$ cbt read test-table

13.png

値が格納されていることがわかります。

cbt では、データの読み出しを行う read コマンドに指定できるのは、 row の prefix と start 、 end 取得するデータの数である count くらいで、複雑なクエリを投げることはできません。集計処理といった複雑なデータ処理を行う際は、 API を使うか、 Cloud Dataproc を利用することになります。

最後に、テーブルを削除し、インスタンスを削除します。

$ cbt deletetable test-table

14.png

インスタンスの削除は、 GCP のコンソールから、 Cloud Bigtable のインスタンス画面を表示し、画面右上にある [DELETE] をクリックします。

15.png

おわりに

Bigtable のインスタンスを起動し、テーブルを作成して値を追加しました。 RDBMS のように複雑なクエリを使うことができないことから、大量のデータを高速に追加し続ける用途に最適化されたシステム、といった印象を受けるかもしれません。

Bigtable は1つのことに特化したシステムであり、単体で利用するというよりも他のツールと組み合わせて使用することで力を発揮するタイプのシステムだと感じます。 GCP 及び外部のツールとの統合に関しては、ドキュメントに詳しい解説があります。是非こちらも参照してみてください。

PAGE TOP