本ドキュメントでは、RustとOceanBase Cloudを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実行する方法について説明します。
前提条件
- Rustツールチェーン(rustup)およびCargoがインストールされていること。
- OceanBase Cloudのアカウントを登録し、クラスタインスタンスとMySQL互換モードのテナントを作成していること。詳細は、クラスタインスタンスの作成 およびテナントの作成をご参照ください。
操作手順
- RustおよびCargoのバージョンを確認する
- 必要な依存関係をインストールする
- OceanBase Cloudの接続情報を取得する
config.rsファイル内のデータベース接続情報を変更するmain.rsファイルを実行する- 対話型コマンドラインインターフェースで必要な操作を実行する
操作手順1:RustおよびCargoのバージョン確認
ターミナルを開き、以下のコマンドを実行してRustおよびCargoのバージョンを確認します。
rustc --version
cargo --version
操作手順2:プロジェクトの作成と必要な依存関係のインストール
新しいRustプロジェクトを作成します。
cargo new oceanbase_demo cd oceanbase_democargoを使用してmysqlクレートをインストールします。cargo add mysql(オプション)非同期操作を使用する場合は、
mysql_asyncクレートをインストールできます。cargo add mysql_async
操作手順3:OceanBase Cloudの接続情報の取得
OceanBase Cloudコンソールにログインします。インスタンスリストページで対象インスタンスの情報を展開し、対象テナントの下で**接続** > **接続文字列を取得**を選択します。
詳細な操作については、接続文字列の取得をご参照ください。
作成済みのOceanBase Cloudの情報に基づいて、以下のURL内の各項目を入力します。
mysql -h$host -P$port -u$user_name -p$password -D$database_nameパラメータの説明:
$host:OceanBase Cloudの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OceanBase Cloudの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベース名を指定します。$user_name:データベースにアクセスするアカウントを指定します。$password:アカウントのパスワードを指定します。
操作手順4:main.rsファイル内のデータベース接続情報の変更
手順3の情報に基づいて、main.rsファイル内のデータベース接続情報を変更します。
oceanbase_demoプロジェクトフォルダに移動します。main.rsファイルにデータベース接続情報を追加または変更します。
main.rsに追加する完全なサンプルコードは以下のとおりです。
```rust
use mysql::*;
use mysql::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
const OCEANBASE_CONFIG: &str = "mysql://`$user_name`:`$password`@$host:$port/$database_name?charset=utf8mb4";
// Establish connection
println!("Connecting to database...");
let pool = Pool::new(DB_URL)?;
let mut conn = pool.get_conn()?;
println!("Connected successfully!");
// Create table
conn.query_drop(
r"CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)"
)?;
println!("Table created successfully!");
// Insert sample data
conn.exec_batch(
r"INSERT INTO users (name, email) VALUES (?, ?)",
vec![
("Alice", "alice@example.com"),
("Bob", "bob@example.com"),
("Charlie", "charlie@example.com"),
]
)?;
println!("Sample data inserted successfully!");
// Query and display the data
let selected_users = conn
.query_map(
SELECT id, name, email FROM users,
|(id, name, email)| {
User { id, name, email }
}
)?;
println!("\nCurrent users in database:");
for user in selected_users {
println!("ID: {}, Name: {}, Email: {}", user.id, user.name, user.email);
}
Ok(())
}
// Structure to hold user data
struct User {
id: i32,
name: String,
email: String,
}
```
操作手順5:main.rsファイルの実行
oceanbase_demoプロジェクトディレクトリに移動します。cd oceanbase_demo以下のコマンドを実行してプログラムを起動します。
cargo run実行結果は以下のとおりです。
Connecting to database... Connected successfully! Table created successfully! Sample data inserted successfully! Current users in database: ID: 1, Name: Alice, Email: alice@example.com ID: 2, Name: Bob, Email: bob@example.com ID: 3, Name: Charlie, Email: charlie@example.com ID: 4, Name: Alice, Email: alice@example.com ID: 5, Name: Bob, Email: bob@example.com ID: 6, Name: Charlie, Email: charlie@example.com
よくある質問
- 接続エラー:データベースに接続できない場合は、以下を確認してください。
- データベースのアドレスとポートが正しいか。
- ユーザー名とパスワードが正しいか。
- ネットワーク接続が正常か。
権限エラー:権限に関連するエラーが発生した場合は、ユーザーが必要な操作を実行するための十分な権限を持っていることを確認してください。
SQL構文エラー:SQL文に構文エラーがある場合は、SQL文の構文が正しいか確認してください。
データ型エラー:挿入するデータ型がテーブル定義と一致しない場合は、挿入するデータ型が正しいか確認してください。
パフォーマンス最適化の推奨事項
- 接続プールを使用してデータベース接続を管理する。
- 非同期操作を使用して同時実行パフォーマンスを向上させる。
- バッチ処理操作を使用してデータ挿入の効率を向上させる。
- データベース接続のタイムアウト時間を適切に設定する。