SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MBaaSと連携するAndroidアプリを作る

RDBとの比較で理解する、MBaaSのデータストアの基本

MBaaSと連携するAndroidアプリを作る 第3回


  • このエントリーをはてなブックマークに追加

ダウンロード StampTime_03.zip (2.2 MB)

 本記事は、MBaaSであるニフティクラウド mobile backend(NCMB)と連携するAndroidアプリ開発の解説記事です。グループウェアとしてタスク(仕事)に費やした時間を記録、集計するアプリを作ってみます。NCMBの機能としては、主にユーザー登録・認証、データストアを利用し、MBaaSを使うアプリ開発の手順と便利なところを解説していきたいと思います。前回はログイン・ログアウト処理とユーザー登録処理を作成しました。今回はMBaaSのデータストアの基本について、リレーショナルデータベース(RDB)と比較しながら解説していきたいと思います。

  • このエントリーをはてなブックマークに追加

対象読者

 MBaaSと連携するAndroidアプリを開発したい方。JavaとEclipseについては解説しませんので、JavaとEclipseの基本的な知識があると読みやすいでしょう。

必要な環境

  • JDK
  • Eclipse
  • Android SDK
  • ニフティクラウド Mobile backend Basic(無料版)

RDBとの比較でMBaaSのデータストアの仕組みを理解する

 NCMBをはじめとするMBaaSでは、RDBではなく「Key-Value形式」でデータをストアします。実際にデータストアの機能を使う前に、従来のWebシステムやクライアントサーバーシステムで主に使われているRDBと、Key-Value形式との違いをみていきましょう。

RDBでは

RDBのイメージ
リレーショナルデータベースのイメージ

 この図のようにRDBでは、2次元の「表(テーブル)」としてデータを管理します。一つのデータベースには複数のテーブルを持つことができます。

 テーブルは関連のある「列(フィールド)」で構成されます。たとえば、名簿テーブルを作成する場合、ある人の名前に関連するフィールドとしては、性別や生年月日、住所などが考えられるでしょう。RDBでは、まず、「スキーマ」と呼ばれるテーブル定義を作成します。このテーブルにはどんな列を持つのか、また、その列のデータ型は何か、を必要な列の分だけ定義していきます。

 たとえば、オープンソースデータベースとして有名なMySQLの整数型にはTINYINT、SMALLINT、MEDIUMINT、INT、BIGINTと4つもバリエーションがあります。何が違うのかというと、データを記憶するために使うバイト数が違うのです。したがって、記憶できる数値の範囲が異なります。 表はオープンソースデータベースとして有名なMySQLのデータ型の一部ですが、RDBには一般に多くの種類のデータ型が用意されています。

 RDBが普及し始めた頃は、ハードディスクを始めとする補助記憶装置は高価でした。記憶容量当たりの単価が高く、今のようにテラバイト(TB)やギガバイト(GB)の製品は存在しませんでした。RDBを使うエンジニアやプログラマが頭を悩ますテーマは、いかに無駄なく情報をデータベースに詰め込み、効率よく取り出すかでした。ですから、テーブル定義は気を遣う重要な仕事なのです。

 次の表は、MySQLで名簿テーブルをテーブル定義した例です。

名簿テーブルを例としたRDBのテーブル定義
項目名 データ型 備考
ID INT 主キー、オートインクリメント(自動採番)
名前 CHAR(n) 文字数を限定しやすい
性別 TINYINT 0:男性、1:女性
生年月日 DATE -
住所 VARCHAR(n) 文字数を限定しにくい

 IDはレコードを一意に識別する主キーですから、INT型にします。名前と住所はどちらも文字列型ですが、文字数を何文字程度と決めやすい場合は、固定長文字列型であるCHAR型を使います。住所のように長さにバラツキが予想される場合は、可変長文字列型であるVARCHAR型を使います。

 性別は男性、女性と文字列で記憶するよりも小さな整数型で0は男性、1は女性と決めて記憶した方が、記憶容量を食いません。また、生年月日はDATE型とします。

 このように、まずデータベースをきっちり作成してからプログラムを作成するのが、RDBを使うアプリケーション開発の手順です。

Key-Valueストアでは

 では、クラウド時代である現在ではどうでしょうか。ハードディスクやSSDの容量当たりの単価は安くなり、クラウドとして多くのサーバー群が用意されているので、ストレージの容量は簡単にスケールアップできます。

 このようなハードウェア環境の中で、NCMBをはじめとするMBaaSでは、データをKey-Valueのペアで記憶します。つまり、"名前":"青木 一郎"という形式で記憶します。

 このKey-Value形式のデータストアはRDBに比べて、拡張すること、分散することが容易です。つまり、Key-Value形式のデータストアはスケーラビリティが高いといえます。また、同時に多くのアクセスが発生してもレスポンスが低下しにくいという特徴も兼ね備えています。

 なぜかと言うと、RDBではデータを安全に矛盾なく更新するために更新時にはレコードをロックします。同時アクセス数が多いと誰かがロックしたレコードが解放されるのを待つ状態が発生してしまいます。それに対して、Key-Valueストアでは大量のデータを高速に処理するためにロックを掛けないので、待ち状態が発生しません。

 では、RDBのレコードのようなイメージは、どうやって表現するのでしょうか。

{"名前":"青木 一郎","性別":"0","生年月日":"1987/10/2","住所":"石川県金沢市大手町◯◯"}

 上記のように、Key-Valueをセットにして表現します。

 NCMBでは、このKey-Value値のセットをクラスと呼びます。クラスは事前に定義しておいて、プログラムからレコードを登録することもできますし、事前の定義なしで、いきなりレコードを登録することもできます。

 なぜそんなことができるかをRDBとの比較で考えましょう。NCMBのクラスでは、文字列、配列、数字、日付、真偽値、オブジェクト、位置情報(緯度・経度)を記憶することができますが、フィールドにデータ型を指定する必要はありません。

 そして、フィールド名はKey-Value値のKeyとして渡します。レコードを一意に識別するIDは指定しなくても自動的に作成されます。ですから、事前の定義なしでもクラスにレコードを作成していくことができるわけです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ダッシュボードでクラスを作ってみる

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
MBaaSと連携するAndroidアプリを作る連載記事一覧

もっと読む

この記事の著者

金宏 和實(カネヒロ カズミ)

 富山県高岡市出身で在住。ソフトウェア開発者兼ライター。株式会社イーザー関西学院大学文学部仏文科卒。第一種情報処理技術者(今で言うと、応用情報技術者。第一種→ソフ開→応用と変遷したようだ)主な著書『作ればわかる!Androidプログラミング第2版 -SDK4対応-』『VS 2010で作る Web-DB アプリ入門』『ベテランが丁寧に教えてくれるデータベースの知識と実務』『はじめてのAndroidアプリ作成 センサー活用とクラウド連携』『はじめてのAndroidアプリ作成 基本プログラミング』Web連載『VB2008で楽々Webプログラミング』『再発見!VB2005快適プログラミング』 『こうしろうのMindStroms日記』 個人的なブログはこちらです。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8126 2014/10/16 19:47

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング