MarketplaceからOracle Property Graph Serverをデプロイしてみた


この記事は、RexZhengさんが執筆した記事を日本語化したものです。
本記事はこちらから。

前の記事(Oracle Property Graph serverのセットアップとその活用方法をまとめてみた)で、DBCSインスタンス上でOracle Graph Server and Clientをセットアップする方法を紹介しました。しかし、その手順は一つ一つ手作業でしたし、グラフサーバとデータベースインスタンスは同じサーバ(VM)の中に配置されています。これはベストプラクティスとは正直言えないアプローチです...。グラフサーバとデータベースインスタンスは、お互いに干渉を防ぐためにも、それぞれ異なるサーバにデプロイしておくべきです。

と言うか、デプロイにはもっと簡単な方法はあるんじゃないでしょうか。

だってクラウドですから。

事前準備

グラフサーバは、DBCSインスタンスより手前にインストールしていきたいです。
そのために、データベースのいくつかの設定を変更する必要があります。

詳しくは、前記事のこちらを参照してください。

Oracle Databaseの設定

oracleユーザに変更後、sysユーザとして、Oracle Databaseに接続していきましょう、

sudo su - oracle
sqlplus / as sysdba

[Figure: connect to DB]

  • PL/SQLパッケージ

Oracle Graph Server and Clientは、Oracle Database 12.2かそれ以降に対応しています。
しかし、Oracle Graph Server and Client downloadから最新版のPL/SQLパッケージをインストールする必要があります。

Oracle Graph Client for PL/SQL をダウンロードして、解凍したファイルは任意のディレクトリに保存して下さい。

Oracle Databaseにログインして、下記のスクリプトを実行しましょう

-- Connect as SYSDBA
SQL> alter session set container=<YOUR_PDB_NAME>;
SQL> @opgremov.sql
SQL> @catopg.sql

注記: 未解凍のZipディレクトリには2つのディレクトリがあると思います。一つは、Oracle Database 18c以下を使っているユーザのためのもの。もう一つが、Oracle Database 19c以降を使っているユーザ用です。DBA権限を持つデータベースユーザとして、REAME.mdファイル内のインストラクションに従って下さい。インストラクションを参考にする時は、自分のデータベースのバージョンに合っているか確認してください。これは、グラフ機能が入ったPDBを使用する際に、都度必要になります。私が作ったDBCSインスタンスは19cですから、私は19c_and_aboveのスクリプトを流していきます。

  • ユーザとロール

PDBであるpdb1demographユーザを作成して、ロールや表領域を下記のようにグラントしましょう。
全ての表は、demographスキーマで作成されロードされていくことになります。

CREATE USER demograph IDENTIFIED BY <PASSWORD>;
GRANT CONNECT, resource TO demograph;
GRANT ALTER SESSION,CREATE PROCEDURE,CREATE SESSION,CREATE TABLE, CREATE TYPE, CREATE VIEW to demograph;

CREATE ROLE graph_developer;
CREATE ROLE graph_administrator;

GRANT graph_developer TO demograph;
GRANT graph_administrator to demograph;

ALTER USER demograph QUOTA 10G ON USERS

GRANT UNLIMITED TABLESPACE TO demograph;

[Figure: prepare DB user demograph]

Online Retail表を作成する

前記事のOnline Retail表の作成を参照して作成してください。

Marketplaceからデプロイする

OCI Marketplaceの検索バーでgraphと入力し、検索してください。
Oracle Property Graph Server & Client imageがヒットするはずです。

[Figure: Marketplace]

[Figure: PGX in marketplace]

Launch Stack ボタンをクリックする前に、OverviewUsage Instructionsは読んでおいて下さい。

[Figure: Launch Stack]

任意にスタックの名称を入力後、コンパートメントは、スタックをlaunchした時と同じコンパートメントを選択して下さい。

[Figrue: Stack info 1]

On the next page, we need to input more information.

次のページから、更に情報を入力していきます。

Oracle Graph Server コンピュートインスタンスのセクションでは、下記の情報を入力していきます。

  • RESOURCE NAME PREFIXは、作成したリソースの特定に役立ちます。
  • ORACLE GRAPH SERVER COMPARTMENTでは、graph serverをデプロイするコンパートメントを選択することができます。
  • ORACLE GRAPH SERVER SHAPEでは、サーバのパフォーマンスを決める、シェイプの選択ができます。 シェイプについては、VM Shape pageをご参照ください。
  • SSH PUBLIC KEYには、グラフサーバがデプロイさせたコンピュートインスタンスにアクセスするための公開鍵を、預けましょう。 [Figure: Stack info 2-1]

少し画面をスクロールダウンしましょう。
Instance Networkセクションで、コンパートメント、VCN、サブネットを下記のように選択していきましょう。

Graph Server Configurationセクションで確認できる, JDBC URL FOR AUTHENTICATIONという項目は、前もって私たちが設定しておくJDBC connection stringを入力します。 そのURLはグラフサーバからアクセス可能である必要があります。

PGQL ENGINE FOR GRAPHVIZ`はデフォルトのままでOKです。

[Figure: Stack info 2-2]

Nextをクリックすると、今した設定の確認画面が表示されます。
Create をクリックして、デプロイを開始しましょう。

[Figure: Stack review]

Marketplace imageからのデプロイはOCIリソースマネジャーによって行われます。
先ほどの設定通りに処理が実行されます。

[Figure: RM job]

何分か待つと、リソースマネジャーのジョブは完了します。
コンピュートインスタンスにアクセスすることで可能な状態です。
接続して、作成したグラフサーバを確認しましょう。

[Figure: Graph server compute instance]

デプロイの正常実行を確認

PGX service

コンピュートインスタンスのコンソールから確認できるようにgraph server (PGX20201127)はrunningの状態のようです。では、お気に入りの任意のターミナルを使って、サーバに接続してPGXサーバのステータスを確認していきましょう。

systemctl status pgx

[Figure: PGX service status]

Java Shellツールのopg-jshell

下記のコマンドを使って、サーバに接続していきましょう。

opg-jshell --base_url https://localhost:7007 --username demograph

[Figure: jshell connect]

Python clientのopgpy

Java Shell toolであるopgjshellに加えて、, Oracleは、opgpyというPython clientもあります。もし、Pythonの方がお好みでしたら、こちらをお使いください。

opgpy --base_url https://localhost:7007 --user demograph

[Figure: Python client]

PGXのグラフ

このセクションでは、Python clientであるopgpyを使ってproperty graph serverに接続し、データベースとやりとりしていきます。

graphを作成

stmt_create = """
CREATE PROPERTY GRAPH "or"
    VERTEX TABLES (
        CUSTOMERS KEY(CUSTOMER_ID) PROPERTIES ARE ALL COLUMNS,
        PRODUCTS  KEY(STOCK_CODE)  PROPERTIES ARE ALL COLUMNS,
        PURCHASES_DISTINCT KEY(PURCHASE_ID) PROPERTIES ALL COLUMNS
    )
    EDGE TABLES (
        PURCHASES_DISTINCT as has_purchased
            KEY (PURCHASE_ID)
            SOURCE KEY(CUSTOMER_ID) REFERENCES CUSTOMERS
            DESTINATION KEY(STOCK_CODE) REFERENCES PRODUCTS
            LABEL "has_purchased"
        , PURCHASES_DISTINCT as purchased_by
            KEY (PURCHASE_ID)
            SOURCE KEY(STOCK_CODE) REFERENCES PRODUCTS
            DESTINATION KEY(CUSTOMER_ID) REFERENCES CUSTOMERS
            LABEL "purchased_by"
    )
"""
session.prepare_pgql(stmt_create).execute()
graph_or = session.get_graph("or")
graph_or

[Figure: create graph or]

graphを問い合わせる

graph_or.query_pgql("SELECT ID(c), ID(p), p.description FROM or MATCH (c)-[has_purchased]->(p) WHERE c.CUSTOMER_ID = 'cust_12353'").print();

[Figure: query graph or]

graphを壊す

graph_or.destroy()
session.get_graph("or")

[Figure: destroy graph]

まとめ

今回は、marketplace imageを使って、フルに動くProperty Graph Serverを手に入れました。しかも、基本的な情報を入力し、いくつかのボタンをクリックするだけで実現することができました。もし適切な準備があれば、5分以内に実現することも可能です。めちゃくちゃ簡単でしたよね!