C++、Python、Node.js、Go のドライバーと Cassandra Query Language (CQL) を使用して LindormTable にアクセスする方法について説明します。
前提条件
-
次の図に示すように、LindormTable の CQL エンドポイントを取得済みであること。

-
使用するプログラミング言語向けのドライバーをダウンロードしてインストール済みであること。詳細については、「Cassandra client drivers」をご参照ください。
Python CQL ドライバーを使用した LindormTable へのアクセス
-
DataStax Python 依存パッケージをインストールします。詳細については、「Install the SDK for Python」をご参照ください。
# 特定のバージョンをインストールします (バージョン 3.x を推奨します)。 pip install cassandra-driver==3.19.0 # 最新バージョンをインストールします。 pip install cassandra-driver -
次の例は、LindormTable にアクセスする方法を示しています。
#!/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( # LindormTable の CQL エンドポイントを入力します。ポートを指定する必要はありません。 contact_points=["ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com"], # ユーザー名とパスワードを入力します。デフォルトはどちらも root です。 auth_provider=PlainTextAuthProvider("Username", "Password")) session = cluster.connect() # キースペースを作成します。 session.execute( "CREATE KEYSPACE IF NOT EXISTS testKeyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor':2};"); # テーブルを作成します。 session.execute( "CREATE TABLE IF NOT EXISTS testKeyspace.testTable (id int PRIMARY KEY, name text,age int,address text);"); # データを挿入します。 session.execute( "INSERT INTO testKeyspace.testTable (id, name, age, address) VALUES ( 1, 'testname', 11, 'hangzhou');"); # データをクエリします。 rows = session.execute( "SELECT * FROM testKeyspace.testTable ;"); # 各行をコンソールに出力します。 for row in rows: print("# row: {}".format(row)) # セッションを終了します。 session.shutdown() # クラスターをシャットダウンします。 cluster.shutdown()
C++ CQL ドライバーを使用した LindormTable へのアクセス
-
C++ 依存パッケージをダウンロードします。詳細については、「DataStax C++ Driver」をご参照ください。
-
次の例は、LindormTable にアクセスする方法を示しています。
CassFuture* connect_future = NULL; CassCluster* cluster = cass_cluster_new(); CassSession* session = cass_session_new(); // LindormTable の CQL エンドポイントを入力します。ポートを指定する必要はありません。 char* hosts = "ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com"; // 接続を確立します。 cass_cluster_set_contact_points(cluster, hosts); connect_future = cass_session_connect(session, cluster); // クエリを実行します。 if (cass_future_error_code(connect_future) == CASS_OK) { CassFuture* close_future = NULL; const char* query = "SELECT name FROM testKeyspace.testTable "; CassStatement* statement = cass_statement_new(query, 0); CassFuture* result_future = cass_session_execute(session, statement); if (cass_future_error_code(result_future) == CASS_OK) { // クエリ結果を取得します。 const CassResult* result = cass_future_get_result(result_future); const CassRow* row = cass_result_first_row(result); if (row) { const CassValue* value = cass_row_get_column_by_name(row, "name"); // 結果を出力します。 const char* name; size_t name_length; cass_value_get_string(value, &name, &name_length); printf("name: '%.*s'\n", (int)name_length, name); } cass_result_free(result); } else { // 例外を処理します。 const char* message; size_t message_length; cass_future_error_message(result_future, &message, &message_length); fprintf(stderr, "Unable to run query: '%.*s'\n", (int)message_length, message); } cass_statement_free(statement); cass_future_free(result_future); // リソースを手動で解放します。 close_future = cass_session_close(session); cass_future_wait(close_future); cass_future_free(close_future); } else { // 例外を処理します。 const char* message; size_t message_length; cass_future_error_message(connect_future, &message, &message_length); fprintf(stderr, "Unable to connect: '%.*s'\n", (int)message_length, message); } cass_future_free(connect_future); cass_cluster_free(cluster); cass_session_free(session);
Node.js CQL ドライバーを使用した LindormTable へのアクセス
-
Node.js 依存パッケージをインストールします。
npm install cassandra-driver -
次の例は、LindormTable にアクセスする方法を示しています。
const cassandra = require('cassandra-driver'); /** * LindormTable の CQL エンドポイントを入力します。ポートを指定する必要はありません。DC 名を datacenter1 に設定します。 * 'Username' と 'Password' をご自身の資格情報に置き換えます。デフォルトはどちらも root です。 */ const client = new cassandra.Client({ contactPoints: ['ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com'], localDataCenter: 'datacenter1', credentials: { username: 'Username', password: 'Password' } }); client.connect() .then(() => client.execute("CREATE KEYSPACE IF NOT EXISTS lindormtest WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2' }")) .then(() => client.execute("CREATE TABLE IF NOT EXISTS lindormtest.nodejs (name text PRIMARY KEY, age int)")) .then(() => { return client.execute("INSERT INTO lindormtest.nodejs (name, age) VALUES ('lindorm', 10)"); }) .then(() => { return client.execute("SELECT name, age FROM lindormtest.nodejs WHERE name = 'lindorm' "); }) .then(result => { const row = result.first(); console.log('Obtained row: ', row); const p = row.age; }) .finally(() => client.shutdown());
Go CQL ドライバーを使用した LindormTable へのアクセス
-
GoCQL をインストールします。
go get github.com/gocql/gocql -
次の例は、LindormTable にアクセスする方法を示しています。
package main import ( "fmt" "log" "github.com/gocql/gocql" ) func main() { // LindormTable の CQL エンドポイントを入力します。ポートを指定する必要はありません。 cluster := gocql.NewCluster("ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com") cluster.Authenticator = gocql.PasswordAuthenticator{ Username:"Username", Password: "Password", } session, _ := cluster.CreateSession() defer session.Close() // キースペースを作成します。 if err := session.Query(`CREATE KEYSPACE ks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2}`).Exec(); err != nil { log.Fatal(err) } // テーブルを作成します。 if err := session.Query(`CREATE TABLE ks.tb (cn1 text PRIMARY KEY, cn2 text, cn3 text)`).Exec(); err != nil { log.Fatal(err) } // 値を挿入します。 if err := session.Query(`INSERT INTO ks.tb (cn1, cn2, cn3) VALUES (?, ?, ?)`, "v11", "v12", "v13").Exec(); err != nil { log.Fatal(err) } var column1 string var column2 string if err := session.Query(`SELECT cn1, cn2 FROM ks.tb WHERE cn1 = ?`, "v11").Consistency(gocql.One).Scan(&column1, &column2); err != nil { log.Fatal(err) } fmt.Println("ALL values:", column1, column2) var column3 string // 結果を反復処理します。 iter := session.Query(`SELECT * FROM ks.tb WHERE cn1 = ? `, "v11").Iter() for iter.Scan(&column1, &column2, &column3) { fmt.Println("ALL value:", column1, column2, column3) } if err := iter.Close(); err != nil { log.Fatal(err) } }