本記事では、RustとOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、クエリなどの基本的な操作を実行する方法を紹介します。
前提条件
- Rustツールチェイン(rustup)とCargoがインストール済みであること。
- OceanBaseデータベースV4.2.4以降のバージョンがインストール済みで、MySQLモードのテナントが作成済みであること。
操作手順
- RustとCargoのバージョンを確認する
- 必要な依存関係をインストールする
- OceanBaseデータベース接続情報を取得する
config.rsファイル内のデータベース接続情報を修正するmain.rsファイルを実行する- インタラクティブなコマンドラインインターフェース(CLI)で対応する操作を実行する
ステップ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データベース接続情報を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
mysql -h$host -P$port -u$user_name -p$password -D$database_name
パラメータの説明:
$host:OceanBaseデータベースの接続IPアドレスを提供します。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPを使用します。$port:OceanBaseデータベースの接続ポートを提供します。ODP接続はデフォルトで2883、直接接続方式はデフォルトで2881です。$database_name:アクセス対象のデータベース名。$user_name:テナントの接続アカウント。ODP接続フォーマット:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
ステップ4:main.rsファイル内のデータベース接続情報を修正する
ステップ3の情報に基づいて、main.rs ファイル内のデータベース接続情報を修正します。
oceanbase_demoプロジェクトフォルダに移動します。main.rsファイルにデータベース接続情報を追加または変更します。main.rsに完全なサンプルコードを以下のように追加します:use mysql::*; use mysql::prelude::*; fn main() -> Result<(), Box<dyn std::error::Error>> { const OCEANBASE_CONFIG: &str = "mysql://test_user001@mysql001:password@10.10.10.1:2881/test?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ステートメントの構文が正しいかどうか確認してください。
データ型エラー:挿入したデータ型がテーブルの定義とマッチしない場合は、挿入したデータ型が正しいことを確認してください。
パフォーマンス最適化の推奨事項
- データベース接続を接続プールで管理する
- 非同期操作を使用して高同時実行パフォーマンスを向上させる
- バッチ処理を使用してデータ挿入効率を向上させる
- データベース接続のタイムアウト時間を適切に設定する