GCP上のKey-Value型データベースCloud Datastore

2015年2月5日(木)
中川 啓志

AWS DynamoDBとの比較

AWS DynamoDBとは、Amazon Web Servicesで提供されるKey-Value型の管理型データベースです。Cloud Datastoreと同じく、スキーマレスな構造でスケーラビリティと可用性において優れているという特徴があります。

表1:Cloud DatastoreとDynamoDBの違い

Cloud DatastoreDynamoDB
データベースの構造スキーマレススキーマレス
プライマリキー1カラムから構成されるKey2カラムで構成されるKeys(Hash Key+Range Key)
リストプロパティの作成可能可能
選択できる一貫性の種類・結果整合性
・強一貫性
・結果整合性
・強一貫性
データセンター間をまたぐトランザクション処理可能(Entity Group)可能(Transaction Library)
単一プロパティに対するインデックス作成可能(自動生成)可能
複数プロパティに対するインデックス作成可能(カスタムでインデックスを登録する)可能(Local Secondary Index、Global Secondary Index)
課金対象・読み込み/書き込み操作
・データ容量
・読み込み/書き込みスループットの容量
・データ容量

一貫性

Cloud Datastore、DynamoDBのいずれも、一貫性については結果整合性を採用していていますが、場合により強一貫性を選択できるようにもなっています。

インデックス生成

Cloud Datastoreでは、単一プロパティに対してはインデックスが自動で生成されますが、DynamoDBでは、Local Secondary IndexあるいはGlobal Secondary Indexというインデックスを予め登録しておく必要があります。

課金体系

Cloud Datastore、DynamoDBのいずれも、データの読み込み/書き込み操作と保存したデータ量を課金対象としています。Cloud Datastoreにおいては、読み込み/書き込み操作の回数で計算されるのに対して、DynamoDBにおいては、プロビジョンされた読み込み/書き込みスループットの容量で計算されるという違いがあります。例えば、1日あたり100万回の書き込みは、1秒あたり平均11.6回の書き込みとなり、12の書き込み容量ユニットが必要です。東京リージョンでは、12の書き込み容量ユニットは1日あたり$0.2173かかることになります。

表2:2014年12月現在のアジア地域(AWSは東京リージョン)の料金比較

読み込み書き込みデータ容量
Cloud Datastore1日50,000回まで無料

それ以上$0.06/100,000回
1日50,000回まで無料

それ以上$0.06/100,000回
1GBまで無料

それ以上1GBにつき$0.18/月
DynamoDB25回/秒まで無料

それ以上は1回/秒ごとに$0.0544 毎月
25回/秒まで無料

それ以上は1回/秒ごとに$0.5432 毎月
25 GB/月まで無料

それ以上1GBにつき$0.285/月

データベース設計におけるベストプラクティス

RDBMSにおけるカラム方向の走査は、Cloud Datastoreではサーバをまたいだ処理となり、非効率です。「エンティティ間のJOINがない」「集計関数がない」「クエリの全文検索ができない」などのCloud Datastoreのデメリットは、こういった非効率性に起因しています。反面、同じサーバ内のデータを走査するような場合は、Self-merge Joinなどデータの取得を効率的に行う仕組みが提供されています。Cloud Datastoreにおいては、非効率な操作を避け効率的な操作のみ行うことが重要です。

スケーラビリティのためにはDatastore APIを使用する

Cloud Datastoreが備えるスケーラビリティの恩恵を受けるためには、GQLではなくDatastore APIのほうが適しています。Datastore APIはデータ参照の速度も速く、また非同期による読み込み/書き込みをサポートしているため、スケーラブルなアプリケーション開発が可能になります。また、キャッシュの自動化やトランザクション処理も備えており、Cloud Datastoreのパフォーマンスを最大限に発揮するにはDatastore APIの使用が望ましいです。

正規化しない

Cloud Datastoreにおいて、正規化は必ずしも必要ではありません。RDBMSにおける1対多あるいは多対多の関係性を実現する仕組みとして、KeyPropertyやリストプロパティという手法が提供されており、これらを使って非正規化を行います。Cloud Datastoreのデータベース設計において優先されるのは、データのatomicity(不可分性)ではなく、あくまで操作のefficiency(効率性)です。

一貫性を使い分ける

Cloud Datastoreでは、強度の異なる一貫性がありDatastore APIを利用して使い分けます。常に最新の情報をデータベースに反映させる必要がある場合は強一貫性を、そうでなければ結果整合性を選択します。

トランザクションが必要になったときにEntity Groupを使用する

Cloud DatastoreにおけるEntity Groupは、データセンターをまたいだトランザクション処理を実現させるための仕組みです。すべてのデータの操作に対して、トランザクション処理を行うのではなく、トランザクションが必要になったときのみEntity Groupを使用し処理を行うのが望ましいです。

【参考文献】

「Paxos Algorithm」
http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/archive/paxos_made_live.pdf

「Self-merge Join」
https://dl.google.com/io/2009/pres/W_0415_Building_Scalable_Complex_App_Engines.pdf

株式会社ゴーガ エンジニア
北海道大学大学院工学研究科情報エレクトロニクス専攻修了およびニューヨーク州立大学オールバニー校情報科学専攻修了。日米でそれぞれ修士号を取得。北大では半導体の表面物理の研究に従事し、成果が物理学の専門誌としては最も権威があるフィジカルレビューレターズ誌に掲載される。米国では、Center for Technology in GovernmentやNYS Joint Commission on Public Ethicsという組織を通じて、本場のオープンデータとオープンソースのプロジェクトに携わる。得意料理はお好み焼き。O型のおひつじ座。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています