Kotlin を使って ScalarDB をはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
この入門チュートリアルでは、ScalarDB で好みのデータベースを設定し、Kotlin を使用して基本的な電子マネーアプリケーションをセットアップする方法について説明します。Kotlin は Java との相互運用性を備えているため、Kotlin から直接 ScalarDB を使用できます。
電子マネーアプリケーションは このチュートリアル用に簡略化されており、実稼働環境には適していません。
このサンプルアプリケーションの前提条件
ScalarDB は Java で記述されているため、環境に次のいずれかの Java Development Kit (JDK) がインストールされている必要があります。
- 以下のいずれかの Java Development Kit (JDK):
- Oracle JDK: 8、11、17、または 21 (LTS バージョン)
- OpenJDK ディストリビューション (Eclipse Temurin、Amazon Corretto、または Microsoft Build of OpenJDK): 8、11、17、または 21 (LTS バージョン)
- Docker 20.10以降と Docker Compose V2以降
ScalarDB サンプルリポジトリのクローンを作成する
Terminal を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。
git clone https://github.com/scalar-labs/scalardb-samples
次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。
cd scalardb-samples/scalardb-kotlin-sample
データベースをセットアップする
以下 の手順に従って、ScalarDB 用にデータベースを設定してください。
ScalarDB がサポートするデータベースの一覧については、データベースを参照してください。
- リレーショナルデータベース
- NewSQL データベース
- NoSQL データベース
リレーショナルデータベースを選択します。
- MariaDB
- MySQL
- Oracle Database
- PostgreSQL
- SQL Server
- SQLite
MariaDB をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で MariaDB を実行できます。
MariaDB を起動するには、次のコマンドを実行します。
docker compose up -d mariadb
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の MariaDB のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For MariaDB
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:mariadb://localhost:3306
scalar.db.username=root
scalar.db.password=mariadb
MySQL をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で MySQL を実行できます。
MySQL を起動するには、次のコマンドを実行します。
docker compose up -d mysql
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の MySQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For MySQL
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:mysql://localhost:3306/
scalar.db.username=root
scalar.db.password=mysql
Oracle Database をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で Oracle Database を実行できます。
Oracle Database を起動するには、次のコマンドを実行します。
docker compose up -d oracle
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の Oracle データベースのプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For Oracle
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:oracle:thin:@//localhost:1521/FREEPDB1
scalar.db.username=SYSTEM
scalar.db.password=Oracle
PostgreSQL をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で PostgreSQL を実行できます。
PostgreSQL を起動するには、次のコマンドを実行します。
docker compose up -d postgres
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレ クトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の PostgreSQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For PostgreSQL
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://localhost:5432/
scalar.db.username=postgres
scalar.db.password=postgres
SQL Server をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で SQL Server を実行できます。
SQL Server を起動するには、次のコマンドを実行します。
docker compose up -d sqlserver
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の SQL Server のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For SQL Server
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:sqlserver://localhost:1433;encrypt=true;trustServerCertificate=true
scalar.db.username=sa
scalar.db.password=SqlServer22
ScalarDB を設定する
SQLite はファイルベースの組み込みデータベースであるため、別途サーバーを起動する必要はありません。ScalarDB は最初の使用時にデータベースファイルを自動的に作成します。scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の SQLite のプロパティのコメントを解除して、設定が次のようになるようにしてください。# For Sqlite
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:sqlite:scalardb-sample.sqlite3?busy_timeout=10000
scalar.db.username=
scalar.db.password=
NewSQL データベースを選択します。
- YugabyteDB
YugabyteDB をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で YugabyteDB を実行できます。
YugabyteDB を起動するには、次のコマンドを実行します。
docker compose up -d yugabyte
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の YugabyteDB のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For Yugabyte
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:yugabytedb://localhost:5433/postgres
scalar.db.username=yugabyte
scalar.db.password=yugabyte
NoSQL データベースを選択します。
- Cassandra
- Cosmos DB for NoSQL
- DynamoDB
Cassandra をローカルで実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。
Apache Cassandra を起動するには、次のコマンドを実行します。
docker compose up -d cassandra
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の Cassandra のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For Cassandra
scalar.db.storage=cassandra
scalar.db.contact_points=localhost
scalar.db.username=cassandra
scalar.db.password=cassandra
Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントをお持ちでない場合は、Azure Cosmos DB アカウントの作成をご覧ください。
Cosmos DB for NoSQL を設定する
公式ドキュメントのデフォルトの一貫性レベルの設定に従って、デフォルトの一貫性レベルを Strong に設定します。
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。以下の説明に従って scalar.db.contact_points と scalar.db.password の値を変更してください。
# For Cosmos DB
scalar.db.storage=cosmos
scalar.db.contact_points=<COSMOS_DB_FOR_NOSQL_URI>
scalar.db.password=<COSMOS_DB_FOR_NOSQL_KEY>
Azure Cosmos DB アカウントのプライマリキーまたはセカンダリキーを scalar.db.password の値として使用できます。
Amazon DynamoDB Local を実行する
scalardb-samples/scalardb-kotlin-sample ディレクトリの docker-compose.yml ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。
Amazon DynamoDB Local を起動するには、次のコマンドを実行します。
docker compose up -d dynamodb
ScalarDB を設定する
scalardb-samples/scalardb-kotlin-sample ディレクトリの database.properties ファイルには、データベース設定が含まれています。database.properties ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、設定が次のようになるようにしてください。
# For DynamoDB Local
scalar.db.storage=dynamo
scalar.db.contact_points=sample
scalar.db.username=sample
scalar.db.password=sample
scalar.db.dynamo.endpoint_override=http://localhost:8000
データベーススキーマをロードする
アプリケーションでデータベーススキーマ (データを整理する方法) を定義する必要があります。サポートされているデータ型の詳細については、データベースアダプターを参照してください。
このチュートリアルでは、schema.json というファイルが scalardb-samples/scalardb-kotlin-sample ディレクトリに既に存在します。スキーマを適用するには、scalardb Releases ページに移動し、使用している ScalarDB のバージョンに一致する ScalarDB Schema Loader を scalardb-samples/scalardb-kotlin-sample ディレクトリにダウンロードします。
次に、データベースに基づいて、<VERSION> をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。
- リレーショナルデータベース
- NewSQL データベース
- NoSQL データベース
リレーショナルデータベースを選択します。
- MariaDB
- MySQL
- Oracle Database
- PostgreSQL
- SQL Server
- SQLite
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
NewSQL データベースを選択します。
- YugabyteDB
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
NoSQL データベースを選択します。
- Cassandra
- Cosmos DB for NoSQL
- DynamoDB
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator --replication-factor=1
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
また、--replication-factor=1 オプションは Cassandra を使用する場合にのみ有効です。デフォルトのレプリケーション係数は 3 ですが、このチュートリアルではセットアップを容易にするために 1 が使用されているため、3つのノードではなく1つのノードを持つクラスターを準備するだけで済みます。ただし、レプリケーション係数 1 は本番環境には適していないことに注意してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator
スキーマ内に transaction が true に設定されたテーブルが 存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
java -jar scalardb-schema-loader-<VERSION>.jar --config database.properties --schema-file schema.json --coordinator --no-backup --no-scaling
スキーマ内に transaction が true に設定されたテーブルが存在するため、--coordinator オプションが指定されています。スキーマの設定とロードの詳細については、ScalarDB Schema Loader を参照してください。
また、Amazon DynamoDB Local は継続的なバックアップと自動スケーリングをサポートしていないため、--no-backup および --no-scaling オプションが指定されています。
基本的な電子マネーアプリケーションでトランザクションを実行し、データを取得します
スキーマをロードした後、クローンしたリポジトリに含まれる基本的な電子マネーアプリケーションでトランザクションを実行し、データを取得できます。
アプリケーションは、次の種類のトランザクションをサポートしています:
- アカウントを作成します。
- アカウントに資金を追加します。
- 2つのアカウント間で資金を送信します。
- アカウント残高を取得します。
初めて Gradle コマンドを実行すると、Gradle によって必要なライブラリが自動的にインストールされます。
残高のあるアカウントを作成する
アカウント間で資金を送金するには、残高のあるアカウントが必要です。
customer1 の残高が 500 のアカウントを作成するには、次のコマンドを実行します。
./gradlew run --args="-action charge -amount 500 -to customer1"
残高のないアカウントを作成する
残高のあるアカウントを設定したら、資金を送金するための別のアカウントが必要です。
残高が 0 の merchant1 のアカウントを作成するには、次のコマンドを実行します。
./gradlew run --args="-action charge -amount 0 -to merchant1"
アカウントに資金を追加する
残高のあるアカウントを作成するでアカウントを作成して資金を追加したのと同じ方法で、アカウントに資金を追加できます。
customer1 のアカウントに 500 を追加するには、次のコマンドを実行します。
./gradlew run --args="-action charge -amount 500 -to customer1"
customer1 のアカウントの残高は 1000 になります。
2つのアカウント間で電子マネーを送金する
これで 2つのアカウントが作成され、少なくとも1つのアカウントに残高があるので、一方のアカウントからもう一方のアカウントに資金を送金できます。
customer1 が merchant1 に 100 を支払うようにするには、次のコマンドを実行します。
./gradlew run --args="-action pay -amount 100 -from customer1 -to merchant1"