はじめに
cqlsh を使用して ApsaraDB for Cassandra インスタンスにアクセスする方法を学習しました。ただし、実際には、ApsaraDB for Cassandra インスタンスにアクセスするためのコードを記述する必要がある場合があります。 cqlsh では、ノードに接続して CQL 文を入力することしかできません。複数の Cassandra ノードに接続し、各 Cassandra ノードにリクエストを均等に分散し、接続プールを管理する必要がある場合があります。コミュニティバージョンの SDK にはこれらの機能がすでに実装されているため、心配する必要はありません。以下のセクションでは、SDK を使用して ApsaraDB for Cassandra インスタンスにアクセスする方法について説明します。
開始前の準備
- エンドポイントを取得します。
ApsaraDB for Cassandra コンソール にログオンします。 [データベース接続] をクリックします。
- 内部エンドポイントを表示します。セキュリティ上の考慮事項から、インターネット接続はデフォルトで無効になっています。パブリックエンドポイントを取得するには、[パブリックエンドポイントを申請] をクリックします。
説明 エンドポイントの数は、クラスタサイズによって異なります。できるだけ多くのエンドポイントを使用してください。これにより、単一ノードの障害によるクラスタへの接続障害を防ぎます。インターネットおよび内部ネットワーク経由で ApsaraDB for Cassandra インスタンスにアクセスする方法は、使用するエンドポイントが異なることを除いてほぼ同じです。
- ホワイトリストに IP アドレスを追加します。
ApsaraDB for Cassandra インスタンスにアクセスする前に、クライアントの IP アドレスをホワイトリストに追加していることを確認してください。詳細については、「ホワイトリストを設定する」をご参照ください。
複数言語のサンプルコード
Java ベースのアクセス
- Maven 依存関係を追加します。
<dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.7.2</version> </dependency>重要 このリファレンスでは、いくつかのパブリックライブラリを紹介しています。依存関係の競合によって引き起こされる不要なトラブルを避けるため、最初に新しいプロジェクトで依存関係をテストしてください。 - アクセス用の Java コードを作成します。
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.PlainTextAuthProvider; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; public class Demo { public static void main(String[] args) { // データベースのパブリックエンドポイントまたは内部エンドポイントを入力します。コンソールで提供されている数のエンドポイントを入力できます。 // 実際には、SDK は最初にアクセス可能なエンドポイントのみに接続し、制御接続を確立します。単一ノードの障害によって引き起こされるデータベース接続障害を防ぐために、複数のエンドポイントを入力できます。 // SDK は、異なるクライアントが同じエンドポイントに接続するのを防ぐために、エンドポイントの順序を並べ替える可能性があるため、エンドポイントの順序は無視してください。 // パブリックエンドポイントのみ、または内部エンドポイントのみを入力する必要があります。 String[] contactPoints = new String[]{ "cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com", "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com" }; Cluster cluster = Cluster.builder() .addContactPoints(contactPoints) // アカウント名とパスワードを入力します。パスワードを忘れた場合は、[アカウント] ページでパスワードをリセットできます。 .withAuthProvider(new PlainTextAuthProvider("cassandra", "123456")) // インターネット経由で Cassandra クラスタにアクセスする場合は、アカウント名に @public を追加して、完全なインターネットリンクに切り替える必要があります。 // そうしないと、インターネット経由で内部ノードのすべてに接続できなくなり、例外または遅延が発生します。これは、ローカルでの開発とデバッグに影響します。 // 今後、ネットワークリンクの自動識別がサポートされる予定です。これにより、手動で @public を追加する必要がなくなります。詳細については、公式 Web サイトの変更ログを参照してください。 //.withAuthProvider(new PlainTextAuthProvider("cassandra@public", "123456")) .build(); // クラスタを初期化します。この場合、制御接続が確立されます。セッションが確立されると init メソッドが自動的に呼び出されるため、この手順は無視できます。 cluster.init(); // クラスタに接続します。各 Cassandra ノードに対して永続的接続プールが確立されます。 // そのため、リクエストごとに 1 つのセッションを作成するのは負担が大きくなります。各プロセスに対して事前に複数のセッションを作成することをお勧めします。 // 一般的に、1 つのセッションで十分です。実際のニーズに合わせて調整できます。たとえば、読み取りセッションと書き込みセッションを個別に管理できます。 Session session = cluster.connect(); // 権限関連のテーブルをクエリして、作成されたロールの数を表示します。 // これはシステムテーブルです。デフォルトでは、スーパーユーザーアカウント cassandra のみが SELECT 権限を持っています。 // 別のアカウントを使用してテストする場合は、別のテーブルに切り替えるか、アカウントに SELECT 権限を付与できます。 ResultSet res = session.execute("SELECT * FROM system_auth.roles"); // ResultSet は Iterable インターフェースを実装して、コンソールに各行の情報を表示します。 res.forEach(System.out::println); // セッションを閉じます。 session.close(); // クラスタをシャットダウンします。 cluster.close(); } }
Python ベースのアクセス
- SDK ライブラリをインストールします。
# 指定されたバージョンをインストールします。Python 3.x をお勧めします。 pip install cassandra-driver==3.19.0 # 最新バージョンをインストールします。 pip install cassandra-driver # https://pypi.org/project/cassandra-driver/#history - アクセス用の Python コードを作成します。
#! /usr/bin/env python # -*- coding: UTF-8 -*- import logging import sys from cassandra.cluster import Cluster from cassandra.auth import PlainTextAuthProvider logging.basicConfig(stream=sys.stdout, level=logging.INFO) cluster = Cluster( # データベースのパブリックエンドポイントまたは内部エンドポイントを入力します。コンソールで提供されている数のエンドポイントを入力できます。 # 実際には、SDK は最初にアクセス可能なエンドポイントのみに接続し、制御接続を確立します。単一ノードの障害によって引き起こされるデータベース接続障害を防ぐために、複数のエンドポイントを入力できます。 # SDK は、異なるクライアントが同じエンドポイントに接続するのを防ぐために、エンドポイントの順序を並べ替える可能性があるため、エンドポイントの順序は無視してください。 # パブリックエンドポイントのみ、または内部エンドポイントのみを入力する必要があります。 contact_points=["cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com", "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com"], # アカウント名とパスワードを入力します。パスワードを忘れた場合は、[アカウント] ページでパスワードをリセットできます。 auth_provider=PlainTextAuthProvider("cassandra", "123456")) # インターネット経由で Cassandra クラスタにアクセスする場合は、アカウント名に @public を追加して、完全なインターネットリンクに切り替える必要があります。 # そうしないと、インターネット経由で内部ノードのすべてに接続できなくなり、例外または遅延が発生します。これは、ローカルでの開発とデバッグに影響します。 # 今後、ネットワークリンクの自動識別がサポートされる予定です。これにより、手動で @public を追加する必要がなくなります。詳細については、公式 Web サイトの変更ログを参照してください。 # auth_provider=PlainTextAuthProvider("cassandra@public", "123456")) # クラスタに接続します。各 Cassandra ノードに対して永続的接続プールが確立されます。 # そのため、リクエストごとに 1 つのセッションを作成するのは負担が大きくなります。各プロセスに対して事前に複数のセッションを作成することをお勧めします。 # 一般的に、1 つのセッションで十分です。実際のニーズに合わせて調整できます。たとえば、読み取りセッションと書き込みセッションを個別に管理できます。 session = cluster.connect() # 権限関連のテーブルをクエリして、作成されたロールの数を表示します。 # これはシステムテーブルです。デフォルトでは、スーパーユーザーアカウント cassandra のみが SELECT 権限を持っています。 # 別のアカウントを使用してテストする場合は、別のテーブルに切り替えるか、アカウントに SELECT 権限を付与できます。 rows = session.execute('SELECT * FROM system_auth.roles') # コンソールに各行の情報を表示します。 for row in rows: print("# row: {}".format(row)) # セッションを閉じます。 session.shutdown() # クラスタをシャットダウンします。 cluster.shutdown() - 他のプログラミング言語でのアクセス。
他のプログラミング言語のアクセスインターフェイスは、Python と Java のアクセスインターフェイスと似ています。詳細については、GitHub コミュニティドキュメントを参照してください。