Google App Engineで開発するスケールするアプリケーション(前編)
Google App EngineとTwitterの連携アプリケーション構築
Google App Engineでアプリケーションを実行するまで
Google App Engine上で動くアプリケーションを開発するには、Google App Engine SDKをGoogle App Engineのサイトから取得する必要があります。図9にローカルのPCでの開発環境とGoogleサーバでの実行環境の関係を示しました。
管理コンソールでは、データストアに保存されたデータ、リソースの使用量、アプリケーションが出力したログなどをアプリケーションごとに参照できます。
Datastore
Datastoreはスキーマレスなデータベースで、そのバックエンドではGoogleが独自で開発したスケーラブルな分散ストレージであるBigtableが使用されています。Bigtableは、Googleが独自に開発したスケーラブルな分散ストレージ型データベースです。
Bigtableはシステムにサーバを簡単に増設し、再設定なしで追加したリソースを自動的に利用し始めるように設計されているので、数百から数千台のサーバのペタバイトまでの大規模データを容易に扱い、運用することを可能にしています。天文学的な量のデータを扱うGoogleのサービスを支えているのはこのスケーラブルなデータベースであるBigtableであるといっても過言ではないでしょう。
Bigtableは、OracleやMySQL、PostgreSQLのような一般的なリレーショナルデータベースではなく、キー(Key)と呼ばれる値を基に、それに対応する値を格納する形式の、いわゆるKey-Value型データベース(Key-Value Storage)です。
Kind、Entity、Property
Datastoreは、Kind、Entity、Propertyなどの概念を導入することによって、アプリケーションからBigtable上のデータを扱いやすくなるようなAPIを提供しています。以下の表に、Datastoreで使用される概念をまとめました。
| 名前 | 説明 |
| Kind | RDBMSのテーブルに該当する。プログラム上では、クラスによって表現される。 |
| Entity | Kindがインスタンス化されたもの。アプリケーションで扱うデータは、インスタンスとそのプロパティとしてDatastoreに保存される。 |
| Property | インスタンスが保持する属性 |
トランザクション
Datastoreでは、Entity Groupという概念を導入し、Entity Groupの保存に関してのみトランザクションを保証しています。Entity Groupとは、ツリー状に階層化されたエンティティの集まりのことをいいます。Entity Groupを保存すると、同一Entity Groupのデータは、同一ノード上に保存されます。
DatastoreとBigtableのバックエンド
Bigtable は、アプリケーションからみると、巨大なテーブルのイメージですが、実際はタブレットと呼ばれる複数の行を1つの単位とした固まりとして分割され、保存されています。そして、そのタブレットの物理データは、分散ファイルシステムのGFS上に保存されます。これらの関係を図11に示しました。
タブレットサーバ
1つのタブレットサーバは、10~1000個のタブレットを管理し、1つのタブレットは100MB~200MBのサイズです。タブレットはGFS上に保存されますが、そのタブレットはSSTableという読み込み専用の単純な検索テーブルとして複数のファイルに保存されます。タブレットサーバは、タブレットごとにメモリ上にmemtableという読み書き可能な小さなテーブルを用意し、タブレットの内容の読み書きをそのテーブルのデータの上で実行します。memtableの読み書きの内容は、コミットログとしてGFS上に保存されるので、タブレットサーバが故障した場合も、コミットログによってその内容が復元されるようになっています。タブレットサーバは、memtableが大きくなった場合に、新しい SSTableに、そのデータ内容を書き出す「マイナーコンパクション」を実行し、データを保存します。
Google File System(GFS)
Bigtableの内容は、GFSに物理ファイルとして保存されます。GFSは、ロック機構を持たず、追記型でデータを次々と追加していく仕組みにすることで、巨大なディスク空間としてのスケーラビリティを実現しています。GFSは、多数のチャンクサーバ(Chunk Server)から構成されていて、それらのサーバに接続されたディスクに情報が保存されます。データの書き込みはGFSの機能で、3台のチャンクサーバにコピーされるので、1台のチャンクサーバが故障したとしても、他のチャンクサーバにデータは保存されているので、データの保全性は保たれることになります。
- 修正履歴
-
- 2009/12/27 14:06 後編を中編・後編に変更した。
- 2009/12/04 19:24 Google Earthのスペルミスを修正。
この記事は参考になりましたか?
- Google App Engineで開発するスケールするアプリケーション連載記事一覧
-
- Google App Engineで開発するスケールするアプリケーション(後編)
- Google App Engineで開発するスケールするアプリケーション(中編)
- Google App Engineで開発するスケールするアプリケーション(前編)
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



