Apache Cassandra için Azure Cosmos DB tarafından desteklenen Apache Cassandra özellikleri

ŞUNLAR IÇIN GEÇERLIDIR: Cassandra

Azure Cosmos DB, Microsoft'un global olarak dağıtılan çok modelli veritabanı hizmetidir. Cassandra Sorgu Dili (CQL) İkili Protokol v4 kablo protokolü uyumlu açık kaynak Cassandra istemci sürücüleri aracılığıyla Apache Cassandra için Azure Cosmos DB ile iletişim kurabilirsiniz.

Apache Cassandra için Azure Cosmos DB'yi kullanarak Apache Cassandra API'lerinin avantajlarından ve Azure Cosmos DB'nin sağladığı kurumsal özelliklerden yararlanabilirsiniz. Genel dağıtım, otomatik ölçek genişletme bölümlemesi, kullanılabilirlik ve gecikme süresi garantileri, REST’te şifreleme, yedeklemeler ve çok daha fazlası kurumsal özelliklere dahildir.

Cassandra protokolü

Apache Cassandra için Azure Cosmos DB, Cassandra Sorgu Dili (CQL) v3.11 API'si (sürüm 2.x ile geriye dönük uyumlu) ile uyumludur. Desteklenen CQL komutları, araçlar, sınırlamalar ve özel durumlar aşağıda listelenmiştir. Bu protokolleri anlayan tüm istemci sürücülerinin Apache Cassandra için Azure Cosmos DB'ye bağlanabilmesi gerekir.

Apache Cassandra için Azure Yönetilen Örneği

Bazı müşteriler için, özellikle lift-and-shift geçişleri için davranış ve/veya yapılandırma farklılıkları nedeniyle Cassandra için API'ye uyum sağlamak zor olabilir. Uygulamanız için kritik öneme sahip bir özellik aşağıda desteklenmiyor olarak listeleniyorsa Apache Cassandra için Azure Yönetilen Örneğini kullanmayı göz önünde bulundurun. Bu, %100 uyumlulukla saf açık kaynak Apache Cassandra kümelerini barındırmaya ve sürdürmeye yönelik birinci taraf bir Azure hizmetidir.

Cassandra sürücü

Cassandra sürücülerinin aşağıdaki sürümleri Apache Cassandra için Azure Cosmos DB tarafından desteklenir:

CQL veri türleri

Apache Cassandra için Azure Cosmos DB aşağıdaki CQL veri türlerini destekler:

Tür Desteklenir
ascii Yes
bigint Evet
blob Evet
boolean Evet
counter Evet
date Evet
decimal Evet
double Evet
float Evet
frozen Evet
inet Evet
int Evet
list Evet
set Evet
smallint Evet
text Evet
time Evet
timestamp Evet
timeuuid Evet
tinyint Evet
tuple Evet
uuid Evet
varchar Evet
varint Evet
tuples Evet
udts Evet
map Yes

Statik, veri türü bildirimi için desteklenir.

CQL işlevleri

Apache Cassandra için Azure Cosmos DB aşağıdaki CQL işlevlerini destekler:

Command Desteklenir
Token * Yes
ttl *** Evet
writetime *** Evet
cast ** Evet

Not

* Cassandra için API, projeksiyon/seçici olarak belirteci destekler ve yalnızca where yan tümcesinin sol tarafında belirtece (pk) izin verir. Örneğin, WHERE token(pk) > 1024 desteklenir, ancak WHERE token(pk) > token(100)desteklenmez .
cast()** İşlev Cassandra için API'de iç içe yerleştirilemez. Örneğin, SELECT cast(count as double) FROM myTable desteklenir, ancak SELECT avg(cast(count as double)) FROM myTabledesteklenmez .
Seçeneğiyle USING belirtilen özel zaman damgaları ve TTL, hücre başına değil, satır düzeyinde uygulanır.

Toplama işlevleri:

Command Desteklenir
avg Yes
count Evet
min Evet
max Evet
sum Evet

Not

Toplama işlevleri normal sütunlarda çalışır, ancak kümeleme sütunlarında toplamalar desteklenmez .

Blob dönüştürme işlevleri:

Command Desteklenir
typeAsBlob(value) Yes
blobAsType(value) Yes

UUID ve timeuuid işlevleri:

Command Desteklenir
dateOf() Yes
now() Evet
minTimeuuid() Evet
unixTimestampOf() Evet
toDate(timeuuid) Evet
toTimestamp(timeuuid) Evet
toUnixTimestamp(timeuuid) Evet
toDate(timestamp) Evet
toUnixTimestamp(timestamp) Evet
toTimestamp(date) Evet
toUnixTimestamp(date) Yes

CQL komutları

Azure Cosmos DB, Cassandra hesapları için API'de aşağıdaki veritabanı komutlarını destekler.

Command Desteklenir
ALLOW FILTERING Yes
ALTER KEYSPACE Yok (PaaS hizmeti, şirket içinde yönetilen çoğaltma)
ALTER MATERIALIZED VIEW Yes
ALTER ROLE Hayı
ALTER TABLE Evet
ALTER TYPE Hayır
ALTER USER Hayır
BATCH Evet (yalnızca unlogged batch)
COMPACT STORAGE Yok (PaaS hizmeti)
CREATE AGGREGATE Hayır
CREATE CUSTOM INDEX (SASI) Hayır
CREATE INDEX Evet (adlandırılmış dizinler dahil ancak tam FROZEN koleksiyonu desteklenmez)
CREATE FUNCTION Hayır
CREATE KEYSPACE (çoğaltma ayarları yoksayıldı) Yes
CREATE MATERIALIZED VIEW Evet
CREATE TABLE Evet
CREATE TRIGGER Hayı
CREATE TYPE Evet
CREATE ROLE Hayır
CREATE USER (Yerel Apache Cassandra'da kullanım dışı) Hayır
DELETE Evet
DISTINCT Hayır
DROP AGGREGATE Hayır
DROP FUNCTION Hayır
DROP INDEX Evet
DROP KEYSPACE Evet
DROP MATERIALIZED VIEW Evet
DROP ROLE Hayı
DROP TABLE Evet
DROP TRIGGER Hayı
DROP TYPE Evet
DROP USER (Yerel Apache Cassandra'da kullanım dışı) Hayır
GRANT Hayır
INSERT Evet
LIST PERMISSIONS Hayır
LIST ROLES Hayır
LIST USERS (Yerel Apache Cassandra'da kullanım dışı) Hayır
REVOKE Hayır
SELECT Evet
UPDATE Evet
TRUNCATE Evet
USE Yes

Basit İşlemler (LWT)

Bileşen Desteklenir
DELETE IF EXISTS Yes
DELETE conditions Evet
INSERT IF NOT EXISTS Evet
UPDATE IF EXISTS Evet
UPDATE IF NOT EXISTS Evet
UPDATE conditions Evet

Not

Şu anda çok bölgeli yazma işlemleri etkin olan hesaplar için basit işlemler desteklenmemektedir.

CQL Kabuğu komutları

Azure Cosmos DB, Cassandra hesapları için API'de aşağıdaki veritabanı komutlarını destekler.

Command Desteklenir
CAPTURE Yes
CLEAR Yes
CONSISTENCY * Yok
COPY Hayır
DESCRIBE Evet
cqlshExpand Hayı
EXIT Evet
LOGIN Yok (CQL işlevi USER desteklenmez, bu nedenle LOGIN yedeklidir)
PAGING Yes
SERIAL CONSISTENCY * YOK
SHOW Yes
SOURCE Yes
TRACING Yok (Cassandra API'si Azure Cosmos DB tarafından desteklenir - sorun giderme için tanılama günlüğünü kullanın)

Not

Tutarlılık Azure Cosmos DB'de farklı çalışır. Daha fazla bilgi için buraya bakın.

JSON Desteği

Command Desteklenir
SELECT JSON Yes
INSERT JSON Evet
fromJson() Hayır
toJson() Hayır

Cassandra için API sınırları

Apache Cassandra için Azure Cosmos DB'nin tabloda depolanan verilerin boyutuyla ilgili herhangi bir sınırı yoktur. Yüzlerce terabayt veya Petabaytlarca verinin depolanabilmesinin yanı sıra bölüm anahtarı sınırları da kabul edilir. Benzer şekilde, her varlık veya satır eşdeğerinin sütun sayısında herhangi bir sınırı yoktur. Ancak varlığın toplam boyutu 2 MB'ı aşmamalıdır. Bölüm anahtarı başına veriler diğer tüm API'lerde olduğu gibi 20 GB'ı aşamaz.

Araçlar

Apache Cassandra için Azure Cosmos DB yönetilen bir hizmet platformudur. Platform, kümeyi yönetmek için Atık Toplayıcı, Java Sanal Makinesi (JVM) ve nodetool gibi herhangi bir yönetim yükü veya yardımcı program gerektirmez. İkili CQLv4 uyumluluğunu kullanan cqlsh gibi araçlar desteklenir.

  • Azure portalının veri gezgini, ölçümleri, günlük tanılamaları, PowerShell ve CLI, hesabı yönetmek için desteklenen diğer mekanizmalardır.

CQL kabuğu

Yerel makinede yüklü CQLSH'yi kullanarak Azure Cosmos DB'de Cassandra API'sine bağlanabilirsiniz. Apache Cassandra 3.11 ile birlikte gelir ve ortam değişkenlerini ayarlayarak kutudan çıkar. Aşağıdaki bölümlerde Azure Cosmos DB'de Cassandra için API'yi yükleme, yapılandırma ve CQLSH kullanarak Windows veya Linux'a bağlanma yönergeleri yer almaktadır.

Uyarı

Apache Cassandra için Azure Cosmos DB'ye yönelik Bağlan ions, CQLSH'nin DataStax Enterprise (DSE) veya Cassandra 4.0 sürümleriyle çalışmaz. Cassandra için API'ye bağlanırken CQLSH'nin yalnızca v3.11 açık kaynak Apache Cassandra sürümlerini kullandığınızdan emin olun.

Windows:

  1. Python 3'ü yükleme
  2. PIP'i yükleme
    1. PIP'i yüklemeden önce get-pip.py dosyasını indirin.
    2. Henüz açık değilse bir komut istemi başlatın. Bunu yapmak için Windows arama çubuğunu açın, cmd yazın ve simgeyi seçin.
    3. Ardından, get-pip.py dosyasını indirmek için aşağıdaki komutu çalıştırın:
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 
    
  3. Windows'a PIP yükleme
python get-pip.py
  1. PIP yüklemesini doğrulayın (PIP'in hangi klasöre yüklendiğini onaylamak için 3. adımdan bir ileti arayın ve ardından bu klasöre gidin ve pip yardım komutunu çalıştırın).
  2. PIP kullanarak CQLSH yükleme
pip3 install cqlsh==5.0.3
  1. Python 2'yi yükleme
  2. Kimlik doğrulama mekanizmasını kullanarak CQLSH'yi çalıştırın.

Not

Ortam değişkenlerini Python 2 klasörüne işaret edecek şekilde ayarlamanız gerekir.

Unix/Linux/Mac üzerine yükleme:

# 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 ile Bağlan:

# 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 ile Bağlan:

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 uyumlu bir SDK aracılığıyla yürütülen tüm CRUD işlemleri, tüketilen hata ve istek birimleri hakkında ek bilgi döndürür. Sağlanan aktarım hızının en verimli şekilde kullanılmasını sağlamak için DELETE ve UPDATE komutları, kaynak idaresi dikkate alınarak işlenmelidir.

  • Not: gc_grace_seconds değeri belirtilmişse sıfır olmalıdır.
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}"); 
        } 

Tutarlılık eşleme

Apache Cassandra için Azure Cosmos DB, okuma işlemleri için tutarlılık seçeneği sunar. Tutarlılık eşlemesi burada ayrıntılı olarak anlatılır.

İzin ve rol yönetimi

Azure Cosmos DB, Anahtarları sağlama, döndürme, ölçümleri görüntüleme ve Azure portalı üzerinden edinilebilen okuma-yazma ve salt okunur parolalar/anahtarlar için Azure rol tabanlı erişim denetimini (Azure RBAC) destekler. Azure Cosmos DB, CRUD etkinlikleri için rolleri desteklemez.

Anahtar alanı ve Tablo seçenekleri

"Anahtar Alanı Oluştur" komutundaki bölge adı, sınıf, replication_factor ve veri merkezi seçenekleri şu anda yok sayılmıştır. Sistem, bölgeleri eklemek için temel alınan Azure Cosmos DB'nin genel dağıtım çoğaltma yöntemini kullanır. Verilerin bölgeler arası varlığına ihtiyacınız varsa PowerShell, CLI veya portal ile hesap düzeyinde etkinleştirebilirsiniz. Daha fazla bilgi edinmek için bölge ekleme makalesine bakın. Azure Cosmos DB her yazmanın dayanıklı olmasını sağladığından Durable_writes devre dışı bırakılamaz. Her bölgede Azure Cosmos DB, verileri dört çoğaltmadan oluşan çoğaltma kümesinde çoğaltır ve bu çoğaltma kümesi yapılandırması değiştirilemez.

Tablo oluşturulurken, sıfır olarak ayarlanması gereken gc_grace_seconds dışında tüm seçenekler yoksayılır. Keyspace ve tablo, en az 400 RU/sn değerine sahip "cosmosdb_provisioned_throughput" adlı ek bir seçeneğe sahiptir. Keyspace aktarım hızı, aktarım hızının birden çok tablo arasında paylaşılmasına olanak tanır ve tüm tabloların sağlanan aktarım hızını kullanmadığı senaryolar için kullanışlıdır. Alter Table komutu, bölgeler arasında sağlanan aktarım hızının değiştirilmesine olanak tanır.

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 ;

İkincil Dizin

Cassandra için API, dondurulmuş koleksiyon türleri, ondalık ve değişken türleri dışında tüm veri türlerinde ikincil dizinleri destekler.

Cassandra bağlantı yeniden deneme ilkesi kullanımı

Azure Cosmos DB, kaynak tarafından yönetilen bir sistemdir. İşlemler tarafından kullanılan istek birimlerine göre belirli bir saniye içinde belirli sayıda işlem yapabilirsiniz. Bir uygulama belirli bir saniyede bu sınırı aşarsa istekler hız sınırlı olur ve özel durumlar oluşturulur. Azure Cosmos DB'deki Cassandra API'si bu özel durumları Cassandra yerel protokolündeki aşırı yüklenmiş hatalara çevirir. Uygulamanızın hız sınırlaması durumunda istekleri araya alıp yeniden denemesini sağlamak için Spark ve Java uzantıları sağlanır. Ayrıca Bkz. Azure Cosmos DB'de Cassandra için API'ye bağlanırken sürüm 3 ve sürüm 4 Datastax sürücüleri için Java kod örnekleri. Azure Cosmos DB'de Cassandra API'sine erişmek için diğer SDK'ları kullanıyorsanız, bu özel durumları yeniden denemek için bir yeniden deneme ilkesi oluşturun. Alternatif olarak Cassandra için API için sunucu tarafı yeniden denemelerini etkinleştirin.

Sonraki adımlar