Azure Cosmos DB for Apache Cassandra でサポートされる Apache Cassandra の機能

適用対象: カサンドラ

Important

99.999% 可用性サービス レベル アグリーメント (SLA)、インスタント 自動スケール、および複数のリージョン間の自動フェールオーバーを使用した 大規模 なシナリオ向けのデータベース ソリューションをお探しですか? [c0]NoSQL 用に Azure Cosmos DB を検討してください。[c0]

既存の Apache Cassandra アプリケーションを移行しますか? Apache Cassandra 用 Azure マネージド インスタンスを検討する。

Azure Cosmos DB は、Microsoft のグローバルに分散されたマルチモデル データベース サービスです。 Azure Cosmos DB for Apache Cassandra と通信するには、Cassandra Query Language (CQL) バイナリ プロトコル v4 wire プロトコル準拠のオープン ソース Cassandra クライアント drivers を使用します。

Azure Cosmos DB for Apache Cassandra を使用すると、Apache Cassandra API の利点と、Azure Cosmos DBが提供するエンタープライズ機能を利用できます。 エンタープライズ機能には、 グローバル分散自動スケールアウト パーティション分割、可用性と待機時間の保証、保存時の暗号化、バックアップが含まれます。

Cassandra プロトコル

Apache Cassandra のAzure Cosmos DBは、Cassandra クエリ言語 (CQL) v3.11 API と互換性があります。 バージョン 2.x と下位互換性があります。 サポートされている CQL コマンド、ツール、制限事項、例外については、この記事の後半で説明します。 これらのプロトコルを理解しているクライアント ドライバーは、Apache Cassandra のAzure Cosmos DBに接続できる必要があります。

Azure Managed Instance for Apache Cassandra

一部のお客様にとって、特にリフトアンドシフト移行では、動作と構成の違いにより、Cassandra の API への適応が困難になる場合があります。 アプリケーションにとって重要な機能がこの記事の後半でサポートされていないと記載されている場合は、Apache Cassandra 用 Azure マネージド インスタンスを使用することを検討してください。 このサービスは、100% の互換性を持つ純粋なオープン ソースの Apache Cassandra クラスターをホストおよび維持するためのファースト パーティAzure サービスです。

Cassandra ドライバー

Azure Cosmos DB for Apache Cassandra では、次のバージョンの Cassandra ドライバーがサポートされています。

CQL データ型

Azure Cosmos DB for Apache Cassandra では、次の CQL データ型がサポートされています。

タイプ サポートされている
ascii イエス
bigint イエス
blob イエス
boolean イエス
counter イエス
date イエス
decimal イエス
double イエス
float イエス
frozen イエス
inet イエス
int イエス
list イエス
set イエス
smallint イエス
text イエス
time イエス
timestamp イエス
timeuuid イエス
tinyint イエス
tuple イエス
uuid イエス
varchar イエス
varint イエス
tuples イエス
udts イエス
map イエス

データ型の宣言には Static がサポートされます。

CQL 関数

Azure Cosmos DB for Apache Cassandra では、次の CQL 関数がサポートされています。

命令 サポートされている
Token * イエス
ttl *** イエス
writetime *** イエス
cast ** イエス

* Cassandra 用 API は、プロジェクション/セレクターとしてトークンをサポートし、where 句の左辺でのみ token(pk) を許可します。 たとえば、WHERE token(pk) > 1024 はサポートされていますが、WHERE token(pk) > token(100) はサポートされていません。 ** cast() 関数は、Cassandra 用 API では入れ子にすることはできません。 たとえば、SELECT cast(count as double) FROM myTable はサポートされていますが、SELECT avg(cast(count as double)) FROM myTable はサポートされていませんUSING オプションで指定されたカスタム タイムスタンプと TTL は、行レベル (セルごとではなく) で適用されます。

集計関数:

命令 サポートされている
avg イエス
count イエス
min イエス
max イエス
sum イエス

集計関数は通常の列では機能しますが、クラスタリング列での集計はサポートされていません

BLOB 変換関数:

命令 サポートされている
typeAsBlob(value) イエス
blobAsType(value) イエス

UUID および timeuuid 関数:

命令 サポートされている
dateOf() イエス
now() イエス
minTimeuuid() イエス
unixTimestampOf() イエス
toDate(timeuuid) イエス
toTimestamp(timeuuid) イエス
toUnixTimestamp(timeuuid) イエス
toDate(timestamp) イエス
toUnixTimestamp(timestamp) イエス
toTimestamp(date) イエス
toUnixTimestamp(date) イエス

CQL コマンド

Azure Cosmos DBでは、Cassandra アカウントの API で次のデータベース コマンドがサポートされます。

命令 サポートされている
ALLOW FILTERING イエス
ALTER KEYSPACE 該当なし (PaaS サービス、内部で管理されているレプリケーション)
ALTER MATERIALIZED VIEW イエス
ALTER ROLE いいえ
ALTER TABLE イエス
ALTER TYPE いいえ
ALTER USER いいえ
BATCH はい (ログ記録されないバッチのみ)
COMPACT STORAGE 該当なし (PaaS サービス)
CREATE AGGREGATE いいえ
CREATE CUSTOM INDEX (SASI) いいえ
CREATE INDEX はい ( 名前付きインデックスを 含みますが、完全な FROZEN コレクションはサポートされていません)
CREATE FUNCTION いいえ
CREATE KEYSPACE (レプリケーション設定は無視) イエス
CREATE MATERIALIZED VIEW イエス
CREATE TABLE イエス
CREATE TRIGGER いいえ
CREATE TYPE イエス
CREATE ROLE いいえ
CREATE USER (ネイティブの Apache Cassandra では非推奨) いいえ
DELETE イエス
DISTINCT いいえ
DROP AGGREGATE いいえ
DROP FUNCTION いいえ
DROP INDEX イエス
DROP KEYSPACE イエス
DROP MATERIALIZED VIEW イエス
DROP ROLE いいえ
DROP TABLE イエス
DROP TRIGGER いいえ
DROP TYPE イエス
DROP USER (ネイティブの Apache Cassandra では非推奨) いいえ
GRANT いいえ
INSERT イエス
LIST PERMISSIONS いいえ
LIST ROLES いいえ
LIST USERS (ネイティブの Apache Cassandra では非推奨) いいえ
REVOKE いいえ
SELECT イエス
UPDATE イエス
TRUNCATE イエス
USE イエス

軽量トランザクション (LWT)

コンポーネント サポートされている
DELETE IF EXISTS イエス
DELETE conditions イエス
INSERT IF NOT EXISTS イエス
UPDATE IF EXISTS イエス
UPDATE IF NOT EXISTS イエス
UPDATE conditions イエス

軽量トランザクションは、現在、複数のリージョンの書き込みが有効になっているアカウントではサポートされていません。

CQL シェル コマンド

Azure Cosmos DBでは、Cassandra アカウントの API で次のデータベース コマンドがサポートされます。

命令 サポートされている
CAPTURE イエス
CLEAR イエス
CONSISTENCY * N/A
COPY いいえ
DESCRIBE イエス
cqlshExpand いいえ
EXIT イエス
LOGIN N/A (CQL 関数 USER はサポートされていないため、 LOGIN 冗長)
PAGING イエス
SERIAL CONSISTENCY * N/A
SHOW イエス
SOURCE イエス
TRACING N/A (Cassandra 用 API はAzure Cosmos DBによってサポートされます。トラブルシューティングには diagnostic ログ を使用します)

一貫性は、Azure Cosmos DB では動作が異なります。 詳細については、 Apache Cassandra と Azure Cosmos DB for Apache Cassandra の整合性レベルに関するページを参照してください。

JSON のサポート

命令 サポートされている
SELECT JSON イエス
INSERT JSON イエス
fromJson() いいえ
toJson() いいえ

Cassandra 用 API の制限

Azure Cosmos DB for Apache Cassandra には、テーブルに格納されるデータのサイズに制限はありません。 パーティション キーの制限を確実に適用しながら、数百テラバイトまたはペタバイトのデータを格納することができます。 同様に、同等のすべてのエンティティまたは行には、列の数に制限はありません。 エンティティの合計サイズが 2 MB を超えないようにする必要があります。 パーティション キーあたりのデータは、他のすべての API と同様に 20 GB を超えることはできません。

テキスト列での文字列範囲クエリの動作

文字列 (テキスト) 列に適用される範囲演算子 (>、 >=、 <、 <=) は、プレフィックスまたは部分文字列の検索を実行しません。 この動作は、Cassandra クエリ言語 (CQL) セマンティクスに従い、Apache Cassandra の動作と一致します。 Apache Cassandra の動作Azure Cosmos DBは、辞書式 (バイト単位) の順序を使用して文字列範囲の比較を評価します。 文字列値を部分的な文字列と比較する場合、比較はプレフィックスまたはパターンの一致としてではなく、文字単位で実行されます。 例えば次が挙げられます。

'ABCD' > 'ABC' → true を返す 'ABZ' > 'ABC' → true を返す 'AB' > 'ABC' → false を返す (短い文字列は辞書順でより小さい)

含意

比較は厳密に辞書式であるため、部分文字列値の範囲述語を使用してプレフィックスまたは部分文字列ベースの検索セマンティクスを実装することはできません。 プレフィックス検索パターンを必要とするアプリケーションでは、それに応じてデータ モデルまたはクエリ戦略を設計する必要があります。

Tools

Apache Cassandra のAzure Cosmos DBは、マネージド サービス プラットフォームです。 このプラットフォームでは、クラスターを管理するための管理オーバーヘッドやユーティリティ (ガベージ コレクター、Java 仮想マシン (JVM)、ノード ツールなど) は必要ありません。 バイナリ CQLv4 互換性を使用する cqlsh などのツールがサポートされています。

  • Azure portal のデータ エクスプローラー、メトリック、ログ診断、PowerShell、CLI は、アカウントを管理するための他のサポートされているメカニズムです。

CQL シェル

ローカル コンピューターにインストールされている CQLSH を使用して、Azure Cosmos DBで Cassandra 用 API に接続できます。 これは、Apache Cassandra 3.11 に付属しており、環境変数を設定することですぐに機能します。 以下のセクションでは、CQLSH を使用して Windows または Linux 上の Azure Cosmos DB で Cassandra 用 API をインストール、構成、および接続する手順について説明します。

Warning

Azure Cosmos DB for Apache Cassandra への接続は、DataStax Enterprise (DSE) または Cassandra 4.0 バージョンの CQLSH では機能しません。 Cassandra 用 API に接続するときは、v3.11 オープン ソースの Apache Cassandra バージョンの CQLSH のみを使用してください。

ウィンドウズ:

  1. Python 3 をインストールします。

  2. PIP をインストールします。

    1. PIP をインストールする前に、 get-pip.py ファイルを ダウンロードします。
    2. まだ開いていない場合は、コマンド プロンプト ウィンドウを起動します。 これを行うには、Windows 検索バーを開き、「 cmd」 と入力してアイコンを選択します。
    3. 次に、次のコマンドを実行して 、get-pip.py ファイルをダウンロードします。
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Windows に PIP をインストールします。

    python get-pip.py
    
  4. PIP のインストールを確認します。 手順 3 のメッセージを探して、PIP がインストールされたフォルダーを確認します。 次に、そのフォルダーに移動し、コマンド pip ヘルプを実行します。

  5. PIP を使用して CQLSH をインストールします。

    pip3 install cqlsh==5.0.3
    
  6. Python 2 をインストールします。

  7. 認証メカニズムを使用して CQLSH を実行します。

Python 2 フォルダーを指す環境変数を設定する必要があります。

Unix/Linux/Mac にインストールします。

# Install default-jre and default-jdk
sudo apt install default-jre
sudo apt-get update
sudo apt install default-jdk

# Import the Baltimore CyberTrust root certificate:
curl https://cacert.omniroot.com/bc2025.crt > bc2025.crt
keytool -importcert -alias bc2025ca -file bc2025.crt

# Install the Cassandra libraries in order to get CQLSH:
echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra=3.11.13

Unix/Linux/Mac で接続する:

# Export the SSL variables:
export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false

# Connect to Azure Cosmos DB for Apache Cassandra:
cqlsh <YOUR_ACCOUNT_NAME>.cassandra.cosmosdb.azure.com 10350 -u <YOUR_ACCOUNT_NAME> -p <YOUR_ACCOUNT_PASSWORD> --ssl --protocol-version=4

Docker を使用して接続する:

docker run -it --rm -e SSL_VALIDATE=false -e SSL_VERSION=TLSv1_2 cassandra:3.11 cqlsh <account_name>.cassandra.cosmos.azure.com 10350 -u <YOUR_ACCOUNT_NAME> -p <YOUR_ACCOUNT_PASSWORD> --ssl

CQL v4 互換 SDK を介して実行されるすべての CRUD 操作は、使用されたエラーと要求ユニットに関する追加情報を返します。 プロビジョニングされたスループットを最も効率的に使用するには、DELETE コマンドと UPDATE コマンドをリソース ガバナンスを考慮して処理する必要があります。

gc_grace_seconds値を指定する場合は、0 にする必要があります。

var tableInsertStatement = table.Insert(sampleEntity); 
var insertResult = await tableInsertStatement.ExecuteAsync(); 
 
foreach (string key in insertResult.Info.IncomingPayload) 
        { 
            byte[] valueInBytes = customPayload[key]; 
            double value = Encoding.UTF8.GetString(valueInBytes); 
            Console.WriteLine($"CustomPayload:  {key}: {value}"); 
        } 

一貫性のマッピング

Azure Cosmos DB for Apache Cassandra では、読み取り操作の整合性を選択できます。 詳細については、「 一貫性レベルのマッピング」を参照してください。

アクセス許可とロールの管理

Azure Cosmos DBでは、Azure ポータルで取得できる、プロビジョニング、キーのローテーション、メトリックの表示、読み取り/書き込みおよび読み取り専用のパスワード/キーのAzureロールベースのアクセス制御 (Azure RBAC) がサポートされています。 Azure Cosmos DB では、CRUD アクティビティのロールはサポートされていません。

キースペースとテーブルのオプション

現在、 CREATE KEYSPACE コマンドのリージョン名、クラス、replication_factor、データセンターのオプションは無視されます。 システムは、基になるAzure Cosmos DBの global distribution レプリケーション メソッドを使用して、リージョンを追加します。 データのリージョン間プレゼンスが必要な場合は、PowerShell、CLI、または Azure portal を使用してアカウント レベルで有効にすることができます。 詳細については、「 データベース アカウントにリージョンを追加する」を参照してください

Durable_writesを無効にすることはできません。これは、Azure Cosmos DBによってすべての書き込みが永続的に行われるためです。 すべてのリージョンで、Azure Cosmos DBは 4 つのレプリカで構成されるレプリカ セット間でデータをレプリケートします。このレプリカ セットconfigurationは変更できません。

テーブルの作成時に、 gc_grace_secondsを除くすべてのオプションは無視されます。このオプションは 0 に設定する必要があります。 キースペースとテーブルには、最小値が 400 RU/秒の cosmosdb_provisioned_throughput という名前の追加オプションがあります。 Keyspace スループットを使用すると、複数のテーブル間でスループットを共有できます。 これは、すべてのテーブルでプロビジョニングされたスループットが使用されていないシナリオに役立ちます。 ALTER TABLE コマンドを使用すると、リージョン全体でプロビジョニングされたスループットを変更できます。

CREATE KEYSPACE sampleks WITH REPLICATION = {  'class' : 'SimpleStrategy'} AND cosmosdb_provisioned_throughput=2000;  

CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=2000; 

ALTER TABLE gks1.t1 WITH cosmosdb_provisioned_throughput=10000 ;

セカンダリ インデックス

Cassandra 用 API は、frozen コレクション型、decimal 型、variant 型を除くすべてのデータ型について、セカンダリ インデックスをサポートします。

Cassandra 再試行接続ポリシーの使用

Azure Cosmos DBは、リソース管理システムです。 操作によって使用される要求ユニットに基づいて、1 秒間に一部の操作を実行できます。 アプリケーションが特定の秒にその制限を超えると、要求はレート制限され、例外が発生します。 Azure Cosmos DB の Cassandra 用 API は、このような例外を Cassandra のネイティブ プロトコルの過負荷エラーに変換します。

レート制限がある場合にアプリケーションが要求をインターセプトして再試行できるようにするには、spark および Java 拡張機能が用意されています。 version 3 および version 4 Datastax ドライバー Azure Cosmos DBで Cassandra 用 API に接続する場合のコード サンプルもJava参照してください。 Azure Cosmos DBで他の SDK を使用して Cassandra の API にアクセスする場合は、これらの例外を再試行する再試行ポリシーを作成します。 または、Cassandra 用 API のサーバー側の再試行を有効にします。

次のステップ