マルチストレージトランザクションをサポートするサンプルアプリケーションを作成する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このチュートリアルでは、ScalarDB のマルチストレージトランザクション機能をサポートするサンプルアプリケーションを作成する方法について説明します。
概要
このチュートリアルでは、ScalarDB のマルチストレージトランザクション機能を使用して、アイテムを注文し、信用枠で支払うことができるサンプル電子商取引アプリケーションを作成するプロセスを示します。
このチュートリアルでは、Cassandra と MySQL の両方を使用するアプリケーションを構築します。ScalarDB のマルチストレージトランザクション機能を使用すると、Cassandra と MySQL の両方にまたがるトランザクションを実行できます。

サンプルアプリケーションは ScalarDB の使用方法を示すことに重点を置いているため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションに含まれていません。ScalarDB での例外処理の詳細については、例外の処理方法を参照してください。
このサンプルアプリケーションで実行できること
サンプルアプリケーションは、次の種類のトランザクションをサポートしています:
- 顧客情報を取得します。
- 信用枠を使用して注文を行います。
- 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。
- チェックが成功した場合は、注文履歴を記録し、顧客が支払った金額を更新します。
- 注文 ID で注文情報を取得します。
- 顧客 ID で注文情報を取得します。
- 支払いを行います。
- 顧客が支払った金額を減らします。
このサンプルアプリケーションの前提条件
- Eclipse Temurin の OpenJDK LTS バージョン (8、11、17、または 21)
- Docker 20.10以降 (Docker Compose V2以降)
このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、要件を参照してください。
ScalarDB のセットアップ
次のセクションでは、ScalarDB のマルチストレージトランザクション機能をサポートするサンプルアプリケーションをセットアップする方法について説明します。
ScalarDB サンプルリポジトリをクローンする
ターミナル を開き、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします。
git clone https://github.com/scalar-labs/scalardb-samples
次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。
cd scalardb-samples/multi-storage-transaction-sample
Cassandra と MySQL を起動します
database.properties に示されているように、Cassandra と MySQL はサンプルアプリケーション用にすでに設定されています。ScalarDB のマルチストレージトランザクション機能の設定の詳細については、マルチストレージトランザクションをサポートするように ScalarDB を設定する方法を参照してください。
サンプルアプリケーションの Docker コンテナに含まれている Cassandra と MySQL を起動するには、Docker が実行されていることを確認してから、次のコマンドを実行します。
docker-compose up -d
開発環境によっては、Docker コンテナの起動に1分以上かかる場合があります。
スキーマをロードする
サンプルアプリケーションのデータベーススキーマ (データを整理する方法) は、すでに schema.json で定義されています。
スキーマを適用するには、ScalarDB リリースページに移動し、使用する ScalarDB のバージョンに一致する ScalarDB Schema Loader を scalardb-samples/multi-storage-transaction-sample フォルダーにダウンロードします。
次に、次のコマンドを実行します。<VERSION> は、ダウンロードした ScalarDB Schema Loader のバージョンに置き換えます。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマの詳細
サンプルアプリケーションの schema.json に示されているように、すべてのテーブルは customer および order 名前空間に作成されます。
customer.customers: 顧客の情報を管理するテーブルcredit_limit: 貸し手が各顧客に信用枠の使用を許可する最大金額credit_total: 各顧客が信用枠を使用してすでに使用した金額
order.orders: 注文情報を管理するテーブルorder.statements: 注文明細情報を管理するテーブルorder.items: 注文するアイテムの情報を管理するテーブル
スキーマのエンティティリレーションシップダイアグラムは次のとおりです。
初期データをロードする
Docker コンテナが起動したら、次のコマンドを実行して初期データをロードします。
./gradlew run --args="LoadInitialData"
初期データがロードされた後、次のレコードがテーブルに保存される必要があります。
customer.customers テーブル
| customer_id | name | credit_limit | credit_total |
|---|---|---|---|
| 1 | Yamada Taro | 10000 | 0 |
| 2 | Yamada Hanako | 10000 | 0 |
| 3 | Suzuki Ichiro | 10000 | 0 |
order.items テーブル
| item_id | name | price |
|---|---|---|
| 1 | Apple | 1000 |
| 2 | Orange | 2000 |
| 3 | Grape | 2500 |
| 4 | Mango | 5000 |
| 5 | Melon | 3000 |