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

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

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


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

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

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

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

    สุดท้าย Game ประกอบด้วย User หลายราย และ User สามารถเล่น Game ที่แตกต่างกันได้หลายเกมตลอดเวลา ดังนั้นจึงมีความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่าง User และ Game เราสามารถแทนความสัมพันธ์นี้ได้ด้วยเอนทิตี UserGameMapping

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

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

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

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

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

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

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

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

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

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

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

    สุดท้าย ให้พิจารณาถึงรูปแบบการเข้าถึงในระหว่างเล่นเกมและหลังจบเกม

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

    จากนั้น ผู้เล่นอาจต้องการดูเกมที่เคยเล่นไปแล้วหรือเกมที่ผู้อื่นเคยเล่น

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

    • อัปเดตเกมสำหรับผู้ใช้ (เขียน)
    • อัปเดตเกม (เขียน)
    • ค้นหาเกมที่เคยเล่นสำหรับผู้ใช้ (อ่าน)

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

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