Fitur Apache Cassandra yang didukung oleh Azure Cosmos DB untuk Apache Cassandra

BERLAKU UNTUK: Cassandra

Azure Cosmos DB adalah layanan database multi-model Microsoft yang didistribusikan secara global. Anda dapat berkomunikasi dengan Azure Cosmos DB for Apache Cassandra melalui protokol kawat Protokol Biner Cassandra Query Language (CQL) v4 yang mematuhi driver klien Cassandra sumber terbuka.

Dengan menggunakan Azure Cosmos DB untuk Apache Cassandra, Anda dapat menikmati keuntungan dari API Apache Cassandra dan kemampuan perusahaan yang disediakan Azure Cosmos DB. Kemampuan perusahaan termasuk distribusi global, partisi skala otomatis, ketersediaan dan jaminan latensi, enkripsi saat diam, cadangan, dan banyak lagi.

Protokol Cassandra

Azure Cosmos DB for Apache Cassandra kompatibel dengan Cassandra Query Language (CQL) v3.11 API (kompatibel mundur dengan versi 2.x). Perintah, alat, batasan, dan pengecualian CQL yang didukung tercantum di bawah ini. Setiap driver klien yang memahami protokol ini harus dapat terhubung ke Azure Cosmos DB untuk Apache Cassandra.

Azure Managed Instance for Apache Cassandra

Bagi beberapa pelanggan, beradaptasi dengan API untuk Cassandra dapat menjadi tantangan karena perbedaan perilaku dan/atau konfigurasi, terutama untuk migrasi lift-and-shift. Jika fitur yang penting untuk aplikasi Anda tercantum sebagai tidak didukung di bawah ini, pertimbangkan untuk menggunakan Azure Managed Instance for Apache Cassandra. Ini adalah layanan Azure pihak pertama untuk menghosting dan memelihara kluster Apache Cassandra sumber terbuka murni dengan kompatibilitas 100%.

Driver Cassandra

Versi driver Cassandra berikut didukung oleh Azure Cosmos DB untuk Apache Cassandra:

Jenis data CQL

Azure Cosmos DB for Apache Cassandra mendukung jenis data CQL berikut:

Jenis Didukung
ascii Ya
bigint Ya
blob Ya
boolean Ya
counter Ya
date Ya
decimal Ya
double Ya
float Ya
frozen Ya
inet Ya
int Ya
list Ya
set Ya
smallint Ya
text Ya
time Ya
timestamp Ya
timeuuid Ya
tinyint Ya
tuple Ya
uuid Ya
varchar Ya
varint Ya
tuples Ya
udts Ya
map Ya

Statis didukung untuk deklarasi jenis data.

Fungsi CQL

Azure Cosmos DB for Apache Cassandra mendukung fungsi CQL berikut:

Perintah Didukung
Token * Ya
ttl *** Ya
writetime *** Ya
cast ** Ya

Catatan

* API untuk Cassandra mendukung token sebagai proyeksi/pemilih, dan hanya memungkinkan token (pk) di sisi kiri klausa where. Misalnya, WHERE token(pk) > 1024 didukung, tetapi WHERE token(pk) > token(100)tidak didukung.
** Fungsi cast() ini tidak dapat ditumpuk di API untuk Cassandra. Misalnya, SELECT cast(count as double) FROM myTable didukung, tetapi SELECT avg(cast(count as double)) FROM myTabletidak didukung.
*** Tanda waktu kustom dan TTL yang ditentukan dengan opsi USING diterapkan pada tingkat baris (dan bukan per sel).

Fungsi agregat:

Perintah Didukung
avg Ya
count Ya
min Ya
max Ya
sum Ya

Catatan

Fungsi agregat bekerja pada kolom reguler, tetapi agregat pada kolom pengklusteran tidak didukung.

Fungsi konversi blob:

Perintah Didukung
typeAsBlob(value) Ya
blobAsType(value) Ya

Fungsi UUID dan timeuuid:

Perintah Didukung
dateOf() Ya
now() Ya
minTimeuuid() Ya
unixTimestampOf() Ya
toDate(timeuuid) Ya
toTimestamp(timeuuid) Ya
toUnixTimestamp(timeuuid) Ya
toDate(timestamp) Ya
toUnixTimestamp(timestamp) Ya
toTimestamp(date) Ya
toUnixTimestamp(date) Ya

Perintah CQL

Azure Cosmos DB mendukung perintah database berikut pada API untuk akun Cassandra.

Perintah Didukung
ALLOW FILTERING Ya
ALTER KEYSPACE T/A (layanan PaaS, replikasi dikelola secara internal)
ALTER MATERIALIZED VIEW Ya
ALTER ROLE No
ALTER TABLE Ya
ALTER TYPE No
ALTER USER Tidak
BATCH Ya (batch tidak dalam log saja)
COMPACT STORAGE T/A (layanan PaaS)
CREATE AGGREGATE Tidak
CREATE CUSTOM INDEX (SASI) Tidak
CREATE INDEX Ya (termasuk indeks bernama tetapi koleksi FROZEN penuh tidak didukung)
CREATE FUNCTION No
CREATE KEYSPACE (pengaturan replikasi diabaikan) Ya
CREATE MATERIALIZED VIEW Ya
CREATE TABLE Ya
CREATE TRIGGER No
CREATE TYPE Ya
CREATE ROLE Tidak
CREATE USER (Tidak digunakan lagi di Apache Cassandra asli) Tidak
DELETE Ya
DISTINCT No
DROP AGGREGATE No
DROP FUNCTION No
DROP INDEX Ya
DROP KEYSPACE Ya
DROP MATERIALIZED VIEW Ya
DROP ROLE No
DROP TABLE Ya
DROP TRIGGER No
DROP TYPE Ya
DROP USER (Tidak digunakan lagi di Apache Cassandra asli) Tidak
GRANT No
INSERT Ya
LIST PERMISSIONS No
LIST ROLES Tidak
LIST USERS (Tidak digunakan lagi di Apache Cassandra asli) Tidak
REVOKE No
SELECT Ya
UPDATE Ya
TRUNCATE Ya
USE Ya

Transaksi Ringan (LWT)

Komponen Didukung
DELETE IF EXISTS Ya
DELETE conditions Ya
INSERT IF NOT EXISTS Ya
UPDATE IF EXISTS Ya
UPDATE IF NOT EXISTS Ya
UPDATE conditions Ya

Catatan

Transaksi ringan saat ini tidak didukung untuk akun yang mengaktifkan penulisan multi-wilayah.

Perintah CQL Shell

Azure Cosmos DB mendukung perintah database berikut pada API untuk akun Cassandra.

Perintah Didukung
CAPTURE Ya
CLEAR Ya
CONSISTENCY * T/A
COPY Tidak
DESCRIBE Ya
cqlshExpand No
EXIT Ya
LOGIN T/A (fungsi CQL USER tidak didukung, karenanya LOGIN redundan)
PAGING Ya
SERIAL CONSISTENCY * T/A
SHOW Ya
SOURCE Ya
TRACING N/A (API untuk Cassandra didukung oleh Azure Cosmos DB - gunakan pembuatan log diagnostik untuk pemecahan masalah)

Catatan

Konsistensi bekerja secara berbeda di Azure Cosmos DB, lihat di sini untuk informasi selengkapnya.

Dukungan JSON

Perintah Didukung
SELECT JSON Ya
INSERT JSON Ya
fromJson() No
toJson() Tidak

BATAS API untuk Cassandra

Azure Cosmos DB for Apache Cassandra tidak memiliki batasan ukuran data yang disimpan dalam tabel. Ratusan terabyte atau Petabyte data dapat disimpan sambil memastikan batas kunci partisi dipatuhi. Demikian pula, setiap entitas atau setara baris tidak memiliki batasan pada jumlah kolom. Namun, ukuran total entitas tidak boleh melebihi 2 MB. Data per kunci partisi tidak boleh melebihi 20 GB seperti di semua API lainnya.

Alat

Azure Cosmos DB for Apache Cassandra adalah platform layanan terkelola. Platform tidak memerlukan overhead manajemen atau utilitas seperti Pengumpul Sampah, Java Virtual Machine (JVM), dan nodetool untuk mengelola kluster. Alat seperti cqlsh yang menggunakan kompatibilitas CQLv4 Biner didukung.

  • Penjelajah data, metrik, diagnostik log, PowerShell, dan CLI portal Microsoft Azure adalah mekanisme lain yang didukung untuk mengelola akun.

Shell CQL

Anda dapat terhubung ke API untuk Cassandra di Azure Cosmos DB dengan menggunakan CQLSH yang diinstal pada komputer lokal. CQLSH dilengkapi dengan Apache Cassandra 3.11 dan berfungsi secara langsung dengan mengatur variabel lingkungan. Bagian berikut mencakup instruksi untuk menginstal, mengonfigurasi, dan menyambungkan ke API untuk Cassandra di Azure Cosmos DB, di Windows atau Linux menggunakan CQLSH.

Peringatan

Koneksi ke Azure Cosmos DB untuk Apache Cassandra tidak akan berfungsi dengan CQLSH versi DataStax Enterprise (DSE) atau Cassandra 4.0. Pastikan Anda hanya menggunakan CQLSH versi V3.11 sumber terbuka Apache Cassandra saat menyambungkan ke API untuk Cassandra.

Windows:

  1. Pasang Python 3
  2. Menginstal PIP
    1. Sebelum menginstal PIP, unduh file get-pip.py.
    2. Luncurkan permintaan perintah jika belum terbuka. Untuk melakukannya, buka bilah pencarian Windows, ketik cmd dan pilih ikonnya.
    3. Kemudian, jalankan perintah berikut untuk mengunduh file get-pip.py:
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Menginstal PIP di Windows
python get-pip.py
  1. Verifikasi penginstalan PIP (cari pesan dari langkah 3 untuk mengonfirmasi folder mana PIP diinstal, lalu navigasikan ke folder tersebut dan jalankan bantuan pip perintah).
  2. Menginstal CQLSH menggunakan PIP
pip3 install cqlsh==5.0.3
  1. Menginstal Python 2
  2. Jalankan CQLSH menggunakan mekanisme autentikasi.

Catatan

Anda perlu mengatur variabel lingkungan untuk menunjuk ke folder Python 2.

Instal di 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

Terhubung dengan 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

Terhubung dengan 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

Semua operasi CRUD yang dijalankan melalui SDK yang kompatibel CQL v4 akan mengembalikan informasi tambahan tentang kesalahan dan unit permintaan yang digunakan. Perintah DELETE dan UPDATE harus ditangani dengan tata kelola sumber daya yang dipertimbangkan, untuk memastikan penggunaan throughput yang disediakan paling efisien.

  • Perhatikan bahwa nilai gc_grace_seconds harus nol jika ditentukan.
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}"); 
        } 

Pemetaan konsistensi

Azure Cosmos DB for Apache Cassandra menyediakan pilihan konsistensi untuk operasi baca. Pemetaan konsistensi diuraikan secara terperinci di sini.

Manajemen izin dan peran

Azure Cosmos DB mendukung kontrol akses berbasis peran Azure (Azure RBAC) untuk menyediakan, memutar kunci, melihat metrik dan kata sandi/kunci baca-tulis dan baca-saja yang dapat diperoleh melalui portal Microsoft Azure. Azure Cosmos DB tidak mendukung peran untuk aktivitas CRUD.

Opsi Ruang Kunci dan Tabel

Opsi untuk nama wilayah, kelas, replication_factor, dan pusat data dalam perintah "Create Keyspace" diabaikan saat ini. Sistem menggunakan metode replikasi distribusi global Azure Cosmos DB yang mendasarinya untuk menambahkan wilayah. Jika Anda memerlukan kehadiran data lintas wilayah, Anda dapat mengaktifkannya di tingkat akun dengan PowerShell, CLI, atau portal, untuk mempelajari selengkapnya, lihat artikel cara menambahkan wilayah. Durable_writes tidak dapat dinonaktifkan karena Azure Cosmos DB memastikan setiap penulisan tahan lama. Di setiap wilayah, Azure Cosmos DB mereplikasi data di seluruh set replika yang terdiri dari empat replika dan konfigurasi set replika ini tidak dapat diubah.

Semua opsi diabaikan saat membuat tabel, kecuali gc_grace_seconds, yang harus diatur ke nol. Ruang kunci dan tabel memiliki opsi tambahan bernama "cosmosdb_provisioned_throughput" dengan nilai minimum 400 RU/dtk. Throughput Ruang Kunci memungkinkan berbagi throughput di beberapa tabel dan berguna untuk skenario ketika semua tabel tidak menggunakan throughput yang disediakan. Perintah Alter Table memungkinkan mengubah throughput yang disediakan di seluruh wilayah.

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 ;

Indeks Sekunder

API untuk Cassandra mendukung indeks sekunder pada semua jenis data kecuali jenis koleksi beku, desimal, dan jenis varian.

Penggunaan kebijakan coba ulang koneksi Cassandra

Azure Cosmos DB adalah sistem yang diatur sumber daya. Anda dapat melakukan sejumlah operasi dalam satu detik tertentu berdasarkan unit permintaan yang digunakan oleh operasi tersebut. Jika aplikasi melebihi batas tersebut dalam satu detik, permintaan akan dibatasi kecepatannya dan pengecualian akan diberikan. API untuk Cassandra di Azure Cosmos DB menerjemahkan pengecualian ini ke kesalahan yang kelebihan beban pada protokol asli Cassandra. Untuk memastikan bahwa aplikasi Anda dapat mencegat dan mencoba lagi permintaan jika terjadi pembatasan tarif, spark dan ekstensi Java disediakan. Lihat juga sampel kode Java untuk driver Datastax versi 3 dan versi 4 , saat menyambungkan ke API untuk Cassandra di Azure Cosmos DB. Jika Anda menggunakan SDK lain untuk mengakses API untuk Cassandra di Azure Cosmos DB, buat kebijakan coba lagi untuk mencoba kembali pengecualian ini. Atau, aktifkan percobaan ulang sisi server untuk API untuk Cassandra.

Langkah berikutnya