إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
مهم
هل تبحث عن حل قاعدة بيانات للسيناريوهات عالية النطاق مع اتفاقية مستوى خدمة التوفر (SLA) 99.999% والتحجيم التلقائي الفوري وتجاوز الفشل التلقائي عبر مناطق متعددة؟ ضع في اعتبارك Azure Cosmos DB ل NoSQL.
هل تتطلع إلى ترحيل تطبيق Apache Cassandra موجود؟ ضع في اعتبارك مثيل Azure المدار ل Apache Cassandra.
ابدأ مع Azure Cosmos DB لمكتبة عميل Apache Cassandra Node.js لتخزين البيانات غير المنظمة وإدارتها والاستعلام منها. اتبع الخطوات الواردة في هذا الدليل لإنشاء حساب جديد، وتثبيت مكتبة عميل Node.js، والاتصال بالحساب، وتنفيذ العمليات الشائعة، والاستعلام عن بيانات العينة النهائية.
Prerequisites
اشتراك Azure
- في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
أحدث إصدار من Azure CLI في Azure Cloud Shell.
- إذا كنت تفضل تشغيل أوامر مرجع CLI محليا، فقم بتسجيل الدخول إلى Azure CLI باستخدام
az loginالأمر .
- إذا كنت تفضل تشغيل أوامر مرجع CLI محليا، فقم بتسجيل الدخول إلى Azure CLI باستخدام
- Node.js 22 أو أحدث
الإعداد
أولا، إعداد الحساب وبيئة التطوير لهذا الدليل. يرشدك هذا القسم خلال عملية إنشاء حساب، والحصول على بيانات الاعتماد الخاصة به، ثم إعداد بيئة التطوير الخاصة بك.
إنشاء حساب
ابدأ بإنشاء واجهة برمجة تطبيقات لحساب Apache Cassandra. بمجرد إنشاء الحساب، قم بإنشاء مساحة المفاتيح وموارد الجدول.
-
Azure CLI - مدخل Microsoft Azure
إذا لم يكن لديك بالفعل مجموعة موارد مستهدفة
az group create، فاستخدم الأمر لإنشاء مجموعة موارد جديدة في اشتراكك.az group create \ --name "<resource-group-name>" \ --location "<location>"az cosmosdb createاستخدم الأمر لإنشاء Azure Cosmos DB جديد لحساب Apache Cassandra مع الإعدادات الافتراضية.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"إنشاء مساحة مفتاح جديدة باستخدام
az cosmosdb cassandra keyspace createالمسمىcosmicworks.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"إنشاء كائن JSON جديد لتمثيل المخطط الخاص بك باستخدام أمر Bash متعدد الأسطر. ثم استخدم
az cosmosdb cassandra table createالأمر لإنشاء جدول جديد باسمproducts.schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
الحصول على بيانات الاعتماد
الآن، احصل على كلمة المرور لمكتبة العميل لاستخدامها لإنشاء اتصال بالحساب الذي تم إنشاؤه مؤخرا.
-
Azure CLI - مدخل Microsoft Azure
استخدم
az cosmosdb showللحصول على نقطة الاتصال واسم المستخدم للحساب.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"سجل قيمة خصائص
contactPointوusernameمن إخراج الأوامر السابقة. قيم هذه الخصائص هي نقطة الاتصالواسم المستخدم الذي تستخدمه لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.استخدمه
az cosmosdb keys listللحصول على مفاتيح الحساب.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"سجل قيمة الخاصية
primaryMasterKeyمن إخراج الأوامر السابقة. قيمة هذه الخاصية هي كلمة المرور التي تستخدمها لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.
إعداد بيئة التطوير
ثم قم بتكوين بيئة التطوير الخاصة بك مع مشروع جديد ومكتبة العميل. هذه الخطوة هي آخر شرط أساسي مطلوب قبل الانتقال إلى بقية هذا الدليل.
ابدأ في مجلد فارغ.
تهيئة وحدة نمطية جديدة.
npm init es6 --yesتثبيت الحزمة
cassandra-driverمن Node Package Manager (npm).npm install --save cassandra-driverقم بإنشاء ملفindex.js .
ابدأ في دليل فارغ.
تهيئة وحدة نمطية جديدة.
npm init es6 --yesتثبيت الحزمة
typescriptمن Node Package Manager (npm).npm install --save-dev typescriptتثبيت الحزمة
tsxمن npm.npm install --save-dev tsxتثبيت الحزمة
cassandra-driverمن npm.npm install --save cassandra-driverتهيئة مشروع TypeScript باستخدام المحول البرمجي (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextقم بإنشاء ملف index.ts .
نموذج الكائن
| Description | |
|---|---|
Client |
يمثل اتصالا محددا بمجموعة |
Mapper |
عميل Cassandra Query Language (CQL) المستخدم لتشغيل الاستعلامات |
أمثلة على التعليمات البرمجية
مصادقة العميل
ابدأ بمصادقة العميل باستخدام بيانات الاعتماد التي تم جمعها مسبقا في هذا الدليل.
افتح ملف index.js في بيئة التطوير المتكاملة (IDE).
استيراد الأنواع التالية من الوحدة النمطية
cassandra-driver:cassandracassandra.Clientcassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;إنشاء متغيرات ثابتة للسلسلة لبيانات الاعتماد التي تم جمعها مسبقا في هذا الدليل. قم بتسمية المتغيرات
usernameوpasswordو.contactPointconst username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';إنشاء متغير سلسلة آخر للمنطقة التي قمت فيها بإنشاء Azure Cosmos DB لحساب Apache Cassandra. قم بتسمية هذا المتغير
region.const region = '<azure-region>';إنشاء كائن جديد
PlainTextAuthProviderباستخدام بيانات الاعتماد المحددة في الخطوات السابقة.let authProvider = new PlainTextAuthProvider( username, password );إنشاء كائن
Clientباستخدام بيانات الاعتماد ومتغيرات التكوين التي تم إنشاؤها في الخطوات السابقة.let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });الاتصال بشكل غير متزامن إلى نظام المجموعة.
await client.connect();إنشاء معين جديد يستهدف
cosmicworksمساحة المفتاح والجدولproduct. قم بتسمية المعينProduct.const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });إنشاء مثيل معين باستخدام الدالة
forModelProductواسم معين.const productMapper = mapper.forModel('Product');
افتح الملف index.ts في بيئة التطوير المتكاملة (IDE).
استيراد الأنواع التالية من الوحدة النمطية
cassandra-driver:cassandra.authcassandra.mappingcassandra.typescassandra.Clientcassandra.ClientOptionscassandra.mapping.Mappercassandra.auth.PlainTextAuthProvider
import { auth, mapping, types, Client, ClientOptions } from 'cassandra-driver'; const { Mapper } = mapping; const { PlainTextAuthProvider } = auth;إنشاء متغيرات ثابتة للسلسلة لبيانات الاعتماد التي تم جمعها مسبقا في هذا الدليل. قم بتسمية المتغيرات
usernameوpasswordو.contactPointconst username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';إنشاء متغير سلسلة آخر للمنطقة التي قمت فيها بإنشاء Azure Cosmos DB لحساب Apache Cassandra. قم بتسمية هذا المتغير
region.const region: string = '<azure-region>';إنشاء كائن جديد
PlainTextAuthProviderباستخدام بيانات الاعتماد المحددة في الخطوات السابقة.let authProvider = new PlainTextAuthProvider( username, password );إنشاء كائن مجهول بخيارات تضمن استخدام بروتوكول أمان طبقة النقل (TLS) 1.2.
let sslOptions = { secureProtocol: 'TLSv1_2_method' };إنشاء كائن
ClientOptionsباستخدام بيانات الاعتماد ومتغيرات التكوين التي تم إنشاؤها في الخطوات السابقة.let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };إنشاء كائن
ClientباستخدامclientOptionsالمتغير في الدالة الإنشائية.let client = new Client(clientOptions);الاتصال بشكل غير متزامن إلى نظام المجموعة.
await client.connect();إنشاء معين جديد يستهدف
cosmicworksمساحة المفتاح والجدولproduct. قم بتسمية المعينProduct.const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });إنشاء مثيل معين باستخدام الدالة
forModelProductواسم معين.const productMapper = mapper.forModel('Product');
Warning
تم تعطيل التحقق الكامل من أمان طبقة النقل (TLS) في هذا الدليل لتبسيط المصادقة. بالنسبة إلى عمليات نشر الإنتاج، قم بتمكين التحقق من الصحة بالكامل.
بيانات Upsert
بعد ذلك، قم بزيادة البيانات الجديدة في جدول. يضمن Upserting إنشاء البيانات أو استبدالها بشكل مناسب اعتمادا على ما إذا كانت نفس البيانات موجودة بالفعل في الجدول.
إنشاء كائن جديد في متغير يسمى
product.const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };استدعاء الدالة التي
insertتمر في المتغير الذيproductتم إنشاؤه في الخطوة السابقة بشكل غير متزامن.await productMapper.insert(product);
تعريف واجهة جديدة باسم
Productمع الحقول المطابقة للجدول الذي تم إنشاؤه مسبقا في هذا الدليل.Type IdstringNamestringCategorystringQuantityintPricedecimalClearanceboolinterface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }Tip
في Node.js، يمكنك إنشاء هذا النوع في ملف آخر أو إنشائه في نهاية الملف الموجود.
إنشاء كائن جديد من النوع
Product. تخزين الكائن في متغير يسمىproduct.const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };استدعاء الدالة التي
insertتمر في المتغير الذيproductتم إنشاؤه في الخطوة السابقة بشكل غير متزامن.await productMapper.insert(product);
قراءة البيانات
بعد ذلك، اقرأ البيانات التي تم إدراجها مسبقا في الجدول.
إنشاء كائن مجهول باسم
filter. في هذا الكائن، قم بتضمين خاصية باسمidبنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };استدعاء دالة
getالمعين الذي يمر فيfilterالمتغير. قم بتخزين النتيجة في متغير يسمىmatchedProduct.let matchedProduct = await productMapper.get(filter);
إنشاء كائن مجهول باسم
filter. في هذا الكائن، قم بتضمين خاصية باسمidبنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };استدعاء دالة
getالمعين الذي يمر فيfilterالمتغير. تخزين النتيجة في متغير يسمىmatchedProductمن النوعProduct.let matchedProduct: Product = await productMapper.get(filter);
بيانات الاستعلام
وأخيرا، استخدم استعلاما للعثور على كافة البيانات التي تطابق عامل تصفية معينا في الجدول.
إنشاء متغير سلسلة جديد باسم
queryمع استعلام CQL يطابق العناصر مع نفسcategoryالحقل.const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;إنشاء كائن مجهول باسم
params. في هذا الكائن، قم بتضمين خاصية باسمcategoryبنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.const params = { category: 'gear-surf-surfboards' };استدعاء الدالة
executeالتي تمر في كل منqueryالمتغيرين وparamsكوسيطات بشكل غير متزامن. قم بتخزين خاصية النتيجةrowsكمتغير يسمىmatchedProducts.let { rows: matchedProducts } = await client.execute(query, params);تكرار نتائج الاستعلام عن طريق استدعاء
foreachالأسلوب على صفيف المنتجات.matchedProducts.forEach(product => { // Do something here with each result });
إنشاء متغير سلسلة جديد باسم
queryمع استعلام CQL يطابق العناصر مع نفسcategoryالحقل.const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;إنشاء كائن مجهول باسم
params. في هذا الكائن، قم بتضمين خاصية باسمcategoryبنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.const params = { category: 'gear-surf-surfboards' };استدعاء الدالة
executeالتي تمر في كل منqueryالمتغيرين وparamsكوسيطات بشكل غير متزامن. تخزين النتيجة في متغير يسمىresultمن النوعtypes.ResultSet.let result: types.ResultSet = await client.execute(query, params);قم بتخزين خاصية النتيجة
rowsكمتغير يسمىmatchedProductsمن النوعProduct[].let matchedProducts: Product[] = result.rows;تكرار نتائج الاستعلام عن طريق استدعاء
foreachالأسلوب على صفيف المنتجات.matchedProducts.forEach((product: Product) => { // Do something here with each result });
تشغيل التعليمات البرمجية
قم بتشغيل التطبيق الذي تم إنشاؤه حديثا باستخدام محطة طرفية في دليل التطبيق الخاص بك.
node index.js
npx tsx index.ts
تنظيف الموارد
عندما لا تعد بحاجة إلى الحساب، قم بإزالة الحساب من اشتراك Azure الخاص بك عن طريق حذف المورد.
-
Azure CLI - مدخل Microsoft Azure
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"