كيفية توزيع القراءات عموميًا باستخدام واجهة برمجة تطبيقات قاعدة بيانات Azure Cosmos لـMongoDB

ينطبق على: MongoDB

توضح هذه المقالة كيفية توزيع عمليات القراءة عموميًا مع إعداداتتفضيل قراءة MongoDB باستخدام واجهة برمجة تطبيقات قاعدة بيانات Azure Cosmos لـMongoDB.

المتطلبات الأساسية

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

بدلاً من ذلك، يمكنك تجربة Azure Cosmos DB مجاناً دون اشتراك Azure، مجاناً دون التزامات. أو يمكنك استخدام Azure Cosmos DB Emulator لهذا البرنامج التعليمي مع سلسلة اتصال من:

mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true

راجع مقالة التشغيل السريع هذه للحصول على إرشادات حول استخدام مدخل Microsoft Azure لإعداد حساب Azure Cosmos DB مع التوزيع العمومي ثم الاتصال به.

استنساخ نموذج التطبيق

افتح نافذة git terminal، مثل git bash وcd للدليل المشغَّل.

شغِّل الأوامر التالية لاستنساخ عينة المستودع. استناداً إلى النظام الأساسي الذي تهتم به، استخدم إحدى عينات المستودعات التالية:

  1. عينة التطبيق .NET
  2. عينة التطبيق NodeJS
  3. عينة التطبيق "Mongoose"
  4. عينة التطبيق "Java"
  5. عينة التطبيق SpringBoot
git clone <sample repo url>

شغّل التطبيق

اعتماداً على النظام الأساسي المستخدم، قم بتثبيت الحزم المطلوبة وابدأ التطبيق. لتثبيت التبعيات، اتبع README المضمنة في عينة مستودع التطبيق. على سبيل المثال، في عينة التطبيق NodeJS، استخدم الأوامر التالية لتثبيت الحزم المطلوبة وبدء تشغيل التطبيق.

cd mean
npm install
node index.js

يحاول التطبيق الاتصال بمصدر MongoDB ويفشل لأن سلسلة الاتصال غير صالحة. اتبع الخطوات الموجودة في README لتحديث سلسلة الاتصال url. أيضا، قم بتحديث readFromRegion إلى منطقة قراءة في حساب Azure Cosmos DB الخاص بك. الإرشادات التالية من عينة NodeJS:

* Next, substitute the `url`, `readFromRegion` in App.Config with your Azure Cosmos DB account's values. 

بعد اتباع هذه الخطوات، يتم تشغيل عينة التطبيق وتنتج الإخراج التالي:

connected!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromSecondaryfunc query completed!

قراءة باستخدام وضع تفضيلات القراءة

يوفر بروتوكول MongoDB أوضاع تفضيلات القراءة التالية للعملاء لاستخدامها:

  1. PRIMARY
  2. PRIMARY_PREFERRED
  3. SECONDARY
  4. SECONDARY_PREFERRED
  5. NEAREST

راجع مستندات سلوك تفضيل قراءة MongoDB للحصول على تفاصيل حول سلوك كل من أوضاع تفضيل القراءة هذه. في Azure Cosmos DB، يتم تعيين الخرائط الأساسية إلى منطقة WRITE والخرائط الثانوية لمنطقة READ.

استنادا إلى السيناريوهات الشائعة، نوصي باستخدام الإعدادات التالية:

  1. إذا كانت قابلية الوصول العالية وقراءات زمن الانتقال المنخفض مطلوبة، فاستخدم وضع تفضيل القراءة الأقرب . يوجه هذا الإعداد عمليات القراءة إلى أقرب منطقة متوفرة. لاحظ أنه إذا كانت المنطقة الأقرب هي منطقة "WRITE"، يتم توجيه هذه العمليات إلى تلك المنطقة.
  2. إذا كانت هناك حاجة إلى قابلية وصول عالية وتوزيع جغرافي للقراءات (زمن الوصول ليس قيداً)، فاستخدم وضع تفضيل القراءة المفضل PRIMARY PREFERRED أو SECONDARY PREFERRED. يوجه هذا الإعداد عمليات القراءة إلى منطقة WRITE أو READ متوفرين على التوالي. إذا لم تكن المنطقة متاحة، فسيتم توجيه الطلبات إلى المنطقة المتاحة التالية وفقًا لسلوك تفضيل القراءة.

توضح القصاصة البرمجية التالية من عينة التطبيق كيفية تكوين تفضيلات القراءة NEAREST في NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.NEAREST});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromNearestfunc query completed!");
  });

وبالمثل، توضح القصاصة البرمجية أدناه كيفية تكوين تفضيلات القراءة SECONDARY_PREFERRED في NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.SECONDARY_PREFERRED});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromSecondaryPreferredfunc query completed!");
  });

يمكن أيضاً تعيين "تفضيلات القراءة" عن طريق التمرير readPreference كمعلمة في خيارات معرف موارد منتظم لسلسلة الاتصال:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017?ssl=true&replicaSet=globaldb&readPreference=nearest';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
  console.log("Connected correctly to server");

  const db = client.db(dbName);

  client.close();
});

راجع عينات مستودعات التطبيق المقابلة للأنظمة الأساسية الأخرى، مثل .NET و Java.

القراءة باستخدام العلامات

بالإضافة إلى وضع "تفضيلات القراءة"، يسمح بروتوكول MongoDB باستخدام العلامات لتوجيه عمليات القراءة. في واجهة برمجة تطبيقات Azure Cosmos DB ل MongoDB، يتم تضمين العلامة region بشكل افتراضي كجزء من الاستجابة isMaster :

"tags": {
         "region": "West US"
      }

ومن ثم، يمكن أن يستخدم MongoClient العلامة region جنباً إلى جنب مع اسم المنطقة لتوجيه عمليات القراءة إلى مناطق محددة. بالنسبة لحسابات Azure Cosmos DB، يمكن العثور على أسماء المناطق في مدخل Microsoft Azure على اليسار ضمن Settings-Replica> data globally. هذا الإعداد مفيد لتحقيق عزل القراءة - الحالات التي يريد فيها تطبيق العميل توجيه عمليات القراءة إلى منطقة معينة فقط. هذا الإعداد مثالياً للسيناريوهات من النوع الغير المتعلق بالإنتاج/التحليلات، والتي تعمل في الخلفية وليست من الخدمات الهامة للإنتاج.

توضح القصاصة البرمجية التالية من عينة التطبيق كيفية تكوين تفضيلات القراءة بالعلامات في NodeJS:

 var query = {};
  var readcoll = client.db('regionDB').collection('regionTest',{readPreference: new ReadPreference(ReadPreference.SECONDARY_PREFERRED, {"region": "West US"})});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromRegionfunc query completed!");
  });

راجع عينات مستودعات التطبيق المقابلة للأنظمة الأساسية الأخرى، مثل .NET و Java.

في هذه المقالة، تعلمت كيفية توزيع عمليات القراءة عمومياً باستخدام تفضيلات القراءة مع واجهة برمجة تطبيقات قاعدة بياناتAzure Cosmos الخاصة بـMongoDB.

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

إذا كنت لن تستمر في استخدام هذا التطبيق، فاحذف كل الموارد التي تم إنشاؤها بواسطة هذا المقالة في مدخل Azure من خلال الخطوات التالية:

  1. من القائمة اليمنى في مدخل Microsoft Azure، انقر فوق Resource groups ثم انقر فوق اسم المورد الذي قمت بإنشائه.
  2. في صفحة مجموعة الموارد، انقر فوق حذف، واكتب اسم المورد المطلوب حذفه في مربع النص، ثم حدد حذف.

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