تستعرض في هذا الدرس بعض الأمثلة البسيطة لإدخال البيانات واستردادها باستخدام DynamoDB. يمكنك إنشاء جدول DynamoDB الخاص بك باستخدام واجهة برمجة تطبيقات CreateTable، ثم إدراج بعض العناصر باستخدام استدعاء واجهة برمجة تطبيقات BatchWriteItem‏. أخيرًا، يمكنك استرداد عناصر فردية باستخدام استدعاء واجهة برمجة تطبيقات GetItem. وقبل استعراضك لهذه الأمثلة، سنناقش نموذج البيانات الذي سيتم استخدامه في تطبيقك لبيع الكتب عبر الإنترنت.

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

الوقت اللازم لاستكمال الوحدة: 15 دقيقة


تقوم مفاهيم DynamoDB التالية بدور رئيسي في هذه الوحدة:

  • الجدول: مجموعة من سجلات بيانات DynamoDB.
  • العنصر: سجل بيانات واحد في جدول DynamoDB. ويمكن مقارنته بصف في قاعدة بيانات ارتباطية.
  • السمة: عنصر بيانات واحد على عنصر. ويمكن مقارنته بعمود في قاعدة بيانات ارتباطية. ومع ذلك، وعلى خلاف الأعمدة الموجودة في قاعدة بيانات ارتباطية، لا يلزم تحديد السمات عند إنشاء الجدول، بخلاف المفتاح الأساسي الذي ستتم مناقشته لاحقًا في هذه الوحدة. قد تكون السمات بمثابة أنواع بسيطة مثل السلاسل أو الأعداد الصحيحة أو قيمة منطقية، أو تكون أنواعًا معقدة مثل القوائم أو الخرائط.
  • المفتاح الأساسي: المفتاح الأساسي هو معرف فريد لعنصر واحد في جدول DynamoDB. يجب تحديد اسم المفتاح الأساسي ونوعه عند إنشاء الجدول، ويجب تضمين مفتاح أساسي من النوع المحدد مع كل عنصر مكتوب على جدول. يتكون المفتاح الأساسي البسيط من سمة واحدة، ويتكون المفتاح الأساسي المركب من سمتين: مفتاح القسم ومفتاح الفرز. فعلى سبيل المثال، يمكنك إنشاء مفتاح أساسي بسيط باستخدام "UserID" كمعرّف، أو إنشاء مفتاح أساسي مركب من خلال الجمع بين "UserID" و"Creation_Date" كمعرّف للعنصر.

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

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

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

فمع مراعاة هذه الاحتياجات، يمكنك استخدام المخطط التالي لجدولك:

  • العنوان (سلسلة): عنوان الكتاب
  • المؤلف (سلسلة): مؤلف الكتاب
  • الفئة (سلسلة): فئة الكتاب، مثل التاريخ والسيرة الذاتية والخيال العلمي
  • التنسيقات (خريطة): التنسيقات المختلفة المتاحة للبيع (مثل غلاف فني وغلاف ورقي وكتاب صوتي) وأرقام العناصر في نظام التخزين الخاص بك

تقوم من خلال الخطوات التالية بإنشاء الجدول عن طريق تحديد المفتاح الأساسي المركب (المؤلف والعنوان) لجدولك. ثم تقوم بتحميل بعض العناصر في الجدول الخاص بك وقراءة العناصر الفردية من الجدول.


  • الخطوة 1. إنشاء جدول DynamoDB

    يتضمن الدليل الذي قمت بتنزيله برنامج create_table.py نصي والذي يقوم بإنشاء جدول‏ كتب باستخدام واجهة برمجة تطبيقات CreateTable. يمكنك تشغيل هذا البرنامج النصي عن طريق إدخال الأمر التالي في محطة AWS Cloud9 الطرفية.

    $ python create_table.py

    إذا فتحت البرنامج النصي create_table.py باستخدام محرر AWS Cloud9، ينبغي ملاحظة أن:

    • يحدد البرنامج النصي المفتاح الأساسي المركب لجدولك باستخدام وسيطة KeySchema في استدعاء واجهة برمجة التطبيقات CreateTable. يستخدم جدولك الخاص المؤلف كمفتاح التجزئة والعنوان كمفتاح النطاق.
    • يحدد البرنامج النصي الإنتاجية المتوفرة لجدولك عن طريق تحديد كل من وحدات سعة القراءة ووحدات سعة الكتابة. ويتيح لك DynamoDB تعيين سعة القراءة والكتابة بشكل منفصل، مما يسمح لك بضبط التكوين الخاصة بك لتلبي احتياجات تطبيقك دون الدفع مقابل الإفراط في التوفير عالي التكلفة.
  • الخطوة 2. تحميل العناصر في الجدول

    في هذه الخطوة، تقوم بتحميل بعض الكتب في الجدول. قم بإجراء الأمر التالي في محطة AWS Cloud9 الطرفية.
    $ python insert_items.py
    يقوم هذا الأمر بتشغيل البرنامج النصي التالي.
    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    with table.batch_writer() as batch:
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Rainmaker",
            "Category": "Suspense", "Formats": { "Hardcover": "J4SUKVGU", "Paperback": "D7YF4FCX" } })
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Firm",
            "Category": "Suspense", "Formats": { "Hardcover": "Q7QWE3U2",
            "Paperback": "ZVZAYY4F", "Audiobook": "DJ9KS9NM" } })
        batch.put_item(Item={"Author": "James Patterson", "Title": "Along Came a Spider",
            "Category": "Suspense", "Formats": { "Hardcover": "C9NR6RJ7",
            "Paperback": "37JVGDZG", "Audiobook": "6348WX3U" } })
        batch.put_item(Item={"Author": "Dr. Seuss", "Title": "Green Eggs and Ham",
            "Category": "Children", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
        batch.put_item(Item={"Author": "William Shakespeare", "Title": "Hamlet",
            "Category": "Drama", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
    

    كما يظهر البرنامج النصي السابق، استخدمت واجهة برمجة التطبيقات ‏BatchWriteItem لتحميل خمسة كتب في الجدول. يتضمن كل كتاب سمتي المؤلف والعنوان للمفتاح الأساسي، والفئة والتنسيقات لمعلومات إضافية حول الكتب. تحتوي كل سمة على نوع يمكن اعتباره نوع بسيط مثل سلسلة لسمة الفئة، أو نوع معقد مثل خريطة لسمة التنسيقات.

    لاحظ أنك أدخلت بيانات عبر HTTP API باستخدام مكتبة عملاء Boto 3. يتم تنفيذ جميع طلبات الوصول إلى البيانات ومعالجتها عبر طلبات HTTP، بدلاً من الحفاظ على اتصال مستمر بقاعدة البيانات كما هو شائع في أنظمة إدارة قواعد البيانات الارتباطية.

  • الخطوة 3. استرداد العناصر من الجدول

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

    قم بإجراء الأمر التالي في محطة AWS Cloud9 الطرفية.

    $ python get_item.py

    يعمل هذا على تشغيل البرنامج النصي التالي لاسترداد عنصر واحد، وهو كتاب The RainMaker لجون غريشام.

    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    resp = table.get_item(Key={"Author": "John Grisham", "Title": "The Rainmaker"})
    
    print(resp['Item'])

    ينبغي أن تطبع وحدتك الطرفية بيانات الكتاب الكاملة المستردة من الجدول.

    $ python get_item.py
    {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}

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


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