مشاركة عبر


التشغيل السريع: Azure Cosmos DB لمكتبة عميل Apache Cassandra ل Java

Important

هل تبحث عن حل قاعدة بيانات للسيناريوهات عالية النطاق مع اتفاقية مستوى خدمة التوفر (SLA) 99.999% والتحجيم التلقائي الفوري وتجاوز الفشل التلقائي عبر مناطق متعددة؟ ضع في اعتبارك Azure Cosmos DB ل NoSQL.

هل تتطلع إلى ترحيل تطبيق Apache Cassandra موجود؟ ضع في اعتبارك مثيل Azure المدار ل Apache Cassandra.

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

الوثائق | التعليمات البرمجية | المصدر للمكتبةحزمة (Maven)

Prerequisites

  • أحدث إصدار من Azure CLI في Azure Cloud Shell.

    • إذا كنت تفضل تشغيل أوامر مرجع CLI محليا، فقم بتسجيل الدخول إلى Azure CLI باستخدام az login الأمر .
  • Java 21 أو أحدث

الإعداد

أولا، إعداد الحساب وبيئة التطوير لهذا الدليل. يرشدك هذا القسم خلال عملية إنشاء حساب، والحصول على بيانات الاعتماد الخاصة به، ثم إعداد بيئة التطوير الخاصة بك.

إنشاء حساب

ابدأ بإنشاء واجهة برمجة تطبيقات لحساب Apache Cassandra. بمجرد إنشاء الحساب، قم بإنشاء مساحة المفاتيح وموارد الجدول.

  1. إذا لم يكن لديك بالفعل مجموعة موارد مستهدفة az group create ، فاستخدم الأمر لإنشاء مجموعة موارد جديدة في اشتراكك.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create استخدم الأمر لإنشاء Azure Cosmos DB جديد لحساب Apache Cassandra مع الإعدادات الافتراضية.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableCassandra"
    
  3. إنشاء مساحة مفتاح جديدة باستخدام az cosmosdb cassandra keyspace create المسمى cosmicworks.

    az cosmosdb cassandra keyspace create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. إنشاء كائن 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"
    

الحصول على بيانات الاعتماد

الآن، احصل على كلمة المرور لمكتبة العميل لاستخدامها لإنشاء اتصال بالحساب الذي تم إنشاؤه مؤخرا.

  1. استخدم az cosmosdb show للحصول على نقطة الاتصال واسم المستخدم للحساب.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. سجل قيمة خصائص contactPoint و username من إخراج الأوامر السابقة. قيم هذه الخصائص هي نقطة الاتصالواسم المستخدم الذي تستخدمه لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.

  3. استخدمه az cosmosdb keys list للحصول على مفاتيح الحساب.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. سجل قيمة الخاصية primaryMasterKey من إخراج الأوامر السابقة. قيمة هذه الخاصية هي كلمة المرور التي تستخدمها لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.

إعداد بيئة التطوير

ثم قم بتكوين بيئة التطوير الخاصة بك مع مشروع جديد ومكتبة العميل. هذه الخطوة هي آخر شرط أساسي مطلوب قبل الانتقال إلى بقية هذا الدليل.

  1. ابدأ في دليل فارغ.

  2. إنشاء مشروع وحدة تحكم Java جديد باستخدام Maven.

    mvn archetype:generate -DgroupId=quickstart -DartifactId=console -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  3. استيراد الحزمة java-driver-core من Maven. أضف هذا القسم إلى ملف pom.xml الخاص بك.

    <dependency>
      <groupId>org.apache.cassandra</groupId>
      <artifactId>java-driver-core</artifactId>
      <version>[4.,)</version>
    </dependency>
    
  4. افتح الملف /console/src/main/java/quickstart/App.java .

  5. لاحظ لغة تطبيق Java الحالية.

    package quickstart;
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
        }
    }
    
  6. إزالة التعليقات وإخراج وحدة التحكم من المتداول. كتلة التعليمات البرمجية هذه هي نقطة البداية لبقية هذا الدليل.

    package quickstart;
    
    public class App 
    {
        public static void main(String[] args)
        {
        }
    }
    
  7. java.security.NoSuchAlgorithmException استيراد مساحة الاسم.

    import java.security.NoSuchAlgorithmException;
    
  8. قم بتحديث main توقيع الأسلوب للإشارة إلى أنه قد يطرح الاستثناء NoSuchAlgorithmException .

    public static void main(String[] args) throws NoSuchAlgorithmException
    {    
    }
    

    Important

    تفترض الخطوات المتبقية في هذا الدليل أنك تضيف التعليمات البرمجية main الخاصة بك داخل الأسلوب .

  9. أنشئ المشروع.

    mvn compile
    

نموذج الكائن

Description
CqlSession يمثل اتصالا محددا بمجموعة
PreparedStatement يمثل عبارة CQL المحوسبة مسبقا التي يمكن تنفيذها عدة مرات بكفاءة
BoundStatement يمثل عبارة معدة مع معلمات مرتبطة
Row يمثل صفا واحدا من نتيجة استعلام

أمثلة على التعليمات البرمجية

مصادقة العميل

ابدأ بمصادقة العميل باستخدام بيانات الاعتماد التي تم جمعها مسبقا في هذا الدليل.

  1. افتح الملف /console/src/main/java/quickstart/App.java في بيئة التطوير المتكاملة (IDE).

  2. استيراد الأنواع التالية:

    • java.net.InetSocketAddress
    • javax.net.ssl.SSLContext
    • com.datastax.oss.driver.api.core.CqlIdentifier
    • com.datastax.oss.driver.api.core.CqlSession
    • com.datastax.oss.driver.api.core.cql.BoundStatement
    • com.datastax.oss.driver.api.core.cql.PreparedStatement
    • com.datastax.oss.driver.api.core.cql.ResultSet
    • com.datastax.oss.driver.api.core.cql.Row
    import java.net.InetSocketAddress;    
    
    import javax.net.ssl.SSLContext;
    
    import com.datastax.oss.driver.api.core.CqlIdentifier;
    import com.datastax.oss.driver.api.core.CqlSession;
    import com.datastax.oss.driver.api.core.cql.BoundStatement;
    import com.datastax.oss.driver.api.core.cql.PreparedStatement;
    import com.datastax.oss.driver.api.core.cql.ResultSet;
    import com.datastax.oss.driver.api.core.cql.Row;
    
  3. إنشاء متغيرات سلسلة لبيانات الاعتماد التي تم جمعها مسبقا في هذا الدليل. قم بتسمية المتغيرات usernameو passwordو.contactPoint قم أيضا بإنشاء متغير سلسلة باسم region لمركز البيانات المحلي.

    String username = "<username>";
    String password = "<password>";
    String contactPoint = "<contact-point>";
    
  4. إنشاء متغير سلسلة آخر للمنطقة التي قمت فيها بإنشاء Azure Cosmos DB لحساب Apache Cassandra. قم بتسمية هذا المتغير region.

    String region = "<region>";
    
  5. إنشاء كائن SSLContext للتأكد من أنك تستخدم بروتوكول أمان طبقة النقل (TLS).

    SSLContext sslContext = SSLContext.getDefault();
    
  6. إنشاء كائن جديد CqlSession باستخدام بيانات الاعتماد ومتغيرات التكوين التي تم إنشاؤها في الخطوات السابقة. تعيين نقطة الاتصال ومركز البيانات المحلي وبيانات اعتماد المصادقة ومساحة المفاتيح وسياق أمان طبقة النقل (TLS).

    CqlSession session = CqlSession.builder()
        .addContactPoint(new InetSocketAddress(contactPoint, 10350))
        .withLocalDatacenter(region)
        .withAuthCredentials(username, password)
        .withKeyspace(CqlIdentifier.fromCql("cosmicworks"))
        .withSslContext(sslContext)
        .build();
    

Warning

تم تعطيل التحقق الكامل من أمان طبقة النقل (TLS) في هذا الدليل لتبسيط المصادقة. بالنسبة إلى عمليات نشر الإنتاج، قم بتمكين التحقق من الصحة بالكامل.

بيانات Upsert

بعد ذلك، قم بزيادة البيانات الجديدة في جدول. يضمن Upserting إنشاء البيانات أو استبدالها بشكل مناسب اعتمادا على ما إذا كانت نفس البيانات موجودة بالفعل في الجدول.

  1. تعريف فئة جديدة باسم Product مع حقول مطابقة للجدول الذي تم إنشاؤه مسبقا في هذا الدليل.

    class Product {
        public String id;
        public String name;
        public String category;
        public int quantity;
        public boolean clearance;
    
        public Product(String id, String name, String category, int quantity, boolean clearance) {
            this.id = id;
            this.name = name;
            this.category = category;
            this.quantity = quantity;
            this.clearance = clearance;
        }
    
        @Override
        public String toString() {
            return String.format("Product{id='%s', name='%s', category='%s', quantity=%d, clearance=%b}",
                    id, name, category, quantity, clearance);
        }
    }
    

    Tip

    في Java، يمكنك إنشاء هذا النوع في ملف آخر أو إنشائه في نهاية الملف الموجود.

  2. إنشاء كائن جديد من النوع Product. تخزين الكائن في متغير يسمى product.

    Product product = new Product(
        "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "Yamba Surfboard",
        "gear-surf-surfboards",
        12,
        false
    );
    
  3. إنشاء متغير سلسلة جديد باسم insertQuery باستخدام استعلام لغة استعلام Cassandra (CQL) لإدراج صف جديد.

    String insertQuery = "INSERT INTO product (id, name, category, quantity, clearance) VALUES (?, ?, ?, ?, ?)";
    
  4. قم بإعداد عبارة الإدراج وربط خصائص المنتج كمعلمات.

    PreparedStatement insertStmt = session.prepare(insertQuery);
    BoundStatement boundInsert = insertStmt.bind(
        product.id,
        product.name,
        product.category,
        product.quantity,
        product.clearance
    );
    
  5. رفع المنتج عن طريق تنفيذ العبارة المنضمة.

    session.execute(boundInsert);
    

قراءة البيانات

بعد ذلك، اقرأ البيانات التي تم إدراجها مسبقا في الجدول.

  1. إنشاء متغير سلسلة جديد باسم readQuery مع استعلام CQL يطابق العناصر مع نفس id الحقل.

    String readQuery = "SELECT * FROM product WHERE id = ? LIMIT 1";
    
  2. إنشاء متغير سلسلة باسم id بنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.

    String id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb";
    
  3. قم بإعداد العبارة وربط حقل المنتج id كمعلمة.

    PreparedStatement readStmt = session.prepare(readQuery);
    BoundStatement boundRead = readStmt.bind(id);
    
  4. قم بتنفيذ العبارة المنضمة وتخزين النتيجة في متغير يسمى readResult.

    ResultSet readResult = session.execute(boundRead);
    
  5. استرداد الصف الأول من مجموعة النتائج وتعيينه إلى كائن Product إذا تم العثور عليه.

    Row row = readResult.one();
    Product matchedProduct = new Product(
        row.getString("id"),
        row.getString("name"),
        row.getString("category"),
        row.getInt("quantity"),
        row.getBoolean("clearance")
    );
    

بيانات الاستعلام

الآن، استخدم استعلاما للعثور على كافة البيانات التي تطابق عامل تصفية معين في الجدول.

  1. إنشاء متغير سلسلة جديد باسم findQuery مع استعلام CQL يطابق العناصر مع نفس category الحقل.

    String findQuery = "SELECT * FROM product WHERE category = ? ALLOW FILTERING";
    
  2. إنشاء متغير سلسلة باسم id بنفس قيمة المنتج الذي تم إنشاؤه مسبقا في هذا الدليل.

    String category = "gear-surf-surfboards";
    
  3. قم بإعداد العبارة وربط فئة المنتج كمعلمة.

    PreparedStatement findStmt = session.prepare(findQuery);
    BoundStatement boundFind = findStmt.bind(category);
    
  4. قم بتنفيذ العبارة المنضمة وتخزين النتيجة في متغير يسمى findResults.

    ResultSet results = session.execute(boundFind);
    
  5. تكرار نتائج الاستعلام وتعيين كل صف إلى كائن Product .

    for (Row result : results) {
        Product queriedProduct = new Product(
            result.getString("id"),
            result.getString("name"),
            result.getString("category"),
            result.getInt("quantity"),
            result.getBoolean("clearance")
        );
        // Do something here with each result
    }
    

إغلاق جلسة العمل

في Java، يطلب منك إغلاق الجلسة بعد الانتهاء من أي استعلامات وعمليات.

session.close();

تشغيل التعليمات البرمجية

قم بتشغيل التطبيق الذي تم إنشاؤه حديثا باستخدام محطة طرفية في دليل التطبيق الخاص بك.

mvn compile
mvn exec:java -Dexec.mainClass="quickstart.App"

Tip

تأكد من تشغيل هذا الأمر داخل المسار /console الذي تم إنشاؤه ضمن هذا الدليل.

تنظيف الموارد

الآن، احصل على كلمة المرور لمكتبة العميل لاستخدامها لإنشاء اتصال بالحساب الذي تم إنشاؤه مؤخرا.

  1. استخدم az cosmosdb show للحصول على نقطة الاتصال واسم المستخدم للحساب.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. سجل قيمة خصائص contactPoint و username من إخراج الأوامر السابقة. قيم هذه الخصائص هي نقطة الاتصالواسم المستخدم الذي تستخدمه لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.

  3. استخدمه az cosmosdb keys list للحصول على مفاتيح الحساب.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. سجل قيمة الخاصية primaryMasterKey من إخراج الأوامر السابقة. قيمة هذه الخاصية هي كلمة المرور التي تستخدمها لاحقا في هذا الدليل للاتصال بالحساب باستخدام المكتبة.

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