Cloud Bigtableと非構造化データについて


# 背景
Google Cloud の勉強の一環として、HULFT IoT と Bigtable + α を用いて、何かしらのシステムを構築したいと考えております。
構築するシステムの詳細や格納するデータは未定の段階ですが、おそらくIoT系のデータ(画像など)を格納することになるため、BigTableがデータの格納先として適していると想定しました。
しかし、Bigtable 並びに 非構造化DB について知識を持ち合わせていなかったため、システム設計に取り組む前にそれぞれについて学ぶことにしました。
Bigtable を初めて扱う方やこれから利用したい方などに参考としていただければ幸いです。

# Cloud Bigtable とは
Google Cloudにて提供される、低レイテンシで高スループットの読み取りと書き込みをサポートし、超大容量データを Key-Value ストアに格納するのに理想的である、フルマネージドでスケーラブルな NoSQL データベース サービスです。

https://cloud.google.com/bigtable?hl=ja

下記のような特徴・特色があり、すでに様々なケース/用途で利用されているとのことでした。

### 特徴・特色
・高速なデータ通信
・高い可用性
・低レイテンシ
・大量の読み取りと書き込み、大規模なパフォーマンスの維持向けに最適化
・NoSQL ワイドカラム型データベース
・従量課金型の料金体系
・他のビッグデータツールと統合可能

### 扱うデータの例
・時系列データ。複数のサーバーにおける時間の経過に伴う CPU とメモリの使用状況など。
・マーケティング データ。購入履歴やお客様の好みなど。
・金融データ。取引履歴、株価、外国為替相場など。
・IoT（モノのインターネット）データ。電力量計と家庭電化製品からの使用状況レポートなど。
・グラフデータ。ユーザー間の接続状況に関する情報など。

https://cloud.google.com/bigtable/docs/overview?hl=ja

また、複数の導入事例やユースケースも合わせて公開されておりましたので、必要に応じて参照いただければと思います。

### BigQueryとの違い
初めにBigTable を利用したいと考え、少し調べてみると、類似の名称や似た特色を持つBigQuery が見受けられました。この2つのサービスは、名前に「Big」が含まれていることや大規模データを扱う点など多くの共通点があり、初めて知ったときはあまり差別化できていませんでした。しかし、ビッグデータのエコシステムにおいて、それぞれがサポートするユースケースは大きく異なります。
BigQuery とは、大量のリレーショナル構造化データ用のエンタープライズ データ ウェアハウスです。NoSQL データベースである Bigtable では SQL を実行できませんが、BigQuery であれば容易に実行でき、分析・解析を行うことができます。
代わりに、BigQuery はBusiness-intelligence/OLAP (Online Analytical Processing)システムとなるため、OLTP (オンライン トランザクション処理)システムであるBigtable と比べ、クエリのレイテンシは大きく劣ります。
BigQuery を利用して、Bigtable のデータを分析することはできるので、どのようなデータをどのような規模感で格納する必要があるのかを整理し、選択することが必要となります。

https://cloud.google.com/blog/ja/topics/developers-practitioners/bigtable-vs-bigquery-whats-difference




# 構造化データと非構造化データ
Bigtable が NoSQL ワイドカラム型データベースであり、膨大な非構造化データを扱うことに適したものだと知り、まずは格納対象のデータについて正しく理解したく、少し整理いたしました。

## 構造化データ
構造化データとは、データストレージに配置される前に事前定義され、ある定められた構造となるように整形されたデータです。検索、集計や比較などが行いやすく、データの解析や分析に最も適したデータ構造です。RDB（リレーショナル・データベース）に格納され、SQLなどによって、操作されます。

## 非構造化データ
構造化データに対して、非構造化データとは、事前に整形されず元の形式のまま保存され、使用時まで処理されないデータです。データベース化ができないため、検索や集計、解析に不向きなデータです。ドキュメント/テキストデータ, 画像, 動画, 音声, センサーログなど、日常の業務で生成されるさまざまなデータです。データベース化ができないため、そのままの状態では、検索や集計、解析に不向きとなっています。
データ内に規則性に関する区切りはあるものの、構造化データへの変換可否/方法が分からないXML、json、Key-Value形式などの「半構造化データ」も非構造化データに含まれます。
企業データの80%以上がこのカテゴリーに属し、そのうえ年間30%超の割合で増加していると言われています。
非構造化データを分析・活用するためには、「変換・加工」が必要になります。
格納については、構造化されたデータでないためそのままRDBに格納することは難しく、また膨大なデータ量となることが見込まれることが多いため、クラウドのストレージやデータレイクが活用されているようです。Bigtable は、その有力な選択肢の1つです。


# Cloud Bigtable について
改めて、Bigtable とは、Google Cloudにて提供される、低レイテンシで高スループットの読み取りと書き込みをサポートし、超大容量データを Key-Value ストアに格納するのに理想的である、フルマネージドでスケーラブルな NoSQL データベース サービスです。

### 主な機能
主な機能として、下記の3点が記載されておりました。
いずれも、超大容量のデータを高負荷時においても安定して扱えるようにするような仕組みであると理解しました。
・低レイテンシで高スループット
・ダウンタイムなしでクラスタをサイズ変更可能
・あらゆるワークロードを最適化するフレキシブルな自動レプリケーション

### 実際に使ってみた
cbt CLI を使用したクイックスタートにて、少しだけ実際のBigtable を操作してみました。
テーブルの作成 ~ データの読み書きまで、非常に簡単に実施することができました。しかし、大量のデータを扱うことはなかったため、Bigtable の性能/優位性を感じることはできませんでした。
注意点としては、Bigtable のインスタンスは用途に合わせてカスタマイズする要素が少なく、思いのほか高価であるため、試用が完了したら早めに削除すると良いかと思います。

手順などについては、下記に掲載されております。

https://cloud.google.com/bigtable/docs/create-instance-write-data-cbt-cli?hl=ja

### パフォーマンス劣化の例
パフォーマンスの劣化の要因もまとめられておりました。
ワイドカラム型データベースとはいえ、1行に格納するデータのサイズについては常に留意しておくべきだと感じました。
・1 つの読み取りリクエストで連続していない行キーまたは行範囲を大量に読み取る。
・テーブルのスキーマが正しく設計されていません。
・Bigtable テーブルの行に大量のデータが含まれています。
・Bigtable テーブルの行に大量のセルが含まれています。

https://cloud.google.com/bigtable/docs/performance?hl=ja

# おわりに
今回、Bigtable および 非構造化データについて簡単にまとめさせていただきました。
今後、何かしらのシステム構築を通し、さらに深く理解/活用していきたいと考えております。
続報についても、記事にさせていただければと考えております。