قاعدة البيانات في مشروع تجاري: ماذا تفعل؟

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



أعطي الكلمة للمؤلف.

نرحب بكم يا قراء هبر! نحن فريق WaveAccess ، سنشارك معك في هذه المقالة تجربة استخدام خدمة قاعدة بيانات Azure Cosmos DB (DB) في مشروع تجاري. سنخبرك لماذا تم تصميم قاعدة البيانات ، والفروق الدقيقة التي كان علينا مواجهتها أثناء التطوير.

ما هو Azure Cosmos DB


Azure Cosmos DB هي خدمة قاعدة بيانات تجارية موزعة عالميًا مع نموذج متعدد النماذج ، يتم توفيره كحل PaaS. وهي الجيل القادم من Azure DocumentDB.

تم تطوير قاعدة البيانات في عام 2017 من قبل Microsoft بمشاركة ليزلي لامبورت ، دكتوراه في علوم الكمبيوتر (الفائز بجائزة تورينج 2013 للمساهمة الأساسية في نظرية الأنظمة الموزعة ، مطور LaTex ، منشئ مواصفات TLA +).

الخصائص الرئيسية لـ Azure Cosmos DB هي:

  • قاعدة بيانات غير علائقية
  • يتم تخزين المستندات الموجودة به كملف JSON ؛
  • التحجيم الأفقي مع اختيار المناطق الجغرافية ؛



  • نموذج البيانات متعدد النماذج: القيمة الرئيسية ، المستند ، الرسم البياني ، عائلة الأعمدة ؛
  • الكمون المنخفض لـ 99٪ من الطلبات: أقل من 10 مللي ثانية لعمليات القراءة وأقل من 15 مللي ثانية لعمليات الكتابة (المفهرسة) ؛
  • مصممة لزيادة الإنتاجية ؛
  • يضمن توافر واتساق البيانات ووقت الاستجابة على مستوى جيش تحرير السودان بنسبة 99.999 ٪.
  • عرض النطاق الترددي شكلي
  • النسخ التلقائي (السيد-العبد) ؛
  • الفهرسة التلقائية للبيانات ؛
  • مستويات قابلة للتخصيص من اتساق البيانات. 5 مستويات مختلفة (قوي ، جمود محدود ، جلسة ، بادئة متناسقة ، نهائية) ؛

على الرسم البياني ، يمكنك رؤية اعتماد مستويات مختلفة من الاتساق على توافر البيانات وأدائها واتساقها.



  • للانتقال المريح إلى Cosmos DB من قاعدة بياناته ، هناك العديد من واجهات برمجة التطبيقات للوصول إلى البيانات: SQL ، JavaScript ، Gremlin ، MongoDB ، Cassandra ، Azure Blob ؛
  • جدار حماية قابل للتخصيص ؛
  • حجم قاعدة البيانات المخصصة.

المهمة التي قمنا بحلها


تنقل آلاف أجهزة الاستشعار الموجودة حول العالم المعلومات (فيما يلي الإشعارات) كل بضع ثوانٍ. يجب تخزين هذه الإشعارات في قاعدة البيانات ، ثم البحث عنها وعرضها في واجهة المستخدم الخاصة بمشغل النظام.

متطلبات العملاء:

  • استخدام مجموعة من تقنيات Microsoft ، بما في ذلك سحابة Azure ؛
  • إنتاج 100 طلب في الثانية ؛
  • لا تحتوي الإخطارات على هيكل واضح ويمكن أن تتوسع أكثر ؛
  • للإخطارات الحرجة ، سرعة المعالجة مهمة ؛
  • مرونة عالية في النظام.

بناءً على متطلبات العملاء ، تم الاتصال بنا بشكل مثالي من خلال قاعدة بيانات تجارية غير علائقية وموزعة عالميًا وموثوقة.



إذا نظرنا إلى قواعد البيانات المشابهة لـ Cosmos DB ، يمكننا تذكر Amazon DynamoDB و Google Cloud Spanner. لكن Amazon DynamoDB ليست موزعة عالميًا ، ولدى Google Cloud Spanner مستويات أقل من الاتساق وأنواع نماذج البيانات (جدولي ، علائقي).

لهذه الأسباب ، استقرنا في Azure Cosmos DB. للتفاعل مع قاعدة البيانات ، استخدمنا Azure Cosmos DB SDK for .NET ، حيث تمت كتابة الواجهة الخلفية في .NET.

الفروق الدقيقة التي واجهناها


1. إدارة قواعد البيانات

من أجل البدء في استخدام قاعدة البيانات ، تحتاج أولاً إلى اختيار أداة لإدارتها. استخدمنا Azure Cosmos DB Data Explorer في بوابة Azure و DocumentDbExplorer . هناك أيضًا أداة مساعدة Azure Storage Explorer.



2. إعداد مجموعات قاعدة البيانات

في Cosmos DB ، تتكون كل قاعدة بيانات من مجموعات ووثائق.

ميزات مجموعة قابلة للتخصيص لمشاهدة:

  • حجم المجموعة: ثابت أو غير محدود ؛
  • عرض النطاق الترددي بوحدات الطلبات في الثانية RU / s (من 400 RU / s) ؛



  • سياسة الفهرسة (بما في ذلك أو استبعاد المستندات والمسارات من وإلى الفهرس ، وإعداد أنواع مختلفة من الفهرس ، وإعداد أوضاع تحديث الفهرس).

مثال مؤشر نموذجي

{ "id": "datas", "indexingPolicy": { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/*", "indexes": [ { "kind": "Range", "dataType": "Number", "precision": -1 }, { "kind": "Hash", "dataType": "String" }, { "kind": "Spatial", "dataType": "Point" } ] } ], "excludedPaths": [] } } 

لكي تعمل بحث السلسلة الفرعية ، بالنسبة لحقول السلسلة ، يلزمك استخدام فهرس التجزئة ("النوع": "التجزئة").

3. معاملات قاعدة البيانات

يتم تنفيذ المعاملات في قاعدة البيانات على مستوى الإجراءات المخزنة (تنفيذ الإجراء المخزن عملية ذرية). إجراءات JavaScript المخزنة

 var helloWorldStoredProc = { id: "helloWorld", body: function () { var context = getContext(); var response = context.getResponse(); response.setBody("Hello, World"); } } 

4. قناة تغيير قاعدة البيانات

يستمع تغيير التغذية إلى التغييرات في المجموعة. عند إجراء تغييرات على مستندات المجموعة ، تُلقي قاعدة البيانات حدثًا حول التغييرات التي تطرأ على جميع المشتركين في هذه القناة.

استخدمنا Change Feed لتتبع تغييرات المجموعة. عند إنشاء قناة ، يجب عليك أولاً إنشاء مجموعة AUX مساعدة تنسق معالجة قناة التغيير للعديد من أدوار العمل.

5. قيود قاعدة البيانات:

  • عدم وجود عمليات مجمعة (الإجراءات المخزنة المستخدمة للحذف الجماعي وتحديث الوثائق) ؛
  • عدم التحديث الجزئي للوثيقة ؛
  • لا يوجد عملية SKIP (تعقيد تنفيذ ترقيم الصفحات). لتنفيذ ترقيم الصفحات في طلبات الإعلامات ، استخدمنا معلمات RequestContinuation (الارتباط بالعنصر الأخير نتيجة للإصدار ) و MaxItemCount (عدد العناصر التي تم إرجاعها من قاعدة البيانات). بشكل افتراضي ، يتم إرجاع النتائج على دفعات (لا يزيد عن 100 عنصر ولا يزيد عن 1 ميجابايت في كل حزمة). يمكن زيادة عدد العناصر المرتجعة إلى 1000 باستخدام المعلمة MaxItemCount.

6. معالجة خطأ قاعدة البيانات 429

عندما يصل عرض النطاق الترددي للمجموعة إلى الحد الأقصى ، تبدأ قاعدة البيانات في إنشاء خطأ "429 Too Many Request". لمعالجته ، يمكنك استخدام إعداد RetryOptions في SDK ، حيث MaxRetryAttemptsOnThrottledRequests هو عدد المحاولات لإكمال الطلب ، و MaxRetryWaitTimeInSeconds هو الوقت الإجمالي لمحاولات الاتصال.

7. التنبؤ بتكلفة استخدام قاعدة البيانات

للتنبؤ بتكلفة استخدام قاعدة البيانات ، استخدمنا الآلة الحاسبة على الإنترنت RU / s. في الخطة الأساسية ، تتطابق وحدة طلب واحدة لعنصر 1 كيلوبايت مع أمر GET بسيط عن طريق رابط لنفسه أو معرف هذا العنصر.

الاستنتاجات


Azure Cosmos DB سهل الاستخدام وسهل ومرن للتكوين من خلال بوابة Azure. العديد من واجهات برمجة التطبيقات للوصول إلى البيانات تجعل من السهل الترحيل إلى Cosmos DB. لا حاجة لإشراك مسؤول قاعدة البيانات للحفاظ على قاعدة البيانات. الضمانات المالية لاتفاقية مستوى الخدمة ، التحجيم الأفقي العالمي يجعل قاعدة البيانات هذه جذابة للغاية في السوق. وهي مناسبة للاستخدام في تطبيقات الشركات والتطبيقات العالمية التي تفرض متطلبات عالية على التسامح مع الخطأ وعرض النطاق الترددي. نحن في WaveAccess نواصل استخدام Cosmos DB في مشاريعنا.

عن المؤلف


ينشئ فريق WaveAccess برامج متطورة تقنيًا ومحملة بشكل كبير ومتسامحة للشركات حول العالم. ألكسندر أزاروف ، نائب الرئيس الأول لتطوير البرمجيات في WaveAccess ، يعلق:

للوهلة الأولى ، يمكن حل المهام الصعبة بطرق بسيطة نسبيًا. من المهم ليس فقط تعلم أدوات جديدة ، ولكن أيضًا لإتقان معرفة التقنيات المألوفة.

مدونة الشركة

Source: https://habr.com/ru/post/ar413757/


All Articles