(以下の手順は、バージョン 22.4.2 および 23.1.0 でテストしています。)
前編では、Oracle Database をコンテナ上に起動し、これをグラフ・データベースとして使う方法をご説明しました。この環境だけでも、表データからグラフへの変換やビューの作成、さらには JSON と組み合わせなど、さまざまな利用方法がありますので、おいおいご紹介していきたいと思います。
ここでは、あくまで構築手順だけに絞って、その後半として Graph Server のためのコンテナを追加する方法をご説明します。次のアーキテクチャ図で、既に 2-tier deployment は構築できているので、これから 3-tier deployment を追加します。
Oracle Graph と JDK のダウンロード
Graph Server と Graph Viz が含まれる RPM パッケージと Graph Client が含まれる ZIP ファイルをこちらのサイトからダウンロードします。いずれかのパッケージを選択すると、Oracle アカウントでのログインが要求されて、Oracle Software Delivery Cloud というところに飛ばされます。
このチュートリアルで必要になる「Oracle Graph Server」にチェックを入れてダウンロードします。
Oracle Download Manager なるものが現れてダウンロードを開始します。
加えて、JDK 11(Linux - x64 RPM Package)をこちらのサイトからダウンロードしておきます。こちらも個人用途や開発用途であればライセンス費用がかからないので、安心してお使いいただけます。
Graph Server の構築
ここでダウンロードしたこれらの RPM パッケージと次に作成する Dockerfile を同じディレクトリに配置します。
- oracle-graph-23.1.0.x86_64.rpm
- jdk-11.0.17_linux-x64_bin.rpm
vi Dockerfile
FROM oraclelinux:7
ARG VERSION_JDK
ARG VERSION_OPG
ARG JDBC_URL
COPY ./jdk-${VERSION_JDK}_linux-x64_bin.rpm /tmp
COPY ./oracle-graph-${VERSION_OPG}.x86_64.rpm /tmp
RUN yum install -y unzip numactl vim gcc openssl libgfortran \
&& yum clean all \
&& rm -rf /var/cache/yum/* \
&& rpm -ivh /tmp/jdk-${VERSION_JDK}_linux-x64_bin.rpm \
&& rpm -ivh /tmp/oracle-graph-${VERSION_OPG}.x86_64.rpm
ENV JAVA_HOME=/usr/java/jdk-${VERSION_JDK}
ENV PATH=$PATH:/opt/oracle/graph/bin
ENV SSL_CERT_FILE=/etc/oracle/graph/ca_certificate.pem
ENV PGX_SERVER_KEYSTORE_PASSWORD=changeit
RUN keytool -importkeystore \
-srckeystore /etc/oracle/graph/server_keystore.jks \
-destkeystore $JAVA_HOME/lib/security/cacerts \
-deststorepass changeit \
-srcstorepass changeit \
-noprompt
RUN sed -i "s|<REPLACE-WITH-DATABASE-URL-TO-USE-FOR-AUTHENTICATION>|${JDBC_URL}|" /etc/oracle/graph/pgx.conf
EXPOSE 7007
WORKDIR /opt/oracle/graph/bin
CMD ["sh", "/opt/oracle/graph/pgx/bin/start-server"]
イメージをビルドします。JDK のバージョンはダウンロードしたものに置き換えてください。
docker build . \
-f Dockerfile-graph-server \
--tag graph-server:23.1.0 \
--build-arg VERSION_OPG=23.1.0 \
--build-arg VERSION_JDK=11.0.17 \
--build-arg JDBC_URL=jdbc:oracle:thin:@host.docker.internal:1521/xepdb1
イメージが完成したらコンテナを起動します。
docker run \
--name graph-server \
--publish 7007:7007 \
graph-server:23.1.0
opg4j シェルを使って GRAPHUSER(=前編で作成したデータベースユーザー)として Graph Server にログインできることを確認します。
$ docker exec -it graph-server opg4j -b https://localhost:7007
...
username: graphuser
password: (Welcome1)
For an introduction type: /help intro
Oracle Graph Server Shell 23.1.0
Variables instance, session, and analyst ready to use.
opg4j>
opg4j> /exit
後々 JDBC URL を変更する必要がある場合は、コンソールからコンテナに接続し、pgx.conf 内の JDBC URL を編集します。その後、ホストに戻り、Graph Server コンテナを再起動します。
$ docker exec -it graph-server /bin/bash
# vi /etc/oracle/graph/pgx.conf
"jdbc_url": "jdbc:oracle:thin:@host.docker.internal:1521/xepdb1",
# exit
$ docker restart graph-server
$ docker logs -f graph-server
Graph Visualization にログイン
ウェブ・ブラウザから Graph Visualization にログインします。
自己署名証明書が使われているため、セキュリティ警告が表示されます。
- Chrome: "thisisunsafe" とタイプします
- Firefox: Advanced > Accept the Risk and continue
データベース・ユーザーでログインします。
- User: graphuser
- Password: Welcome1(前編の通りに設定した場合)
- Advanced Options: Database
- jdbc:oracle:thin:@host.docker.internal:1521/xepdb1
前編で作成したグラフ GRAPH1
を可視化するため、次の PGQL クエリを実行します。
SELECT v1.name, v2.brand, e.since
FROM MATCH (v1)-[e]->(v2)
LIMIT 100
ノードやエッジを右クリックするとプロパティの値を確認することができます。
以上で Oracle Graph の環境を作成することができました。この環境を使用して、グラフ・データベースの様々なユースケースを議論していければと思います。