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

ฐานข้อมูล NoSQL (ไม่เชิงสัมพันธ์) ถูกออกแบบมาเพื่อความเร็วและขนาด ไม่ใช่ความยืดหยุ่น แม้ว่าประสิทธิภาพการทำงานของฐานข้อมูลเชิงสัมพันธ์จะลดลงเมื่อคุณปรับขนาดเพิ่มขึ้น การขยายฐานข้อมูลในแนวขวางเช่น DynamoDB จะให้ประสิทธิภาพการทำงานที่สม่ำเสมอกันในทุกขนาด ผู้ใช้ DynamoDB บางรายมีตารางซึ่งมีขนาดใหญ่กว่า 100 TB และยังคงมีประสิทธิภาพในการอ่านและเขียนเป็นเช่นเดียวกับเมื่อมีตารางขนาดเล็กกว่า 1 GB

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

1. ให้ความสำคัญกับรูปแบบการเข้าถึง

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

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

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

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

2. ปรับจำนวนคำขอไปยัง DynamoDB ให้เหมาะสม

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

เพื่อปรับจำนวนคำขอไปยัง DynamoDB ให้เหมาะสม คุณต้องเข้าใจแนวคิดหลักบางประการ

3. อย่าปลอมโมเดลเชิงสัมพันธ์

ผู้ใช้ DynamoDB ใหม่มักจะนำโมเดลเชิงสัมพันธ์ไปใช้บน DynamoDB ที่ไม่ใช่เชิงสัมพันธ์ หากทำเช่นนั้น คุณจะไม่ได้ประโยชน์ส่วนใหญ่ของ DynamoDB

การใช้รูปแบบที่ไม่ถูกต้องที่พบบ่อยที่สุดซึ่งผู้ใช้ทำกับ DynamoDB ได้แก่:

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

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

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


  • ขั้นตอนที่ 1: สร้างแผนผังความสัมพันธ์ของเอนทิตี

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

    ในแอปพลิเคชัน เรามีเอนทิตีต่อไปนี้:

    • ผู้ใช้
    • รูปภาพ
    • การตอบสนอง
    • มิตรภาพ

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

    ด้วยเอนทิตีและความสัมพันธ์เหล่านี้ แผนผังความสัมพันธ์ของเอนทิตีจะแสดงอยู่ด้านล่าง

    Module_2_Step_1

    (คลิกเพื่อขยาย)

    Module_2_Step_1
  • ขั้นตอนที่ 2: พิจารณาถึงรูปแบบการเข้าถึงโปรไฟล์ผู้ใช้

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

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

    ผู้ใช้จะสามารถเรียกดูโปรไฟล์ของผู้ใช้รายอื่นๆ ได้ ผู้ใช้อาจต้องการเรียกดูโปรไฟล์ของผู้ใช้รายอื่นๆ เพื่อดูสิ่งที่ผู้ใช้รายนั้นให้ความสนใจเพื่อติดตาม หรือเพื่ออ่านภูมิหลังบางส่วนของเพื่อนที่มีอยู่

    เมื่อเวลาผ่านไป ผู้ใช้อาจต้องการที่จะอัปเดตโปรไฟล์ของตนเพื่อแสดงสถานะใหม่ๆ หรืออัปเดตสิ่งที่สนใจซึ่งมีการเปลี่ยนแปลง

    เมื่ออิงตามข้อมูลนี้ เรามีรูปแบบการเข้าถึง 3 แบบ:

    • สร้างโปรไฟล์ผู้ใช้ (เขียน)
    • อัปเดตโปรไฟล์ผู้ใช้ (เขียน)
    • ดูโปรไฟล์ผู้ใช้ (อ่าน)
       
  • ขั้นตอนที่ 3: พิจารณารูปแบบการเข้าถึงก่อนเริ่มเกม

    ตอนนี้ มาดูรูปแบบการเข้าถึงรูปภาพ

    แอปพลิเคชันมือถือของเราจะอนุญาตให้ผู้ใช้สามารถอัปเดตและแชร์รูปภาพกับเพื่อนๆ ของตนได้ คล้ายคลึงกับ Instagram หรือ Snapchat เมื่อผู้ใช้อัปโหลดรูปภาพ คุณจำเป็นต้องจัดเก็บข้อมูล เช่น เวลาที่รูปภาพถูกอัปโหลดและตำแหน่งที่ตั้งของไฟล์บนเครือข่ายการจัดส่งเนื้อหา (CDN)

    เมื่อผู้ใช้ไม่ได้อัปโหลดรูปภาพ ผู้ใช้อาจต้องการเรียกดูรูปภาพของเพื่อนๆ ของตน หากผู้ใช้เข้าเยี่ยมชมโปรไฟล์ของเพื่อน ผู้ใช้ควรจะเห็นรูปภาพของผู้ใช้โดยที่จะมีรูปภาพล่าสุดแสดงขึ้นมาเป็นลำดับแรก หากผู้ใช้ชื่นชอบรูปภาพ พวกเขาสามารถ ‘ตอบสนอง’ กับรูปภาพนั้นโดยใช้การโต้ตอบที่กำหนดไว้ล่วงหน้าได้หนึ่งจากสี่รูปแบบได้แก่ หัวใจ อมยิ้ม ชูนิ้วโป้ง หรือแว่นดำ การดูรูปภาพควรแสดงการตอบสนองปัจจุบันของรูปภาพนั้น

    ในส่วนนี้ เราจะมีรูปแบบการเข้าถึงต่อไปนี้:

    • อัปโหลดรูปภาพของผู้ใช้ (เขียน)
    • ดูรูปภาพล่าสุดของผู้ใช้ (อ่าน)
    • ตอบสนองต่อรูปภาพ (เขียน)
    • ดูรูปภาพและการตอบสนอง (อ่าน)
       
  • ขั้นตอนที่ 4: รูปแบบการเข้าถึงในเกมและหลังจบเกม

    สุดท้าย มาพิจารณารูปแบบการเข้าถึงที่เกี่ยวกับมิตรภาพ

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

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

    เมื่ออิงตามข้อมูลนี้ เรามีรูปแบบการเข้าถึงต่อไปนี้:

    • ติดตามผู้ใช้ (เขียน)
    • ดูผู้ติดตามของผู้ใช้ (อาน)
    • ดูผู้ที่ผู้ใช้ติดตาม (อ่าน)

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

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