ميزات Apache Cassandra المدعومة من Azure Cosmos DB ل Apache Cassandra

ينطبق على: كاساندرا

Azure Cosmos DB هي خدمة قواعد بيانات متعددة النماذج موزعة عالمياً من Microsoft. يمكنك التواصل مع Azure Cosmos DB ل Apache Cassandra من خلال برامج تشغيل عميل Cassandra مفتوحة المصدر المتوافقة مع البروتوكول السلكي للغة الاستعلام Cassandra (CQL).

باستخدام Azure Cosmos DB ل Apache Cassandra، يمكنك الاستمتاع بفوائد واجهات برمجة تطبيقات Apache Cassandra وإمكانيات المؤسسة التي يوفرها Azure Cosmos DB. تتضمن قدرات المؤسسة التوزيع العالمي، والتقسيم التلقائي، وضمانات التوفر وزمن الانتقال، والتشفير في حالة الثبات، والنسخ الاحتياطية، وأكثر من ذلك بكثير.

بروتوكول Cassandra

يتوافق Azure Cosmos DB ل Apache Cassandra مع واجهة برمجة تطبيقات Cassandra Query Language (CQL) v3.11 (متوافقة مع الإصدارات السابقة مع الإصدار 2.x). يتم سرد أوامر CQL المعتمدة والأدوات والتقييدات والاستثناءات أدناه. يجب أن يكون أي برنامج تشغيل عميل يفهم هذه البروتوكولات قادرا على الاتصال ب Azure Cosmos DB ل Apache Cassandra.

Azure Managed Instance لـ Apache Cassandra

بالنسبة لبعض العملاء، يمكن أن يكون التكيف مع واجهة برمجة التطبيقات ل Cassandra تحديا بسبب الاختلافات في السلوك و/أو التكوين، خاصة بالنسبة لهجرة الرفع والتحويل. إذا تم إدراج ميزة مهمة لتطبيقك على أنها غير مدعومة أدناه، ففكر في استخدام Azure Managed Instance ل Apache Cassandra. هذه خدمة Azure من الطرف الأول لاستضافة وصيانة مجموعات Apache Cassandra مفتوحة المصدر فقط مع توافق بنسبة 100٪.

برنامج تشغيل Cassandra

يتم دعم الإصدارات التالية من برامج تشغيل Cassandra بواسطة Azure Cosmos DB ل Apache Cassandra:

أنواع بيانات CQL

يدعم Azure Cosmos DB ل 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 ‏‏نعم‬

ثابتة مدعومة لإعلان نوع البيانات.

دوال CQL

يدعم Azure Cosmos DB ل Apache Cassandra وظائف CQL التالية:

الأمر مدعوم
Token * ‏‏نعم‬
ttl *** نعم
writetime *** نعم
cast ** نعم

إشعار

* تدعم واجهة برمجة التطبيقات ل Cassandra الرمز المميز كإسقاط/محدد، وتسمح فقط بالرمز المميز (pk) على الجانب الأيسر من عبارة where. على سبيل المثال، WHERE token(pk) > 1024 مدعوم، ولكن WHERE token(pk) > token(100)غير مدعوم.
** الدالة cast() غير قابلة للتداخل في واجهة برمجة التطبيقات ل Cassandra. على سبيل المثال، SELECT cast(count as double) FROM myTable مدعوم، ولكن SELECT avg(cast(count as double)) FROM myTableغير مدعوم.
*** تُستخدَم الطوابع الزمنية المخصصة وTTL المحددة مع الخيار USING على مستوى صف (وليس لكل خلية).

دوال مجمعة:

الأمر مدعوم
avg ‏‏نعم‬
count نعم
min نعم
max نعم
sum نعم

إشعار

تعمل الدالات التجميعية على الأعمدة العادية، ولكن التجميعات على أعمدة التجميع غير مدعومة.

دوال تحويل كائن ثنائي كبير الحجم:

الأمر مدعوم
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.

الأمر مدعوم
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 Shell

يدعم Azure Cosmos DB أوامر قاعدة البيانات التالية على واجهة برمجة التطبيقات لحسابات Cassandra.

الأمر مدعوم
CAPTURE ‏‏نعم‬
CLEAR ‏‏نعم‬
CONSISTENCY * غير متوفر
COPY لا
DESCRIBE نعم
cqlshExpand لا
EXIT ‏‏نعم‬
LOGIN N/A (دالة USER CQL غير مدعومة، وبالتالي LOGIN فهي زائدة عن الحاجة)
PAGING ‏‏نعم‬
SERIAL CONSISTENCY * غير متوفر
SHOW نعم
SOURCE ‏‏نعم‬
TRACING N/A (يتم دعم واجهة برمجة التطبيقات ل Cassandra بواسطة Azure Cosmos DB - استخدم التسجيل التشخيصي لاستكشاف الأخطاء وإصلاحها)

إشعار

يعمل التناسق بشكل مختلف في Azure Cosmos DB، راجع هنا لمزيد من المعلومات.

دعم JSON

الأمر مدعوم
SELECT JSON ‏‏نعم‬
INSERT JSON نعم
fromJson() لا
toJson() لا

واجهة برمجة التطبيقات لحدود Cassandra

لا يحتوي Azure Cosmos DB ل Apache Cassandra على أي حدود لحجم البيانات المخزنة في جدول. يمكن تخزين مئات التيرابايت أو البيتابايت من البيانات مع ضمان احترام حدود مفتاح القسم. وبالمثل، ليس لدى كل كيان أو صف مكافئ أي حدود لعدد الأعمدة. غير أنه، يجب ألا يتجاوز الحجم الإجمالي للكيان 2 ميجابت. لا يمكن أن تتجاوز البيانات لكل مفتاح قسم 20 جيجابت كما هو الحال في كافة واجهات برمجة التطبيقات الأخرى.

الأدوات

Azure Cosmos DB ل Apache Cassandra هو نظام أساسي للخدمة المدارة. لا يتطلب النظام الأساسي أي حمل أو أدوات مساعدة للإدارة مثل جامع المهملات وجهاز Java الظاهري (JVM) وnodetool لإدارة نظام المجموعة. أدوات مثل cqlsh التي تستخدم توافق CQLv4 الثنائي معتمدة.

  • مستكشف البيانات في مدخل Azure، والمقاييس، وتشخيص السجلات، وPowerShell، وCLI عبارة عن آليات أخرى مدعومة لإدارة الحساب.

CQL shell

يمكنك الاتصال بواجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB باستخدام CQLSH المثبت على جهاز محلي. يأتي مع Apache Cassandra 3.11 ويعمل بالخارج عن طريق تعيين متغيرات البيئة. تتضمن الأقسام التالية إرشادات تثبيت واجهة برمجة التطبيقات وتكوينها والاتصال بها ل Cassandra في Azure Cosmos DB، على Windows أو Linux باستخدام CQLSH.

تحذير

لن تعمل الاتصال إلى Azure Cosmos DB ل Apache Cassandra مع إصدارات DataStax Enterprise (DSE) أو Cassandra 4.0 من CQLSH. يرجى التأكد من استخدام الإصدار 3.11 فقط مصدر مفتوح إصدارات Apache Cassandra من CQLSH عند الاتصال بواجهة برمجة التطبيقات ل Cassandra.

Windows:

  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. تثبيت PIP على Windows
python get-pip.py
  1. تحقق من تثبيت PIP (ابحث عن رسالة من الخطوة 3 لتأكيد المجلد الذي تم تثبيت PIP فيه ثم انتقل إلى هذا المجلد وقم بتشغيل تعليمات pip للأوامر).
  2. تثبيت CQLSH باستخدام PIP
pip3 install cqlsh==5.0.3
  1. تثبيت Python 2
  2. شغل 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

ستؤدي كافة عمليات CRUD التي يتم تنفيذها من خلال SDK متوافق مع CQL v4 إلى الحصول على معلومات إضافية حول الخطأ وطلب وحدات مستهلكة. يجب معالجة أوامر الحذف والتحديث مع مراعاة إدارة الموارد لضمان الاستخدام الفعال فيما يتعلق بمعدل النقل المقدم.

  • ملاحظة: يجب أن تكون قيمة gc_grace_seconds صفراً في حالة تحديدها.
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 ل Apache Cassandra اختيار التناسق لعمليات القراءة. يتم تفصيل تعيين التناسق هنا.

الإذن وإدارة الدور

يدعم Azure Cosmos DB التحكم في الوصول المستند إلى دور Azure (Azure RBAC) لتوفير المفاتيح وتدويرها وعرض المقاييس وكلمات المرور/المفاتيح للقراءة والكتابة والقراءة فقط التي يمكن الحصول عليها من خلال مدخل Microsoft Azure. لا يدعم Azure Cosmos DB الأدوار لأنشطة CRUD.

خيارات مساحة المفاتيح والجدول

يتم تجاهل الخيارات الخاصة باسم المنطقة والفئة وreplication_factor ومركز البيانات في الأمر "إنشاء مساحة مفاتيح" حاليًا. يستخدم النظام أسلوب النسخ المتماثل للتوزيع العمومي ل Azure Cosmos DB الأساسي لإضافة المناطق. إذا كنت بحاجة إلى وجود البيانات عبر المناطق، يمكنك تمكينها على مستوى الحساب باستخدام PowerShell أو CLI أو المدخل، لمعرفة المزيد، راجع مقالة كيفية إضافة المناطق . لا يمكن تعطيل Durable_writes لأن Azure Cosmos DB يضمن أن تكون كل كتابة دائمة. في كل منطقة، يقوم Azure Cosmos DB بنسخ البيانات عبر مجموعة النسخ المتماثلة التي تتكون من أربع نسخ متماثلة ولا يمكن تعديل تكوين مجموعة النسخ المتماثلة هذا.

يتم تجاهل كافة الخيارات عند إنشاء الجدول، باستثناء gc_grace_seconds، والتي يجب تعيينها إلى الصفر. تحمل مساحة المفاتيح وجدول خيار إضافي يُسمى "cosmosdb_provisioned_throughput" مع قيمة الحد الأدنى من 400 RU/s. يسمح معدل نقل مساحة المفاتيح مشاركة الإنتاجية عبر جداول متعددة وهو مفيد للسيناريوهات عندما لا تستخدم كافة الجداول الإنتاجية المقدمة. يتيح الأمر «تعديل الجدول» تغيير معدل النقل المقدم عبر المناطق.

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 الفهارس الثانوية على جميع أنواع البيانات باستثناء أنواع المجموعات المجمدة والأرقام العشرية وأنواع المتغيرات.

استخدام نهج اتصال إعادة محاولة Cassandra

Azure Cosmos DB هو نظام الموارد التي تحكمها. يمكنك إجراء عدد معين من العمليات في ثانية معينة استناداً إلى وحدات الطلب التي تستهلكها العمليات. في حالة تجاوز أحد التطبيقات هذا الحد في ثانية معينة، تُفرَض حدود على معدل الطلبات ويمكن تقديم استثناءات. تترجم واجهة برمجة تطبيقات Cassandra في Azure Cosmos DB هذه الاستثناءات إلى أخطاء محملة بشكل زائد على بروتوكول Cassandra الأصلي. للتأكد من أن التطبيق الخاص بك يمكنه اعتراض الطلبات وإعادة محاولة تنفيذها في حالة تقييد المعدل، يتم توفير spark وملحقات Java . راجع أيضا نماذج التعليمات البرمجية ل Java للإصدار 3 والإصدار 4 من برامج تشغيل Datastax، عند الاتصال بواجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB. إذا كنت تستخدم SDKs أخرى للوصول إلى واجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB، فبادر بإنشاء نهج إعادة المحاولة لإعادة المحاولة على هذه الاستثناءات. بدلا من ذلك، قم بتمكين عمليات إعادة المحاولة من جانب الخادم لواجهة برمجة التطبيقات ل Cassandra.

الخطوات التالية