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

ความสัมพันธ์แบบหนึ่งต่อหนึ่งหมายถึงสองตารางมีการติดต่อกันแบบหนึ่งต่อหนึ่ง ตัวอย่างเช่น นักเรียนสามารถลงทะเบียนได้เพียงหลักสูตรเดียว และฉันต้องการค้นหานักเรียนว่ามีนักเรียนคนใดลงทะเบียนในหลักสูตรใด

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

ความสัมพันธ์แบบหนึ่งต่อหนึ่งใน Cassandra
ความสัมพันธ์แบบหนึ่งต่อหนึ่งใน Cassandra

Create table Student_Course
    (
        Student rollno int primary key,
        Student_name text,
        Course_name text,
    );

การจัดการความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์ใน Cassandra

ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์หมายถึงการมีความสอดคล้องกันแบบหนึ่งต่อหลายรายการระหว่างสองตาราง

ตัวอย่างเช่น นักเรียนจำนวนมากสามารถเรียนหลักสูตรหนึ่งได้ ฉันต้องการค้นหานักเรียนทุกคนที่กำลังเรียนหลักสูตรใดหลักสูตรหนึ่ง

ดังนั้นการสอบถามชื่อรายวิชาจะทำให้มีชื่อนักศึกษาที่จะเรียนรายวิชาใดวิชาหนึ่งเป็นจำนวนมาก

ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์ใน Cassandra
ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์ใน Cassandra

Create table Student_Course
    (
        Student_rollno int,
        Student_name text,
        Course_name text,
    );

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

Select * from Student_Course where Course_name='Course Name';

การจัดการความสัมพันธ์แบบหลายต่อมากใน Cassandra

ความสัมพันธ์แบบหลายต่อมากหมายถึงการมีความสัมพันธ์กันหลายต่อมากระหว่างสองตาราง

ตัวอย่างเช่น นักเรียนหลายคนสามารถเรียนหลักสูตรหนึ่งได้ และนักเรียนหนึ่งคนก็สามารถเรียนหลายหลักสูตรได้เช่นกัน

หลายต่อหลายความสัมพันธ์ใน Cassandra
หลายต่อหลายความสัมพันธ์ใน 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 การสร้างแบบจำลองข้อมูลมีกฎบางอย่าง ต้องปฏิบัติตามกฎเหล่านี้เพื่อการสร้างแบบจำลองข้อมูลที่ดี นอกจากกฎเหล่านี้แล้ว เรายังเห็นกรณีการสร้างแบบจำลองข้อมูลที่แตกต่างกันสามกรณีและวิธีจัดการกับกรณีเหล่านั้น
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่งหมายถึงสองตารางมีการติดต่อกันแบบหนึ่งต่อหนึ่ง
  • ความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์หมายถึงการมีความสอดคล้องกันแบบหนึ่งต่อหลายรายการระหว่างสองตาราง
  • ความสัมพันธ์แบบหลายต่อมากหมายถึงการมีความสัมพันธ์กันหลายต่อมากระหว่างสองตาราง