マルチストレージトランザクションを備えた Spring Data JDBC for ScalarDB のサンプルアプリケーション
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このチュートリアルでは、マルチストレージトランザクションを備えた Spring Data JDBC for ScalarDB を使用してサンプル Spring Boot アプリケーションを作成する方法について説明します。
このサンプルアプリケーションの前提条件
- Eclipse Temurin の OpenJDK LTS バージョン (8、11、17、または 21)
- Docker 20.10 以降 (Docker Compose V2 以降)
このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、要件を参照してください。
ScalarDB Cluster を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、お問い合わせください。
サンプルアプリケーション
概要
このチュートリアルでは、ScalarDB の マルチストレージトランザクション機能を使用して、アイテムを注文し、信用枠で支払いを行うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。
このチュートリアルでは、マルチストレージトランザクションで Spring Data JDBC for ScalarDB を使用する方法を説明することに重点を置いているため、サンプルアプリケーションではアプリケーション固有のエラー処理、認証処理などは省略されています。
詳細については、Spring Data JDBC for ScalarDB ガイドを参照してください。
アプリケーションは、ScalarDB Cluster を介してデータベースにアクセスします。
スキーマ
スキーマは次のとおりです。
CREATE COORDINATOR TABLES IF NOT EXIST;
CREATE NAMESPACE IF NOT EXISTS customer;
CREATE TABLE IF NOT EXISTS customer.customers (
customer_id INT PRIMARY KEY,
name TEXT,
credit_limit INT,
credit_total INT
);
CREATE NAMESPACE IF NOT EXISTS "order";
CREATE TABLE IF NOT EXISTS "order".orders (
customer_id INT,
timestamp BIGINT,
order_id TEXT,
PRIMARY KEY (customer_id, timestamp)
);
CREATE INDEX IF NOT EXISTS ON "order".orders (order_id);
CREATE TABLE IF NOT EXISTS "order".statements (
order_id TEXT,
item_id INT,
count INT,
PRIMARY KEY (order_id, item_id)
);
CREATE TABLE IF NOT EXISTS "order".items (
item_id INT PRIMARY KEY,
name TEXT,
price INT
);
すべてのテーブルは、customer
および order
名前空間に作成されます。
customer.customers
: 顧客の情報を管理するテーブルcredit_limit
: 貸し手が各顧客にクレジットカードの使用を許可する最大金額credit_total
: 各顧客がクレジットカードを使用してすでに使用した金額
order.orders
: 注文情報を管理するテーブルorder.statements
: 注文明細情報を管理するテーブルorder.items
: 注文するアイテムの情報を管理するテーブル
スキーマのエンティティ関係図は次のとおりです。
トランザクション
このサンプルアプリケーションでは、次の 5 つのトランザクションが実装されています:
- 顧客情報の取得
- クレジットカードによる注文 (注文のコストがクレジット限度額を下回っているかどうかを確認し、注文履歴を記録して、チェックに合格した場合は
credit_total
を更新します) - 注文 ID による注文情報の取得
- 顧客 ID による注文情報の取得
- 返済 (
credit_total
の金額を減らします)
ScalarDB Cluster の設定
ScalarDB Cluster の設定は次のとおりです:
scalar.db.storage=multi-storage
scalar.db.multi_storage.storages=cassandra,mysql
scalar.db.multi_storage.storages.cassandra.storage=cassandra
scalar.db.multi_storage.storages.cassandra.contact_points=cassandra-1
scalar.db.multi_storage.storages.cassandra.username=cassandra
scalar.db.multi_storage.storages.cassandra.password=cassandra
scalar.db.multi_storage.storages.mysql.storage=jdbc
scalar.db.multi_storage.storages.mysql.contact_points=jdbc:mysql://mysql-1:3306/
scalar.db.multi_storage.storages.mysql.username=root
scalar.db.multi_storage.storages.mysql.password=mysql
scalar.db.multi_storage.namespace_mapping=customer:mysql,order:cassandra,coordinator:cassandra
scalar.db.multi_storage.default_storage=cassandra
scalar.db.cluster.node.standalone_mode.enabled=true
scalar.db.sql.enabled=true
# License key configurations
scalar.db.cluster.node.licensing.license_key=
scalar.db.cluster.node.licensing.license_check_cert_pem=
scalar.db.storage
: ScalarDB でマルチストレージトランザクションを使用するには、multi-storage
を指定する必要があります。scalar.db.multi_storage.storages
: ここでストレージ名を定義する必要があります。scalar.db.multi_storage.storages.cassandra.*
: これらの設定は、scalar.db.multi_storage.storages
で定義されているストレージ名の 1 つであるcassandra
ストレージ用です。ここで、cassandra
ストレージのすべてのscalar.db.*
プロパティを設定できます。scalar.db.multi_storage.storages.mysql.*
: これらの設定は、scalar.db.multi_storage.storages
で定義されているストレージ名の 1 つであるmysql
ストレージ用です。ここで、mysql
ストレージ のすべてのscalar.db.*
プロパティを設定できます。scalar.db.multi_storage.namespace_mapping
: この設定は、名前空間をストレージにマップします。このサンプルアプリケーションでは、customer
名前空間テーブルの操作はmysql
ストレージにマップされ、order
名前空間テーブルの操作はcassandra
ストレージにマップされます。また、Consensus Commit トランザクションで使用されるcoordinator
名前空間にマップされるストレージを定義することもできます。scalar.db.multi_storage.default_storage
: この設定は、マップされていない名前空間テーブルの操作に使用されるデフォルトのストレージを設定します。
詳細については、マルチストレージトランザクションを参照してください。
このサンプル アプリケーションでは、ScalarDB Cluster はスタンドアロンモード (scalar.db.cluster.node.standalone_mode.enabled=true
) で実行されています。
また、設定ファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定する必要があります。 詳細については、製品ライセンスキーの設定方法を参照してください。
クライアント設定
クライアント設定は次のとおりです。
scalar.db.sql.connection_mode=cluster
scalar.db.sql.cluster_mode.contact_points=indirect:localhost