تمثل نمذجة البيانات عملية تصميم لكيفية تخزين تطبيق للبيانات في قاعدة بيانات معينة. ومع استخدام قاعدة بيانات NoSQL مثل DynamoDB، تختلف نمذجة البيانات عن النمذجة باستخدام قاعدة بيانات ارتباطية. تم تصميم قاعدة البيانات الارتباطية لضمان المرونة ويمكن أن تكون مناسبة تمامًا للتطبيقات التحليلية. في نمذجة البيانات الارتباطية، ستبدأ أولاً بكياناتك. عندما يكون لديك نموذج ارتباطي عادي، فسيمكنك تلبية أي نمط استعلام تحتاجه في تطبيقك.
تم تصميم قواعد بيانات NoSQL (غير الارتباطية) لضمان السرعة والحجم - وليس المرونة. ورغم أن أداء قاعدة بياناتك الارتباطية قد يتراجع مع توسع النطاق، إلا أن قواعد البيانات المتوسعة أفقيًا مثل DynamoDB ستوفر أداء ثابتًا على أي نطاق. يمتلك بعض مستخدمي DynamoDB جداول بحجم أكبر من 100 تيرابايت، ويُعد أداء القراءة والكتابة لجداولهم هو نفسه عندما كانت الجداول أقل من 1 جيجابايت في الحجم.
يتطلب تحقيق أفضل النتائج باستخدام قاعدة بيانات NoSQL مثل DynamoDB تحولًا في التفكير من قاعدة البيانات الارتباطية النموذجية. استخدم أفضل الممارسات التالية عند نمذجة البيانات باستخدام DynamoDB.
1. التركيز على أنماط الوصول
عند القيام بأي نوع من نمذجة البيانات، ستبدأ بمخطط الكيان-العلاقة الذي يصف الكائنات (أو الوحدات) المختلفة في تطبيقك وكيفية ارتباطها (أو العلاقات الموجودة بين كياناتك).
في قواعد البيانات الارتباطية، ستضع كياناتك مباشرة في الجداول وتحدد العلاقات باستخدام مفاتيح خارجية. بعد تحديد جداول بياناتك، توفر قاعدة البيانات الارتباطية لغة استعلام مرنة لإرجاع البيانات بالشكل الذي تحتاجه.
في DynamoDB، تفكر في أنماط الوصول قبل نمذجة جدولك. بينما تركز قواعد بيانات NoSQL على السرعة، وليس المرونة. فأنت تسأل أولاً عن كيفية وصولك إلى بياناتك، ثم تقوم بنمذجتها في الشكل الذي سيتم الوصول إليه.
قبل تصميم جدول DynamoDB، قم بتوثيق كل ما تحتاجه لقراءة البيانات وكتابتها في تطبيقك. كن دقيقًا وفكر في جميع التدفقات في تطبيقك لأنك ستقوم بتحسين جدولك لأنماط وصولك.
2. تحسين عدد الطلبات المقدمة إلى DynamoDB
بعد قيامك بتوثيق احتياجات نمط الوصول لتطبيقك، ستكون جاهزًا لتصميم جدولك. يجب عليك تصميم جدولك لتقليل عدد الطلبات المقدمة إلى DynamoDB لكل نمط وصول. عادة، يجب أن يتطلب كل نمط وصول طلبًا واحدًا فقط مقدم إلى DynamoDB لأن طلبات الشبكة بطيئة، وهذا سيحد من عدد طلبات الشبكة التي ستقدمها في تطبيقك.
ولتحسين عدد الطلبات المقدمة إلى DynamoDB، سوف تحتاج إلى فهم بعض المفاهيم الأساسية:
● المفاتيح الأساسية
● الفهارس الثانوية
● المعاملات
3. لا تصنع نموذجًا ارتباطيًا
غالبًا ما يحاول الأشخاص الجدد في DynamoDB تطبيق نموذج ارتباطي أعلى DynamoDB غير الارتباطي. إذا حاولت القيام بذلك، فستفقد معظم فوائد DynamoDB.
تتمثل الأنماط المضادة الأكثر شيوعًا (الاستجابات غير الفعالة للمشاكل المتكررة) التي يجربها الناس مع DynamoDB فيما يلي:
- التسوية: في قاعدة البيانات الارتباطية، تقوم بتسوية بياناتك لتقليل تكرار البيانات ومساحة التخزين، ثم تستخدم الصلات للجمع بين جداول مختلفة متعددة. ومع ذلك، تعد الصلات على نطاق واسع بطيئة ومكلفة. لا تسمح DynamoDB بصلات لأنها تتباطأ مع زيادة حجم جدولك.
- نوع بيانات واحد لكل جدول: غالبًا ما سيتضمن جدول DynamoDB أنواعًا مختلفة من البيانات في جدول واحد. في مثالنا هنا، لدينا كيانات «المستخدم» و«اللعبة» وUserGameMapping في جدول واحد. في قاعدة البيانات الارتباطية، سيكون هذا النموذج على هيئة ثلاثة جداول مختلفة.
- فهارس ثانوية كثيرة جدًا: يحاول الأشخاص غالبًا إنشاء فهرس ثانوي لكل نمط وصول إضافي يحتاجونه. تُعد DynamoDB بلا مخطط، وهذا ينطبق على الفهارس الخاصة بك أيضًا. استخدم المرونة في سماتك لإعادة استخدام فهرس ثانوي واحد عبر أنواع بيانات متعددة في جدولك. وهذا يُسمى التحميل الزائد للفهرس.
في الخطوات الموضحة أدناه، سنقوم بإنشاء مخطط الكيان-العلاقة الخاص بنا ونرسم أنماط وصولنا مقدمًا. ويجب أن تكون هذه دائمًا الخطوات الأولى عند استخدام DynamoDB. بعد ذلك، في الوحدات التالية، سننفذ أنماط الوصول هذه في تصميم الجدول.
الوقت اللازم لاستكمال الوحدة: 20 دقيقة