0Pricing
AWS Solutions Architect · درس

الجداول والعناصر والمفاتيح الأساسية

صمّموا جداول DynamoDB باستخدام مفاتيح الأقسام والمفاتيح الأساسية المركبة، وتعرّفوا إلى حدود التخزين على مستوى العنصر.

الجداول والعناصر والمفاتيح الأساسية درس مجاني في AWS Solutions Architect على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AWS Solutions Architect، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.

DynamoDB: مخزن NoSQL للقيم والمفاتيح

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

تخزّن DynamoDB البيانات في جداول، وهي الحاوية العليا التي تناظر جدول SQL. وتوزَّع الجداول تلقائيًا عبر عقد تخزين متعددة في مناطق توافر متعددة، ما يوفر التكرار المضمّن من دون الحاجة إلى أي إعداد من جانبك.

الجداول والعناصر

يحتوي جدول DynamoDB على مجموعة من العناصر، وكل عنصر منها عبارة عن مجموعة من السمات. والسمات قيم ذات أنواع: String (S)، وNumber (N)، وBinary (B)، وBoolean (BOOL)، وNull (NULL)، وList (L)، وMap (M)، وأنواع Set (SS وNS وBS).

يجب أن يتضمن كل عنصر في الجدول سمات المفتاح الأساسي؛ أما جميع السمات الأخرى فهي اختيارية ويمكن أن تختلف بين العناصر. ويمكن أن يصل حجم العنصر الواحد إلى 400 KB كحد أقصى، بما في ذلك جميع أسماء سماته وقيمها.

# Example DynamoDB item structure (JSON)
{
  'UserId': {'S': 'user-abc-123'},
  'Timestamp': {'N': '1719000000'},
  'Username': {'S': 'alice'},
  'Score': {'N': '4200'},
  'Tags': {'SS': ['premium', 'verified']}
}

مفتاح أساسي بسيط: مفتاح القسم فقط

يتكوّن المفتاح الأساسي البسيط من سمة واحدة تُسمى مفتاح القسم (ويُسمى أيضًا مفتاح التجزئة). تطبّق DynamoDB دالة تجزئة داخلية على قيمة مفتاح القسم لتحديد قسم التخزين الذي يحتوي على العنصر. وتُخزّن جميع العناصر التي لها قيمة مفتاح القسم نفسها معًا.

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

# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
  --table-name Users \
  --attribute-definitions AttributeName=UserId,AttributeType=S \
  --key-schema AttributeName=UserId,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST

مفتاح أساسي مركّب: مفتاح القسم ومفتاح الفرز

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

يتسم هذا التصميم بمرونة كبيرة: إذ يمكن لعناصر متعددة مشاركة مفتاح القسم نفسه ما دامت مفاتيح الفرز مختلفة. فعلى سبيل المثال، قد يستخدم جدول Orders ‏CustomerId كمفتاح قسم وOrderDate كمفتاح فرز، ما يتيح لك الاستعلام عن جميع طلبات العميل مرتبة حسب التاريخ.

# Create a table with a composite primary key
aws dynamodb create-table \
  --table-name Orders \
  --attribute-definitions \
    AttributeName=CustomerId,AttributeType=S \
    AttributeName=OrderDate,AttributeType=S \
  --key-schema \
    AttributeName=CustomerId,KeyType=HASH \
    AttributeName=OrderDate,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

تصميم مفتاح القسم والأقسام الساخنة

يُعد اختيار مفتاح القسم المناسب أهم قرار في تصميم DynamoDB. ويمتلك مفتاح القسم الجيد تنوعًا عاليًا (عددًا كبيرًا من القيم المختلفة)، ويوزّع الوصول بالتساوي عبر الأقسام. وتؤدي الاختيارات السيئة إلى أقسام ساخنة يتلقى فيها أحد الأقسام حركة مرور أكبر بكثير من غيره، ما يسبب تقييد الطلبات.

أنماط التصميم الخاطئة التي ينبغي تجنبها: استخدام علامة منطقية (قيمتان فقط)، أو تاريخ يجمع جميع عمليات الكتابة لليوم الحالي معًا، أو حقل حالة منخفض التنوع. ومن الخيارات الجيدة: معرّف المستخدم، أو معرّف الجهاز، أو UUID عشوائي، أو قيم مركّبة مثل tenantId#entityType.

PutItem وGetItem وDeleteItem

العمليات الأساسية الثلاث على عناصر DynamoDB هي:

  • PutItem: يكتب عنصرًا جديدًا أو يستبدل بالكامل عنصرًا موجودًا له المفتاح الأساسي نفسه
  • GetItem: يسترد عنصرًا واحدًا باستخدام مفتاحه الأساسي الدقيق (ويتطلب المفتاح كاملًا—مفتاح القسم، ومفتاح الفرز إذا كان المفتاح مركّبًا)
  • DeleteItem: يزيل عنصرًا باستخدام مفتاحه الأساسي الدقيق

العمليات الثلاث ذرّية على مستوى العنصر. ويستخدم GetItem افتراضيًا قراءات متسقة في النهاية؛ بينما يؤدي إضافة --consistent-read إلى فرض قراءة متسقة بقوة تُرجع دائمًا أحدث قيمة مكتوبة.

# PutItem
aws dynamodb put-item \
  --table-name Users \
  --item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'

# GetItem
aws dynamodb get-item \
  --table-name Users \
  --key '{"UserId":{"S":"user-123"}}' \
  --consistent-read

UpdateItem والتعبيرات الشرطية

يعدّل UpdateItem سمات محددة لعنصر موجود من دون استبداله بالكامل، بخلاف PutItem. ويمكنك إضافة سمات أو إزالتها، أو إجراء عمليات حسابية ذرّية على سمات Number (مثل زيادة عدّاد).

تتيح لك التعبيرات الشرطية تحديد أن العملية لا تنجح إلا إذا تحقق شرط معين. فعلى سبيل المثال، لا تحدّث حالة عنصر إلا إذا كانت حاليًا PENDING. ويطبّق ذلك أنماط القفل التفاؤلي من دون معاملات، ويُعد من تقنيات تصميم DynamoDB الأساسية.

# Atomically increment a counter, only if item exists
aws dynamodb update-item \
  --table-name Orders \
  --key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
  --update-expression 'SET ItemCount = ItemCount + :inc' \
  --condition-expression 'attribute_exists(CustomerId)' \
  --expression-attribute-values '{":inc":{"N":"1"}}'

Query في مقابل Scan

يسترد Query العناصر التي تشترك في قيمة مفتاح القسم نفسها، مع إمكانية تصفيتها حسب شروط مفتاح الفرز. وتتميز Query بالكفاءة؛ إذ تقرأ القسم المستهدف فقط. ويمكنك استخدام شروط مفتاح الفرز مثل begins_with وbetween و= و< و> لتضييق النتائج داخل القسم.

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

# Query: get all orders for customer c-123 after a date
aws dynamodb query \
  --table-name Orders \
  --key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
  --expression-attribute-values \
    '{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'

القراءات المتسقة بقوة مقابل القراءات المتسقة نهائيًا

تخزّن DynamoDB ثلاث نسخ من بياناتكم عبر مناطق توافر متعددة (AZs). قد تُرجع القراءات المتسقة نهائيًا (وهي الإعداد الافتراضي) قيمة قديمة قليلًا إذا لم تكن عملية كتابة حديثة قد انتشرت إلى جميع النسخ بعد، لكنها تستهلك نصف وحدات سعة القراءة التي تستهلكها القراءات المتسقة بقوة.

تُرجع القراءات المتسقة بقوة دائمًا أحدث عملية كتابة مؤكدة، لكنها تكلّف ضعف عدد وحدات سعة القراءة (RCUs)، ولا تتوفر على الفهارس الثانوية العامة. اختاروا القراءات المتسقة نهائيًا لأحمال العمل ذات معدل النقل العالي والتي تركز على القراءة، واستخدموا القراءات المتسقة بقوة فقط عندما يتطلب تطبيقكم أحدث البيانات بشكل مطلق.

معاملات DynamoDB

تدعم DynamoDB معاملات ACID عبر TransactWriteItems وTransactGetItems. يمكن للمعاملة تجميع ما يصل إلى 100 عملية كتابة عبر عناصر متعددة، بل وعبر جداول متعددة، مع ضمان نجاحها جميعًا أو التراجع عنها جميعًا بشكل ذري.

استخدموا المعاملات في سيناريوهات مثل تحويل الأموال بين الحسابات (خصم عنصر وإضافة الرصيد إلى عنصر آخر) أو حجز مقعد (التحقق من التوفر وحجزه ذريًا). تكلّف المعاملات ضعف عدد وحدات سعة القراءة/الكتابة (RCUs/WCUs) المعتاد، لذا استخدموها فقط عندما تكون الذرية عبر عناصر متعددة مطلوبة فعلًا.

حد حجم العنصر ونصائح نمذجة البيانات

يؤثر حد DynamoDB البالغ 400 كيلوبايت لكل عنصر في نمذجة البيانات. بالنسبة إلى الحمولات الكبيرة (مثل الصور والمستندات الكبيرة)، خزّنوا البيانات الثنائية في S3، وخزّنوا مفتاح كائن S3 فقط في DynamoDB. بالنسبة إلى البيانات الهرمية المتداخلة بعمق، صمّموا كل نوع من العقد باستخدام نمط مفتاح قسم خاص به ضمن تصميم الجدول الواحد—إذ يحتوي جدول واحد على أنواع كيانات متعددة، ويُميَّز كل نوع ببادئة مفتاح القسم ونمط مفتاح الفرز.

يقلل تصميم الجدول الواحد عدد الجداول، ويتيح أنماط وصول فعالة من خلال وضع العناصر المرتبطة في القسم نفسه. وهي تقنية متقدمة تقلل العبء التشغيلي وتحسّن الأداء في أنماط الوصول المعقدة.

تحقق سريع

اختبروا مدى فهمكم لمفاهيم AWS Solutions Architect (SAA-C03) التي تناولها هذا الدرس.

مراجعة الدرس

تعلّمتم في هذا الدرس أن جداول DynamoDB تحتوي على عناصر بلا مخطط، ويقتصر حجم كل منها على 400 كيلوبايت، وأن المفاتيح الأساسية البسيطة تستخدم مفتاح قسم فقط، بينما تضيف المفاتيح المركبة مفتاح فرز للاستعلامات النطاقية، وأن مفاتيح الأقسام ذات التعدد العالي تمنع الأقسام الساخنة. استخدموا Query بدلًا من Scan للوصول الفعال. بعد ذلك سنستكشف نمطي السعة: الموفّرة وعند الطلب.

الأسئلة الشائعة

هل درس «الجداول والعناصر والمفاتيح الأساسية» مجاني؟

نعم — نص درس «الجداول والعناصر والمفاتيح الأساسية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AWS Solutions Architect، انتقل إلى CoddyKit PRO. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.

ماذا ستتعلم في «الجداول والعناصر والمفاتيح الأساسية»؟

صمّموا جداول DynamoDB باستخدام مفاتيح الأقسام والمفاتيح الأساسية المركبة، وتعرّفوا إلى حدود التخزين على مستوى العنصر. تتمرن على AWS Solutions Architect مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟

لا تُشترط خبرة سابقة. AWS Solutions Architect على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الجداول والعناصر والمفاتيح الأساسية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AWS Solutions Architect هذا؟

نعم. كل درس في AWS Solutions Architect يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الجداول والعناصر والمفاتيح الأساسية
  2. السعة المُوفّرة مقابل عند الطلب
  3. الفهارس الثانوية العامة والفهارس الثانوية المحلية
  4. تدفقات DynamoDB والجداول العامة
← العودة إلى AWS Solutions Architect