GridDB クラウド v1.6の紹介 — オンプレミスとの接続

WebベースのGridDBクラウドサービスがバージョン1.6にアップデートされ、GridDB CE 5.2がその基盤となりました。GridDBクラウドについては、以前にもGridDBクラウドの紹介GridDB クラウド Version 1.2 の紹介で紹介しました。

この記事では、GridDBクラウドの新バージョンによってもたらされた新機能、すなわちクラウドと直接接続する新しい方法について解説します。これまでは、オンラインのクラウド仮想ネットワークを使わずにGridDBクラウドにアクセスする唯一の方法はWeb APIでした。Web APIを利用することで、GETやPOSTのHTTPリクエストを行い、空のGridDBデータベースサーバにデータをPUTすることができます。この方法を使えば、Web APIを通じてSQLやTQLコマンドを実行することもできます。

バージョン1.6の登場により、GridDBクラウドにはJava、JDBC、ODBC、C言語を使ってローカルマシンからアクセスすることが出来るようになりました。この記事では、Java、そしてJDBCを使ってクラウドに接続するセットアップ方法と簡単な例について説明します。

$ git clone https://github.com/griddbnet/Blogs.git --branch griddb_cloud_1.6

GridDBクラウドの設定管理

まず、クラウドのポータルのネットワーク部分にアクセスする必要があります。 そこで新しい設定を見ることができるのが 「GridDBアクセス」です。 このパネルでパブリックIPアドレスを例外リストに追加して、クラウドのファイアウォールを通過するためのわずかなスペースを作ることが出来ます。

それが終わったら、サポートセクションに行き、必要な.jarファイルをローカルマシンの環境にダウンロードしましょう。サポートページより、”GridDB Cloud Library and Plugin download “という見出しのファイルをダウンロードします。

この.zipファイルには様々なファイルが含まれていますが、この記事に関連するファイルはJDBCフォルダの中にあります。ここから、gridstore-5.2.0.jargridstore-jdbc-5.2.0.jargridstore-advanced-5.2.0.jarが必要になります。

これらをダウンロードしたら、$CLASSPATH環境に追加し、Javaコマンドを実行するときに、これらの新しいAPIにアクセス出来るようにします。

Javaでクラウドに接続する

始める前に、これらの.jarファイルをCLASSPATHに追加しましょう。

export CLASSPATH=${CLASSPATH}:$PWD/gridstore-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-jdbc-5.2.0.jar
export CLASSPATH=${CLASSPATH}:$PWD/gridstore-advanced-5.2.0.jar

そして、GridDBクラウドサーバーと接続するためのJavaコードを書きます。

この記事の主旨ではないので、ソースコードについてはあまり触れないことにします。その代わりに、関連するコードスニペットについて説明します。

通知プロバイダー

Java経由で接続するには、GridDB通知プロバイダ・メソッドを使用します。これは、GridDBクラウドが通知プロバイダのURLを提供してくれるからで、これをGridDB Store変数に差し込むだけで良いのです。

GridBクラウドポータルに、「Notification Provider URL for external connection」という URL があります。そのURLをコピーしてJavaコード内で使用してください。

            String provider =
            "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";

            Properties props = new Properties();
            props.setProperty("notificationProvider", provider);
            props.setProperty("clusterName", "clustername");
            props.setProperty("user", "admin");
            props.setProperty("password", "admin");
            props.setProperty("database", "israel_db");
            props.setProperty("sslMode", "PREFERRED");
            props.setProperty("connectionRoute", "PUBLIC");
            store = GridStoreFactory.getInstance().getGridStore(props);

通常FIXED_LISTを接続方式に使用する場合、notificationMemberを使用せず、notificationProviderを使用していることが分かりますが、それ以外にはプロパティに大きな変更はありません。

他の大きな必須の変更は、一番下にある sslModeconnectionRoute プロパティ・キーにあります。これらはSSLで保護されたウェブアドレスを使用するために必要です。これは、SSLがPREFERREDであり、connectionRouteがPUBLICであることを接続に伝える必要があることを意味します。

問題がなければ、Javaコードを実行すれば、GridDBクラウドに変更が反映されます。このコードを自分のマシンで実行したい場合は、もちろんGitHubページ(上記リンク)をチェックアウトして、認証情報とURLを使って自分のマシンでコードを実行できます。

$ javac *.java
$ java SimulateData 10 3

簡単なデモを紹介するために、ここで実行しているコードはJava用のIoTデータをシミュレートしています。つまり、ランダムなデータを入れたさまざまなコンテナをクラウドに配置しているのです。そして案の定、クラウドをチェックアウトすると、コンテナがデータとともに表示されます。

JDBCを使用したGridDBクラウドへの接続

もちろん、GridDBでJDBCを使えば、SQLをフルに使うことができます。そして幸運なことに、クラウドに接続するためにJDBCを使用することは、Javaを使用することとほぼ同じなのです。主な違いは、jdbc jarをCLASSPATHにインクルードする必要があることと(すでにインクルード済み)、jdbc urlを構築する必要があることです。

        try {
            String provider = "https://dbaasshareextconsta.blob.core.windows.net/dbaas-share-extcon-blob/trial1602.json?sv=2015-04-05&sr=b&st=2023-03-14T00%3A00%3A00.00Z&se=2073-03-14T00%3A00%3A00.0000000Z&sp=r&sig=h2VJ0xAqsnfdgfgdfgRsqWVgfgfg5CAS66RifPIZ1PDCJ0x%2FiXb2FOhA%3D";
            String encodeProviderUrl = URLEncoder.encode(provider, "UTF-8");
            String clusterName = "clustername";
            String encodeClusterName = URLEncoder.encode(clusterName, "UTF-8");
            String databaseName = "public";
            String encodeDatabaseName = URLEncoder.encode(databaseName, "UTF-8");
            String ssl = "&sslMode=VERIFY"; //Necessary
            String encodeSsl = URLEncoder.encode(ssl, "UTF-8");

            Properties props = new Properties();
            String jdbcUrl = "jdbc:gs:///" + encodeClusterName + "/" + encodeDatabaseName
      + "?notificationProvider="+encodeProviderUrl + encodeSsl;
            props.setProperty("user", "admin");
            props.setProperty("password", "admin");
            props.setProperty("loginTimeout", "60");
            props.setProperty("connectionRoute", "PUBLIC"); //Also a new necessary props for this

            System.out.println(jdbcUrl);
            conn = DriverManager.getConnection(jdbcUrl, props );
            System.out.println("Sucessfully connected!");

        } catch (Exception e) {
            System.out.println("error connecting to DB: "+e);
        }

完全なURLは次のようになります。

jdbc:gs:///gs_clustertrial1602/public?notificationProvider=https%3A%2F%2Fdbaasshareextconsta.blob.core.windows.net%2Fdbaas-share-extcon-blob%2Ftrial1602.json%3Fsv%3D2015-04-05%26sr%3Db%26st%3D2023-03-14T00%253A00%253A00.0000000Z%26se%3D2073-03-14T00%2500%253A00.0Z%26sp%3Dr%26sig%3Dh2VJ0xAqsqWV5CAS66RifPIZ1PDCJ0x%252F2FOhA%253D%26sslMode%3DVERIFY

このJDBC URLを作成する際には、必ずsslModePREFERREDの値でURLに含め、さらにconnectionRoutePREFERREDの値で含める必要があります。

すべての情報がOKになると、あなたがファイル(”griddb-jdbc.properties”)に含めることを選んだSQLコードがクラウド上で実行されます。今回は、クラウド上に一連のtpchテーブルを作りました。

gridstore-jdbc.propertiesファイルの内容を好きなSQLの内容に変更するだけです。

結論

これで、ローカルマシンをGridDBクラウドのインスタンスに直接接続することに成功しました。GridDBクラウドをセットアップして使うことにより、サーバーの管理を心配する必要がなくなり、Javaアプリケーションを書くだけで、GridDBの素晴らしいパワーをフルに活用することができます。

ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb

Leave a Reply

Your email address will not be published. Required fields are marked *