ナビゲーションをスキップする

Xamarin と DocumentDB を利用して地球規模のモバイル アプリを数分で作成する方法

1月 24, 2017 に投稿済み

Principal Group Engineering Manager, Azure Cosmos DB

2017 年 5 月 10 日現在

Azure Cosmos DB は、Microsoft が提供するグローバル分散型のマルチモデル データベースです。Azure Cosmos DB は、グローバル分散と水平方向への拡張性を中心として一から構築されました。透過的なスケーリングとあらゆる場所のユーザーへのデータ レプリケーションにより、使い始めてすぐに任意の数の Azure リージョン全体でグローバル分散を実現できます。世界中のスループットとストレージを弾力的にスケーリングでき、お支払いは必要なスループットとストレージの分のみとなります。Azure Cosmos DB では、世界中のあらゆる場所で 99 パーセントのユーザーの待機時間が確実に 1 桁ミリ秒となります。また、明確でわかりやすい複数の整合性モデルでパフォーマンスを細かく調整することができ、マルチホーム機能により高可用性も保証されます。これらはすべて、業界トップ レベルのサービス レベル アグリーメント (SLA) の対象となります。

Azure Cosmos DB は真にスキーマ非依存であり、スキーマやインデックスの管理にお客様が手を煩わせることなく、自動ですべてのデータのインデックスが作成されます。またマルチモデルでもあり、ドキュメント、キー値、グラフ、列ファミリの各データ モデルにネイティブに対応しています。Azure Cosmos DB では DocumentDB SQL (ドキュメント)、MongoDB (ドキュメント)、Azure Table Storage (キー値)、Gremlin (グラフ) などの API がネイティブにサポートされているため、お好きな API を利用してデータにアクセスできます。


ほとんどのモバイル アプリでは、クラウドにデータを格納する必要があります。Azure DocumentDB は、モバイル アプリ向けの優れたクラウド データベースです。モバイル開発者が必要なすべてのものを備えています。必要に応じて拡大縮小できるフル マネージドのサービスとしての NoSQL データベースで、ユーザーが世界中どこに行っても、アプリケーションにデータを完全に透過的に提供できます。 本日は、Xamarin モバイル プラットフォーム向けの Azure DocumentDB SDK を発表します。この SDK を使用すると、中間層なしで、モバイル アプリが DocumentDB と直接やり取りすることができます。

モバイル開発者が DocumentDB からすぐに得られるメリットは次のとおりです。

DocDB Xamrin_300

  • スキーマなしのデータに対するリッチ クエリ。DocumentDB では、データをスキーマなしの JSON ドキュメントとして異種コレクションに格納し、高速なリッチ クエリを提供します。スキーマやインデックスについて心配する必要はありません。
  • 高速。保証。 DocumentDB を使用してドキュメントを読み書きするのには、数ミリ秒しかかかりません。開発者は必要なスループットを指定でき、DocumentDB は 99.99% の SLA でそのスループットを引き受けます。
  • 無限のスケール。 DocumentDB のコレクションは、アプリの規模の拡大に合わせて増加します。小さいデータ サイズと 1 秒あたり数百件の要求から開始し、大きいデータ サイズ、1 秒あたり数千万や数億件の要求のスループット、ペタバイトのデータに任意に拡張できます。
  • グローバルに分散。 モバイル アプリ ユーザーは外に出かけ、世界中を飛び回ることもよくあります。DocumentDB は、グローバル分散データベースです。地図上で 1 回クリックするだけで、ユーザーがどこにいてもデータが提供されます。
  • 組み込みの豊富な承認機能。 DocumentDB では、複雑なカスタムの承認コードを作成せずに、ユーザーごとのデータやマルチ ユーザー共有データのような一般的なパターンを簡単に実装できます。
  • 地理空間クエリ。 現在、多くのモバイル アプリが地理的な場所に応じたエクスペリエンスを提供しています。DocumentDB では、地理空間型を高いレベルでサポートすることにより、そうしたエクスペリエンスを非常に簡単に実現できます。
  • バイナリの添付ファイル。 アプリ データには、バイナリ BLOB が含まれていることがよくあります。添付ファイルがネイティブでサポートされているため、DocumentDB をアプリ データのワンストップ ショップとして簡単に使用できます。

それでは、一緒にアプリを作成しましょう。

手順 1.はじめる

DocumentDB の利用を開始するのは簡単です。Azure portal に移動し、新しい DocumentDB アカウントを作成します。次に、[クイック スタート] タブに移動し、Xamarin Forms の Todo リスト サンプルをダウンロードすると、DocumentDB アカウントに接続されます。 

画像

または、既存の Xamarin アプリがある場合は、単純にこの DocumentDB NuGet パッケージを追加できます。現在、Xamarin.IOS、Xamarin.Android、および Xamarin Forms の共有ライブラリをサポートしています。

手順 2.データの処理

DocumentDB では、データ レコードをスキーマなしの JSON ドキュメントとして異種コレクションに格納します。同じコレクションに異なる構造のドキュメントを格納できます。

スクリーンショット 2017-01-23 14.44.12

Xamarin プロジェクトでは、スキーマなしのデータに対して統合言語クエリを使用することができます。

スクリーンショット 2017-01-23 14.47.29

手順 3.ユーザーの追加

多くの入門サンプルと同様に、先ほどダウンロードした DocumentDB のサンプルでは、アプリのコード内にハードコードされたマスター キーを使用してサービスに対して認証を行います。この方法は、ローカル エミュレーター以外でアプリを実行する場合にはお勧めしません。攻撃者がマスター キーを入手すると、DocumentDB アカウントの全データのセキュリティが侵害されます。

代わりに、ログインしているユーザーのレコードにのみアプリがアクセスできるようにします。DocumentDB では、必要に応じて、コレクション内のすべてのドキュメント、一連のドキュメント、または特定のドキュメントに対する読み取りアクセスまたは読み取り/書き込みアクセスをアプリケーションに付与できます。

たとえば、この Todo リスト アプリをマルチ ユーザー Todo リスト アプリに変更する方法を次に示します。サンプルの完全なバージョンは、こちらから入手できます。 

  • Facebook、Active Directory などのプロバイダーを使用したログインをアプリに追加します。
  • パーティション キーとして /userId を使用して DocumentDB UserItems コレクションを作成します。コレクションのパーティション キーを指定すると、高速なクエリを提供する一方で、アプリのユーザー数の増加に応じて DocumentDB を無限に拡張できます。
  • DocumentDB リソース トークン ブローカーを追加します。これは、ユーザーを認証し、ログイン ユーザーに対してユーザーのパーティション内のドキュメントにのみアクセスできる有効期間の短いトークンを発行する簡単な Web API です。この例では、App Service でリソース トークン ブローカーをホストします。
  • Facebook を使用してリソース トークン ブローカーに対して認証し、ログインした Facebook ユーザーのリソース トークンを要求して、UserItems コレクション内のユーザー データにアクセスするようにアプリを変更します。  

次の図には、このソリューションを示しています。Microsoft では、DocumentDB で OAuth を高いレベルでサポートすることにより、リソース トークン ブローカーを不要にすることを検討しています。良いアイデアだと思う場合は、この UserVoice 項目に投票してください。

tokenbroker

ここで、2 人のユーザーが同じ todolist にアクセスできるようにする場合は、リソース トークン ブローカーでアクセス トークンにアクセス許可を追加するだけです。 完全なサンプルは、こちらで見つけることができます。

手順 4.オンデマンドでの拡張

DocumentDB は、サービスとしてのマネージド データベースです。 ユーザー ベースが拡大しても、VM のプロビジョニングやコア数の増加について心配する必要はありません。必要なのは、アプリに必要な 1 秒あたりの操作数 (スループット) を DocumentDB に指示することだけです。ポータルの [スケール] タブで、1 秒あたりの要求ユニット (RU) と呼ばれるスループットの尺度を使用して、スループットを指定できます。たとえば、1KB のドキュメントの読み取り操作には 1 RU を要します。 また、"スループット" メトリックのアラートを追加して、トラフィックの増加を監視し、アラートの発生に応じてスループットをプログラムで変更することもできます。

画像  

手順 5.世界規模化

アプリが普及すると、ユーザーが世界中に広がる可能性があります。また、DocumentDB コレクションを作成した Azure データ センターに隕石が落ちた場合に備えておくことが必要なこともあります。Azure portal で、DocumentDB アカウントにアクセスし、地図上でクリックすると、世界中の任意の数のリージョンにデータを継続的にレプリケートできます。こうすると、ユーザーがどこにいてもデータを利用できるようにし、万一に備えたフェールオーバー ポリシーを追加することができます。

画像

Xamarin アプリケーションで DocumentDB を活用する際に、このブログとサンプルが役立つことを願っています。同様のパターンは、DocumentDB JavaScript SDK を使用した Cordova アプリや、DocumentDB REST API を使用したネイティブ iOS/Android アプリで使用することができます。

今までどおり、UserVoice、StackOverflow #azure-documentdb、または Twitter @DocumentDB から、DocumentDB に関するご意見や今後の改善点をお聞かせください。