ในโมดูลนี้ คุณจะได้เรียนรู้ตัวอย่างง่ายๆ ในการแทรกและการเรียกข้อมูลด้วย DynamoDB คุณจะต้องสร้างตาราง DynamoDB ของคุณโดยใช้ API CreateTable จากนั้นแทรกรายการโดยใช้การเรียกใช้ API BatchWriteItem สุดท้าย คุณจะต้องเรียกรายการแต่ละรายการโดยใช้การเรียกใช้ API GetItem ก่อนที่คุณจะทำตามตัวอย่างต่อไปนี้ เราจะพูดคุยเกี่ยวกับโมเดลข้อมูลที่จะใช้ในตัวอย่างแอปพลิเคชันร้านหนังสือออนไลน์ของคุณ

ในโมดูลถัดไป คุณจะได้เรียนรู้วิธีการเรียกรายการหลายรายการต่อครั้ง โดยใช้การเรียกใช้ API การสืบค้น และวิธีการเปิดใช้งานรูปแบบการสืบค้นเพิ่มเติมโดยใช้ดัชนีรอง นอกจากนี้ คุณยังจะได้ทราบวิธีการอัปเดตรายการที่มีอยู่ในตารางของคุณ

ระยะเวลาที่ใช้ในการศึกษาโมดูล: 15 นาที


แนวคิด DynamoDB ต่อไปนี้จะมีบทบาทสำคัญในโมดูลนี้:

  • ตาราง: ชุดบันทึกชุดมูลของ DynamoDB
  • รายการ: บันทึกข้อมูลเดี่ยวในตาราง DynamoDB ซึ่งเทียบได้กับแถวในฐานข้อมูลเชิงสัมพันธ์
  • คุณลักษณะ: องค์ประกอบข้อมูลเดี่ยวในรายการ ซึ่งเทียบได้กับคอลัมน์ในฐานข้อมูลเชิงสัมพันธ์ แต่ไม่เหมือนกับคอลัมน์ในฐานข้อมูลเชิงสัมพันธ์ตรงที่ว่าไม่จำเป็นต้องระบุคุณลักษณะเมื่อสร้างตาราง นอกจากคีย์หลักที่จะกล่าวถึงต่อไปในโมดูลนี้ คุณลักษณะอาจอยู่ในประเภททั่วไป อย่างเช่น สตริง จำนวนเต็มหรือบูลีน หรืออยู่ในประเภทที่ซับซ้อน เช่น รายการหรือแผนที่
  • คีย์หลัก: คีย์หลักคือรหัสเฉพาะสำหรับรายการเดี่ยวในตาราง DynamoDB คุณจะต้องระบุชื่อและประเภทของคีย์หลักเมื่อสร้างตาราง และจะต้องรวมคีย์หลักในประเภทที่ระบุกับแต่ละรายการที่เขียนลงในตาราง คีย์หลักพื้นฐานประกอบด้วยคุณลักษณะเดี่ยว และคีย์หลักแบบรวมประกอบด้วยคุณลักษณะ 2 ข้อ คือคีย์พาร์ติชันและคีย์เรียงลำดับ เช่น คุณสามารถสร้างคีย์หลักพื้นฐานโดยใช้ “UserID” เป็นรหัส หรือสร้างคีย์หลักแบบรวมโดยการรวม “UserID” และ “Creation_Date” เป็นรหัสรายการ

เมื่อสร้างแอปพลิเคชัน คุณควรใช้เวลาในการออกแบบโมเดลข้อมูลที่จำเป็นในแอปพลิเคชันลอจิกของคุณ การออกแบบโมเดลข้อมูลนี้ควรพิจารณาถึงความต้องการในการเข้าถึงข้อมูลที่จำเป็นในแอปพลิเคชันของคุณ ทั้งการอ่านหรือเขียนข้อมูล

DynamoDB เป็นฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ เมื่อใช้ฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ คุณจะไม่จำเป็นต้องระบุสคีมาทั้งหมดล่วงหน้าเมื่อสร้างตาราง คุณเพียงต้องกำหนด คีย์หลัก สำหรับตารางของคุณ ซึ่งจะระบุบันทึกแต่ละรายการในตารางของคุณโดยเฉพาะ วิธีนี้จะช่วยลดต้นทุนการออกแบบโมเดลของคุณที่ต้องจ่ายล่วงหน้า เพราะคุณสามารถแก้ไขสคีมาของคุณได้ง่ายๆ หากความต้องการของแอปพลิเคชันของคุณเปลี่ยนแปลงไป

ดังที่กล่าวไว้ในส่วน “ความรู้พื้นฐานเกี่ยวกับแอปพลิเคชัน” ใน “ข้อมูลเบื้องต้น” ของบทแนะนำสอนการใช้งานนี้ แอปพลิเคชันของคุณจะต้องเรียกหนังสือแต่ละเล่มตามชื่อเรื่องและผู้แต่ง เนื่องจากการรวมชื่อเรื่องและผู้แต่งเป็นรหัสเฉพาะของหนังสือ คุณจึงสามารถใช้คุณลักษณะเหล่านั้นเป็นคีย์หลักของตารางได้ นอกจากนี้ แอปพลิเคชันของคุณยังต้องจัดเก็บข้อมูลเกี่ยวกับหมวดหมู่ของหนังสือ เช่น ประวัติศาสตร์หรือชีวประวัติ รวมถึงรูปแบบของหนังสือที่มี เช่น หนังสือปกแข็ง หนังสือปกอ่อนหรือหนังสือเสียง ซึ่งจะแมปไว้กับหมายเลขรายการในระบบคลังข้อมูลของคุณ

โดยคำนึงถึงความต้องการเหล่านี้ คุณสามารถใช้สคีมาต่อไปนี้สำหรับตารางของคุณ:

  • ชื่อเรื่อง (สตริง): ชื่อหนังสือ
  • ผู้แต่ง (สตริง): ผู้แต่งหนังสือ
  • หมวดหมู่ (สตริง) หมวดหมู่ของหนังสือ เช่น ประวัติศาสตร์ ชีวประวัติ และนิยายวิทยาศาสตร์
  • รูปแบบ (แมป): รูปแบบต่างๆ ที่คุณมีวางจำหน่าย (เช่น หนังสือปกแข็ง หนังสือปกอ่อนและหนังสือเสียง) และหมายเลขรายการในระบบคลังข้อมูลของคุณ

ในขั้นตอนต่อไปนี้ คุณจะต้องสร้างตารางโดยการระบุคีย์หลักแบบรวม (ผู้แต่ง และ ชื่อเรื่อง) ในตารางของคุณ จากนั้น คุณจะต้องโหลดรายการลงในตารางและอ่านแต่ละรายการจากตาราง


  • ขั้นตอนที่ 1 สร้างตาราง DynamoDB

    ไดเรกทอรีที่คุณได้ดาวน์โหลดไว้จะประกอบด้วยสคริปต์ create_table.py ที่สร้างตาราง หนังสือ โดยใช้ API CreateTable คุณสามารถเรียกใช้สคริปต์นี้ได้โดยการป้อนคำสั่งต่อไปนี้ในเทอร์มินัล AWS Cloud9

    $ python create_table.py

    หากคุณเปิดสคริปต์ create_table.py ด้วย AWS Cloud9 editor คุณควรสังเกต:

    • สคริปต์จะระบุคีย์หลักแบบรวมในตารางของคุณที่มีอาร์กิวเมนต์ KeySchema ในการเรียกใช้ API 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" } })
    

    ดังที่แสดงในสคริปต์ก่อนหน้านี้ คุณได้ใช้ API BatchWriteItem เพื่อโหลดหนังสือ 5 เล่มลงในตาราง หนังสือแต่ละเล่มจะประกอบด้วยคุณลักษณะ ผู้แต่ง และ ชื่อเรื่อง สำหรับคีย์หลัก และคุณลักษณะ หมวดหมู่ และ รูปแบบ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหนังสือ แต่ละคุณลักษณะจะมีประเภท ซึ่งอาจเป็นประเภททั่วไป เช่น สตริง สำหรับคุณลักษณะ หมวดหมู่ หรือประเภทที่ซับซ้อน เช่น แผนที่ สำหรับคุณลักษณะ รูปแบบ

    โปรดทราบว่าคุณได้แทรกข้อมูลผ่าน API HTTP โดยใช้ไคลเอนต์ไลบรารี Boto 3 การเข้าถึงข้อมูลและคำขอจัดการทั้งหมดจะเสร็จสมบูรณ์ผ่านคำขอ HTTP แทนการรักษาการเชื่อมต่อกับฐานข้อมูลแบบต่อเนื่อง เนื่องจากเป็นการดำเนินการที่ใช้บ่อยสำหรับระบบการจัดการฐานข้อมูลเชิงสัมพันธ์

  • ขั้นตอนที่ 3 เรียกรายการจากตาราง

    คุณสามารถเรียกหนังสือหนึ่งเล่มโดยใช้คำขอ API GetItem และระบุคีย์หลักของรายการที่คุณต้องการ

    ในเทอร์มินัล AWS Cloud9 ให้เรียกใช้คำสั่งต่อไปนี้

    $ python get_item.py

    วิธีนี้จะเรียกใช้สคริปต์ต่อไปนี้ในการเรียกรายการเดี่ยว ซึ่งเป็นหนังสือชื่อ The RainMaker โดย John Grisham

    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'}

    เนื่องจากรายการแต่ละรายการในตารางมีการระบุโดยใช้คีย์หลักโดยเฉพาะ การเรียกใช้ API GetItem จะส่งคืนอย่างมากที่สุดหนึ่งรายการจากตารางของคุณเสมอ


    ในโมดูลถัดไป คุณจะได้เรียนรู้วิธีการเรียกรายการหลายรายการจากตาราง DynamoDB ด้วยการเรียกใช้ API เพียงครั้งเดียว นอกจากนี้ คุณจะได้เรียนรู้วิธีการเปิดใช้งานการเข้าถึงข้อมูลหลายรูปแบบในตาราง โดยใช้ดัชนีรอง