ควรใช้หลายตารางใน DynamoDB เมื่อใด


11

แนวทางปฏิบัติที่ดีที่สุดของ DyanmoDB ทำให้ชัดเจนว่า:

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

ฉันพบว่ามันน่าขบขันที่ทุกบทช่วยสอนที่ฉันเห็นเกี่ยวกับ DyanmoDB นั้นมีการออกแบบหลายตาราง

แต่สิ่งนี้หมายความว่าในทางปฏิบัติ?

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

การออกแบบตารางการสอนที่ไร้เดียงสาจะใช้สามตาราง:

Users
Hash key
user-id

Projects
Hash key       Global Index
project-id     user-id

Documents
Hash key       Global Index
document-id    project-id

เราสามารถยุบได้ง่ายProjectและDocumentอยู่ในDocumentsตารางเดียว:

Documents
Hash key    Sort key        Global Index
project-id  document-id     user-id

แต่ทำไมหยุดอยู่ตรงนั้นล่ะ? ทำไมไม่โต๊ะเดียวที่จะปกครองพวกเขาทั้งหมด? เนื่องจากUserเป็นรากของทุกสิ่ง ...

Users
Hash key    Sort key
user-id     aspect
---------   ---------
foo         user                   email: foo@bar.com ...
foo         project:1              title: "The Foo Project"
foo         project:1:document:2   document-id: 2     ...

จากนั้นเราก็จะมีดัชนีทั่วโลกในการพูด, emailเขตข้อมูลสำหรับการค้นหาบันทึกผู้ใช้และอื่น ๆ ในdocument-idเขตข้อมูลสำหรับการค้นหาเอกสารโดยตรง

นั่นเป็นวิธีการทำงานหรือไม่? การโยนข้อมูลประเภทที่แตกต่างกันอย่างรุนแรงนี้ลงในตารางเดียวกันหรือไม่ หรือการออกแบบสองตารางสองเป็นวิธีที่ดีกว่า

การเพิ่มตารางที่สองจะถูกต้อง ณ จุดใด

คำตอบ:


7

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

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

ตัวอย่างเช่นถ้า 80% ของการอ่านทั้งหมดเพื่อค้นหาผู้ใช้ในโครงการและต้องเกิดขึ้น 30,000 / วินาที แต่ในแอปพลิเคชันของคุณไม่ใช่คนจำนวนมากที่จะไปที่ขั้นตอนต่อไปและค้นหาเอกสารสำหรับโครงการ คือ 20% ของการอ่านโดยรวมและสามารถอ่านได้ 2000 ครั้ง / วินาที สิ่งแรกคือ "เส้นทางลัด" ของแอปพลิเคชันของคุณและควรปรับให้เหมาะสม

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


ในการพูดคุยอย่างหลีกเลี่ยงไม่ได้วิศวกรอาวุโสกล่าวอย่างคร่าวๆต่อไปนี้ - ในอดีตการเก็บรักษาค่อนข้างแพงกว่าการคำนวณ ดังนั้นเราจึงปรับให้เหมาะสำหรับการจัดเก็บ (Relational DB) แต่ตอนนี้ที่เก็บข้อมูลราคาถูกสกปรก! การคำนวณค่อนข้างแพงกว่า ดังนั้นเราจึงปรับให้เหมาะสมสำหรับการคำนวณ (NoSQL เหมาะสำหรับการอ่าน)
Gaz_Edge

ฉันเห็นด้วยอย่างยิ่ง NoSql อนุญาตให้ฉันจัดการข้อมูลของฉันตามข้อกำหนดการสมัครของฉัน มันเกี่ยวกับอัตราส่วนระหว่างข้อมูลที่อ่านและเปลี่ยนแปลง
Anurag pareek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.