SHOEISHA iD

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

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

Microsoft AzureのNoSQLデータベース「Cosmos DB」を使ってみよう

Microsoft AzureのNoSQLデータベース「Cosmos DB」における実装方法を知る

Microsoft AzureのNoSQLデータベース「Cosmos DB」を使ってみよう 第3回

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

データベースの作成

 次に、データベースを作成するための、CreateDatabaseIfNotExistsAsyncメソッドを作成します。

 リスト6のコードではデータベースへのアクセスを試みて、データベースが存在しなかった場合に発生する例外、DocumentClientExceptionをキャッチし、その例外オブジェクトのHTTPステータスコードが「404(Not Found)」だった場合にデータベースを作成するようにしています。

リスト6 データベース作成メソッド(DocumentRepository.cs)
private static async Task CreateDatabaseIfNotExistsAsync()
{
    try
    {
        // データベースを参照する
        await client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseId));
    }
    catch (DocumentClientException e)
    {
        if (e.StatusCode == HttpStatusCode.NotFound)
        {
            // データベースが存在しなかったため、新規作成する
            await client.CreateDatabaseAsync(new Database {Id = DatabaseId});
        }
        else
        {
            throw;
        }
    }
}

コレクションの作成

 コレクションの作成は、CreateCollectionIfNotExistsAsyncメソッドに追加していきます。

 コードの流れはデータベースの作成とほぼ同じで、コレクションへのアクセスを試みても、それが存在しなければ新たにコレクションを作成するようにしています。

リスト7 コレクション作成メソッド(DocumentRepository.cs)
private static async Task CreateCollectionIfNotExistsAsync()
{
    try
    {
        // コレクションを参照する
        await client.ReadDocumentCollectionAsync(
            UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId));
    }
    catch (DocumentClientException e)
    {
        if (e.StatusCode == HttpStatusCode.NotFound)
        {
            // コレクションが存在しなかったため、新規作成する
            await client.CreateDocumentCollectionAsync(
                UriFactory.CreateDatabaseUri(DatabaseId),
                new DocumentCollection {Id = CollectionId},
                new RequestOptions {OfferThroughput = 400}); // OfferThroughputにはRU/sを設定する
        }
        else
        {
            throw;
        }
    }
}

 コード中のCreateDocumentCollectionAsyncメソッドでは、第3引数で作成するコレクションのオプション情報を指定します。OfferThroughputだけは必須入力となっており、ここには前回説明したRU/sを設定する必要があります。今回は、RU/sとして指定できる最低値の400を指定しています。

初期化メソッドの修正

 初期化メソッドの中に、データベースとコレクションの作成メソッドを呼び出すコードを追加します。Initializeメソッドをリスト8の通りに修正してください。

リスト8 初期化メソッドの修正(DocumentRepository.cs)
public static void Initialize()
{
    client = new DocumentClient(new Uri(EndpointUrl), AuthKey);
    CreateDatabaseIfNotExistsAsync().Wait();
    CreateCollectionIfNotExistsAsync().Wait();
}

 Program.csに移り、Mainメソッドから初期化メソッドを呼び出すようにします。

リスト9 Mainメソッド(Program.cs)
static void Main()
{
    DocumentRepository.Initialize();
}

 ここまで実装したところで一度アプリを起動して、データベースとコレクションが作成されるかを確認してみましょう。

 Program.csを実行後、EmulatorのExplorerの画面を更新します。[Collections]の部分に、DemoDBが表示されていて、ツリーを展開するとTodoCollectionが表示されていればデータベースとコレクションの作成は完了です。

図5 データベースとコレクションの作成後のEmulator画面
図5 データベースとコレクションの作成後のEmulator画面

次のページ
ドキュメントの作成

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Microsoft AzureのNoSQLデータベース「Cosmos DB」を使ってみよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 秋葉 龍一(アキバ リュウイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10381 2017/09/06 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング