Cassandra โมเดลข้อมูลพร้อมตัวอย่างฐานข้อมูลอย่างง่าย
แม้ว่า Cassandra ภาษาแบบสอบถามคล้ายกับ SQL ภาษา วิธีการสร้างแบบจำลองข้อมูลแตกต่างกันโดยสิ้นเชิง
In Cassandraโมเดลข้อมูลที่ไม่ดีสามารถลดประสิทธิภาพได้ โดยเฉพาะเมื่อผู้ใช้พยายามนำแนวคิด RDBMS ไปใช้ Cassandra- ทางที่ดีควรคำนึงถึงกฎสองสามข้อที่มีรายละเอียดด้านล่าง
Cassandra กฎของโมเดลข้อมูล
In Cassandra, เขียนไม่แพง Cassandra ไม่สนับสนุนการรวม จัดกลุ่มตาม หรือส่วนคำสั่ง การรวม ฯลฯ ดังนั้นคุณต้องจัดเก็บข้อมูลของคุณในลักษณะที่สามารถเรียกคืนได้อย่างสมบูรณ์ ดังนั้นจึงต้องคำนึงถึงกฎเหล่านี้ในขณะที่สร้างแบบจำลองข้อมูล Cassandra.
เพิ่มจำนวนการเขียนสูงสุด
In Cassandra,เขียนถูกมาก Cassandra ได้รับการปรับให้เหมาะสมเพื่อประสิทธิภาพการเขียนที่สูง ดังนั้นพยายามเพิ่มการเขียนของคุณให้สูงสุดเพื่อประสิทธิภาพการอ่านและความพร้อมใช้งานของข้อมูลที่ดีขึ้น มีข้อแลกเปลี่ยนระหว่างการเขียนข้อมูลและการอ่านข้อมูล ดังนั้น เพิ่มประสิทธิภาพการอ่านข้อมูลของคุณโดยการเพิ่มจำนวนการเขียนข้อมูลให้สูงสุด
เพิ่มการทำสำเนาข้อมูลให้สูงสุด
ความผิดปกติของข้อมูลและการทำซ้ำข้อมูลเป็นสิ่งที่ผิดปกติ Cassandraพื้นที่ดิสก์ไม่แพงกว่าหน่วยความจำ การประมวลผล CPU และการทำงานของ IO Cassandra เป็นฐานข้อมูลแบบกระจาย ดังนั้นการทำสำเนาข้อมูลจึงมีความพร้อมใช้งานของข้อมูลได้ทันทีและไม่มีความล้มเหลวจุดเดียว
Cassandra เป้าหมายการสร้างแบบจำลองข้อมูล
คุณควรมีเป้าหมายต่อไปนี้ขณะสร้างแบบจำลองข้อมูลใน Cassandra:
กระจายข้อมูลอย่างเท่าเทียมกันรอบ ๆ Cluster
คุณต้องการข้อมูลจำนวนเท่ากันในแต่ละโหนดของ Cassandra Clusterข้อมูลจะถูกกระจายไปยังโหนดต่างๆ ตามคีย์พาร์ติชั่นซึ่งเป็นส่วนแรกของคีย์หลัก ดังนั้น พยายามเลือกจำนวนเต็มเป็นคีย์หลักเพื่อกระจายข้อมูลอย่างเท่าเทียมกันทั่วทั้งคลัสเตอร์
ลดจำนวนพาร์ติชันที่อ่านขณะสืบค้นข้อมูล
พาร์ติชั่นคือกลุ่มของเรคคอร์ดที่มีคีย์พาร์ติชั่นเดียวกัน เมื่อมีการออกแบบสอบถามการอ่าน จะรวบรวมข้อมูลจากโหนดที่แตกต่างกันจากพาร์ติชันที่แตกต่างกัน
หากมีพาร์ติชันจำนวนมาก จำเป็นต้องไปที่พาร์ติชันเหล่านี้ทั้งหมดเพื่อรวบรวมข้อมูลการสืบค้น
ไม่ได้หมายความว่าไม่ควรสร้างพาร์ติชัน หากข้อมูลของคุณมีขนาดใหญ่มาก คุณจะไม่สามารถเก็บข้อมูลจำนวนมากขนาดนั้นไว้ในพาร์ติชั่นเดียวได้ พาร์ติชันเดียวจะช้าลง
ดังนั้นลองเลือกจำนวนพาร์ติชั่นที่สมดุล
คีย์หลักที่ดีเข้า Cassandra
ลองมาตัวอย่างและดูว่าคีย์หลักใดดี
นี่คือตาราง MusicPlaylist
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key(SongId, SongName) );
ในตัวอย่างข้างต้น ตาราง MusicPlaylist
- Songid คือคีย์พาร์ติชันและ
- SongName คือคอลัมน์การจัดคลัสเตอร์
- ข้อมูลจะถูกจัดกลุ่มตาม SongName โดยจะสร้างพาร์ติชันที่มี SongId เพียงพาร์ติชันเดียวเท่านั้น จะไม่มีพาร์ติชันอื่นในตาราง MusicPlaylist
การดึงข้อมูลจะช้าโดยโมเดลข้อมูลนี้เนื่องจากคีย์หลักไม่ถูกต้อง
นี่คือตาราง MusicPlaylist อีกตารางหนึ่ง
Create table MusicPlaylist ( SongId int, SongName text, Year int, Singer text, Primary key((SongId, Year), SongName) );
ในตัวอย่างข้างต้น ตาราง MusicPlaylist
- Songid และ Year เป็นพาร์ติชั่นคีย์ และ
- SongName เป็นคอลัมน์การจัดคลัสเตอร์
- ข้อมูลจะถูกจัดกลุ่มตาม SongName ในตารางนี้ จะมีการสร้างพาร์ติชันใหม่ในแต่ละปี เพลงทั้งหมดของปีจะอยู่ในโหนดเดียวกัน คีย์หลักนี้จะมีประโยชน์มากสำหรับข้อมูล
การดึงข้อมูลของเราจะรวดเร็วด้วยโมเดลข้อมูลนี้
สร้างโมเดลข้อมูลของคุณใน Cassandra
สิ่งต่อไปนี้ควรคำนึงถึงขณะสร้างแบบจำลองแบบสอบถามของคุณ:
กำหนดคำถามที่คุณต้องการสนับสนุน
ขั้นแรก พิจารณาว่าคุณต้องการข้อความค้นหาใด
เช่น คุณต้องการไหม?
- ร่วม
- จัดกลุ่มตาม
- การกรองคอลัมน์ใด ฯลฯ
สร้างตารางตามคำสั่งของคุณ
สร้างตารางตามคำสั่งของคุณ สร้างตารางที่จะตอบสนองข้อสงสัยของคุณ พยายามสร้างตารางในลักษณะที่ต้องอ่านพาร์ติชันจำนวนขั้นต่ำ
การจัดการความสัมพันธ์แบบหนึ่งต่อหนึ่ง Cassandra
ความสัมพันธ์แบบหนึ่งต่อหนึ่งหมายถึงสองตารางมีการติดต่อกันแบบหนึ่งต่อหนึ่ง ตัวอย่างเช่น นักเรียนสามารถลงทะเบียนได้เพียงหลักสูตรเดียว และฉันต้องการค้นหานักเรียนว่ามีนักเรียนคนใดลงทะเบียนในหลักสูตรใด
ดังนั้นในกรณีนี้ โครงร่างตารางของคุณควรครอบคลุมรายละเอียดทั้งหมดของนักเรียนที่สอดคล้องกับหลักสูตรนั้นๆ เช่น ชื่อหลักสูตร หมายเลขประจำตัวนักเรียน ชื่อนักเรียน เป็นต้น
Create table Student_Course ( Student rollno int primary key, Student_name text, Course_name text, );
การจัดการความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์ใน Cassandra
ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์หมายถึงการมีความสอดคล้องกันแบบหนึ่งต่อหลายรายการระหว่างสองตาราง
ตัวอย่างเช่น นักเรียนจำนวนมากสามารถเรียนหลักสูตรหนึ่งได้ ฉันต้องการค้นหานักเรียนทุกคนที่กำลังเรียนหลักสูตรใดหลักสูตรหนึ่ง
ดังนั้นการสอบถามชื่อรายวิชาจะทำให้มีชื่อนักศึกษาที่จะเรียนรายวิชาใดวิชาหนึ่งเป็นจำนวนมาก
Create table Student_Course ( Student_rollno int, Student_name text, Course_name text, );
ฉันสามารถเรียกข้อมูลนักเรียนทั้งหมดสำหรับหลักสูตรหนึ่งๆ ได้โดยใช้แบบสอบถามต่อไปนี้
Select * from Student_Course where Course_name='Course Name';
การจัดการความสัมพันธ์แบบหลายต่อมากใน Cassandra
ความสัมพันธ์แบบหลายต่อมากหมายถึงการมีความสัมพันธ์กันหลายต่อมากระหว่างสองตาราง
ตัวอย่างเช่น นักเรียนหลายคนสามารถเรียนหลักสูตรหนึ่งได้ และนักเรียนหนึ่งคนก็สามารถเรียนหลายหลักสูตรได้เช่นกัน
ฉันต้องการค้นหานักเรียนทุกคนที่กำลังเรียนหลักสูตรใดหลักสูตรหนึ่ง นอกจากนี้ ฉันต้องการค้นหาหลักสูตรทั้งหมดที่นักเรียนคนใดคนหนึ่งกำลังศึกษาอยู่
ดังนั้นในกรณีนี้ ผมจะมีสองตาราง คือ แบ่งปัญหาออกเป็นสองกรณี
ขั้นแรก ฉันจะสร้างตารางที่คุณสามารถค้นหาหลักสูตรของนักเรียนคนใดคนหนึ่งได้
Create table Student_Course ( Student_rollno int primary key, Student_name text, Course_name text, );
ฉันสามารถค้นหาหลักสูตรทั้งหมดโดยนักศึกษาคนหนึ่งได้โดยใช้แบบสอบถามต่อไปนี้
Select * from Student_Course where student_rollno=rollno;
ประการที่สอง ฉันจะสร้างตารางที่คุณสามารถดูจำนวนนักเรียนที่กำลังศึกษาหลักสูตรหนึ่งๆ ได้
Create table Course_Student ( Course_name text primary key, Student_name text, student_rollno int );
ฉันสามารถค้นหาผู้เรียนในหลักสูตรหนึ่งๆ ได้โดยการใช้คำสั่งดังต่อไปนี้
Select * from Course_Student where Course_name=CourseName;
ความแตกต่างระหว่าง RDBMS และ Cassandra การสร้างแบบจำลองข้อมูล
อาร์ดีบีเอ็มเอส | Cassandra |
---|---|
เก็บข้อมูลในรูปแบบมาตรฐาน | จัดเก็บข้อมูลในรูปแบบดีนอร์มอลไลซ์ |
dbms ดั้งเดิม; ข้อมูลที่มีโครงสร้าง | ร้านค้าแถวกว้าง ไดนามิก; ข้อมูลที่มีโครงสร้างและไม่มีโครงสร้าง |
สรุป
- การสร้างแบบจำลองข้อมูลใน Cassandra แตกต่างจากที่อื่น ฐานข้อมูล RDBMS.
- Cassandra การสร้างแบบจำลองข้อมูลมีกฎบางอย่าง ต้องปฏิบัติตามกฎเหล่านี้เพื่อการสร้างแบบจำลองข้อมูลที่ดี นอกจากกฎเหล่านี้แล้ว เรายังเห็นกรณีการสร้างแบบจำลองข้อมูลที่แตกต่างกันสามกรณีและวิธีจัดการกับกรณีเหล่านั้น
- ความสัมพันธ์แบบหนึ่งต่อหนึ่งหมายถึงสองตารางมีการติดต่อกันแบบหนึ่งต่อหนึ่ง
- ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์หมายถึงการมีความสอดคล้องกันแบบหนึ่งต่อหลายรายการระหว่างสองตาราง
- ความสัมพันธ์แบบหลายต่อมากหมายถึงการมีความสัมพันธ์กันหลายต่อมากระหว่างสองตาราง