GridDB Cloud クイックスタートガイド

1 はじめに

1.1 本書の構成

本書では、初めてGridDB Cloudをお使いの方に製品の概要と簡単な使い方を説明します。 簡単な使い方として、払い出し後に管理コンソール(以下、運用管理GUI)へログインするところから、GridDBへのデータ登録を行う一連の手順を説明します。

各章の内容は次のとおりです。

1.2 GridDB Cloudとは

GridDB Cloudは、GridDBをクラウドサービスとして提供するサービスです。

GridDBは、ビッグデータやIoTシステムをターゲットにしたスケールアウト型時系列データベースです。

GridDB Cloudでは、GridDBを単体で利用するのに比べ、下記のような利点があります。

GridDBの詳細は、『GridDB 機能リファレンス』(GridDB_FeaturesReference.html)を参照してください。

1.3 用語の説明

本書で用いられる用語の説明です。

用語 意味
運用管理GUI GridDB Cloudを管理するWebアプリケーションです。
クラスタ 一体となってデータ管理を行う、1つ、もしくは複数のノードの集合を指します。
ノード GridDBでデータ管理を行うひとつのサーバプロセスを指します。
コンテナ ロウの集合を管理する入れ物です。コレクションと時系列コンテナの2種類が存在します。
コレクション 一般の型のキーを持つロウを管理するコンテナの一種です。
時系列コンテナ 時刻型のキーを持つロウを管理するコンテナの1種です。時系列データを扱う専用の機能を持ちます。
ロウ GridDBで管理する1件分のデータを指します。キーと複数の値からなるひとまとまりのデータです。

2 稼働状態の確認

まずは運用管理GUIにログインし、稼働状態を確認します。払い出されたログインURLにアクセスし、ログインIDとパスワードを入力してください。

ログインに成功すると、下記のページが表示されます。

このページでは、クラスタの稼働状態を確認することができます。

ページ左上にクラスタ名(この例では「gs_clustertstmed001」)が書いてあり、その横に稼働状態が書いてあります。この例では「SERVICE STABLE」となっており、これはクラスタが正常に稼働していることを表します。稼働状態の一例を下記に示します。

稼働状態は上例以外にも存在します。詳細は『GridDB 機能リファレンス』(GridDB_FeaturesReference.html)を参照してください。

3 VNetの接続設定

ここでは、アプリケーションからデータをGridDBに登録するのに必要となる接続設定について説明します。

GridDB Cloudでは、VNet同士をVNetピアリングを使って接続します。これは広帯域かつプライベートで安全な通信を行うことができるのが特徴のAzureの機能です。VNetピアリング確立後は、プライベートIPアドレスを指定して通信することが可能になります。VNetピアリングの利用料金など詳細な仕様については、Microsoftの公式ドキュメントを参照してください。

VNetピアリングを確立するためには、まず運用管理GUIにログインします。次に、左のナビゲーションメニューより「Peering Connection」を選択します。その後、「CREATE PEERING CONNECTION」ボタンを押します。

クラウドプロバイダを選ぶダイアログが表示されます。何も変更せず、「NEXT」ボタンを押してください。

VNet Settingsの画面が表示されます。ここではアプリケーションが配置されているVNetの情報を入力します。具体的には下記の情報を入力します。取得方法がわからない場合は、Show Instructionsをクリックして、取得方法のヒントを表示してください。

すべて入力が終わったら、「NEXT」ボタンを押してください。

次に、VNetピアリングを確立するためのコマンドを実行します。Azure Cloud ShellやAzure CLIを使い、表示されたコマンドを順に実行してください。なお、一部のコマンドにはAzureでの実行権限が必要です。詳しくはコマンド上に表示されるツールチップを参照ください。

コマンドの実行が完了したら、「VALIDATE」ボタンを押して接続状態を確認してください。接続が確認できたら、「CREATE PEERING」ボタンを押して、VNet Peeringを確立します。

VNet Peeringの一覧に戻り、「Status」がConnectedとなっていればVNetピアリング確立成功です。以降はGridDBのプライベートIPアドレスを使った通信が可能です。

なお、GridDBとアプリケーションのネットワークアドレスが競合する場合はVNetピアリングを確立することができません。その場合は、アプリケーションのネットワークアドレスを変更してください。

4 サンプルプログラムの実行

ここでは、アプリケーションからGridDBにデータを登録する方法について説明します。データの登録には、前章で説明しているVNetピアリングの確立に成功していることが必要です。ピアリング未確立の場合は本章の内容を実行する前に確立してください。

4.1 サンプルプログラム作成

まず、C言語用のクライアントAPIとサンプルプログラムを下記より取得します。

https://github.com/griddb/c_client

次に、README_ja.mdに沿ってCクライアントのビルドを行います。

https://github.com/griddb/c_client/blob/master/README_ja.md

次にサンプルプログラムを作成します。下記をコピーし、sample1.cというファイル名でc_clientのルートディレクトリに保存してください。

#include "gridstore.h"
#include <stdlib.h>
#include <stdio.h>

typedef struct {
    GSTimestamp timestamp;
    GSBool active;
    double voltage;
} Point;

GS_STRUCT_BINDING(Point,
    GS_STRUCT_BINDING_KEY(timestamp, GS_TYPE_TIMESTAMP)
    GS_STRUCT_BINDING_ELEMENT(active, GS_TYPE_BOOL)
    GS_STRUCT_BINDING_ELEMENT(voltage, GS_TYPE_DOUBLE));

// Storage and extraction of a specific range of time-series data
int sample(const char * addr, const char *clusterName,
            const char *user, const char *password) {
    GSGridStore *store;
    GSTimeSeries *ts;
    Point point;
    GSTimestamp now;
    GSTimestamp before;
    GSQuery *query;
    GSRowSet *rs;
    GSResult ret = !GS_RESULT_OK;

    const GSPropertyEntry props[] = {
            { "notificationProvider", addr },
            { "clusterName", clusterName },
            { "user", user },
            { "password", password } };
    const size_t propCount = sizeof(props) / sizeof(*props);

    // Acquiring a GridStore instance
    gsGetGridStore(gsGetDefaultFactory(), props, propCount, &store);

    // Creating a TimeSeries (Only obtain the specified TimeSeries if it already exists)
    gsPutTimeSeries(store, "point01",
            GS_GET_STRUCT_BINDING(Point), NULL, GS_FALSE, &ts);

    // Preparing time-series element data
    point.active = GS_FALSE;
    point.voltage = 100;

    // Store the time-series element (GridStore sets its timestamp)
    gsAppendTimeSeriesRow(ts, &point, NULL);

    // Extract the specified range of time-series elements: last six hours
    now = gsCurrentTime();
    before = gsAddTime(now, -6, GS_TIME_UNIT_HOUR);

    gsQueryByTimeSeriesRange(ts, before, now, &query);
    ret = gsFetch(query, GS_FALSE, &rs);
    while (gsHasNextRow(rs)) {
        GSChar timeStr[GS_TIME_STRING_SIZE_MAX];

        ret = gsGetNextRow(rs, &point);
        if (!GS_SUCCEEDED(ret)) break;

        gsFormatTime(point.timestamp, timeStr, sizeof(timeStr));
        printf("Time=%s", timeStr);
        printf(" Active=%s", point.active ? "true" : "false");
        printf(" Voltage=%.1lf\n", point.voltage);
    }

    // Releasing resource
    gsCloseGridStore(&store, GS_TRUE);

    return (GS_SUCCEEDED(ret) ? EXIT_SUCCESS : EXIT_FAILURE);
}

void main(int argc,char *argv[]){ sample(argv[1],argv[2],argv[3],argv[4]);}

このサンプルプログラムは引数で接続情報を受け取り、下記の処理を行います。

  1. 接続パラメータの設定

  2. 接続用インスタンスの作成

  3. 接続し、コンテナ(コンテナ名:point01)を作成

    TIMESTAMP, BOOL, DOUBLEの3カラムで構成

  4. ロウを登録

    (現在時刻, false, 100.0)を登録

  5. 登録したロウの確認

次に、c_clientのルートディレクトリでサンプルプログラムをコンパイルし、ライブラリのパスを通します。下記はCentOSの例です。

gcc -I./client/c/include -L./bin sample1.c -lgridstore
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./bin

実行する前に、接続情報の確認と、データベースユーザの作成を行います。

4.2 接続情報の確認

まずは接続情報の確認をします。「Clusters」画面に遷移し、下記の情報をメモしてください。

4.3 データベースユーザ作成

次にデータベースユーザを作成します。「Security」画面に遷移し、「CREATE DATABASE USER」ボタンを押してください。

ユーザ名とパスワードを下記のように設定し、「CREATE」ボタンを押してください。

4.4 サンプルプログラム実行

前節までに確認した接続情報とデータベースユーザを引数として渡し、サンプルプログラムを実行します。

./a.out <Notification Provider URL> <クラスタ名> test_user1 test_user1

下記のような登録結果が表示されれば成功です。

Time=2021-03-31T07:52:58.770Z Active=false Voltage=100.0

サンプルプログラムの実行について以上です。GridDBのプログラミング方法について詳しく知りたい場合は、下記を参照してください。

4.5 注意事項

GridDBの接続方式は下記の3種類があります。

GridDB Cloudでは、サンプルプログラムで指定したプロバイダ方式のみが有効です。他の方式は利用できませんのでご注意ください。

方式の詳細は『GridDB 機能リファレンス』(GridDB_FeaturesReference.html)を参照してください。

5 登録データの確認

ここでは、登録したデータをSQLで確認する方法について説明します。前章のサンプルプログラムによる登録データを確認するため、登録済みでない場合は登録をお願いします。

まず、「Query」画面を開きます。右側にサンプルプログラムで作成したコンテナ「point01」があることを確認します。

次に、point01のデータをすべて取得する下記のSQL文を入力し、実行ボタンを押します。

SELECT * FROM point01

実行結果が下記のように表示されていれば成功です。