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 myTable
tidak 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:
- Pasang Python 3
- Menginstal PIP
- Sebelum menginstal PIP, unduh file get-pip.py.
- Luncurkan permintaan perintah jika belum terbuka. Untuk melakukannya, buka bilah pencarian Windows, ketik cmd dan pilih ikonnya.
- Kemudian, jalankan perintah berikut untuk mengunduh file get-pip.py:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
- Menginstal PIP di Windows
python get-pip.py
- Verifikasi penginstalan PIP (cari pesan dari langkah 3 untuk mengonfirmasi folder mana PIP diinstal, lalu navigasikan ke folder tersebut dan jalankan bantuan pip perintah).
- Menginstal CQLSH menggunakan PIP
pip3 install cqlsh==5.0.3
- Menginstal Python 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
- Mulai membuat API untuk akun Cassandra, database, dan tabel dengan menggunakan aplikasi Java