Cassandra ตัวอย่างการสร้าง แก้ไข และตัดข้อมูลในตาราง CQL

⚡ สรุปอย่างชาญฉลาด

Cassandra การดำเนินการกับตารางครอบคลุมถึงการสร้าง การแก้ไข และการลบpingและการตัดทอนกลุ่มคอลัมน์ด้วย CQL หน้านี้อธิบายคำสั่งแต่ละคำสั่ง รูปแบบคีย์หลักสามแบบที่กำหนดการกระจายข้อมูล และความแตกต่างระหว่างการลบแถวและการลบตาราง

  • 🏗️ สร้างตาราง: ตารางข้อมูลจำเป็นต้องมีคีย์สเปซ คำจำกัดความของคอลัมน์ และข้อกำหนดคีย์หลักที่กำหนดการกระจายและลำดับการจัดเรียง
  • 🔑 คีย์หลักเดี่ยว: คอลัมน์หนึ่งทำหน้าที่เป็นคีย์แบ่งพาร์ติชัน ดังนั้นทุกแถวที่มีค่าเดียวกันจะไปอยู่ในโหนดเดียวกัน
  • 🧩 คีย์หลักแบบผสม: คอลัมน์แรกจะแบ่งพาร์ติชัน ส่วนคอลัมน์ที่เหลือจะจัดกลุ่มและเรียงลำดับแถวภายในพาร์ติชันนั้น
  • 🧮 รหัสพาร์ติชั่นแบบผสม: การจัดวางเสาคู่ขนานจะแบ่งพาร์ทิชันขนาดใหญ่ให้เป็นพาร์ทิชันขนาดเล็กจำนวนมาก
  • ✏️ เปลี่ยนแปลงขีดจำกัด: สามารถเพิ่มหรือลบคอลัมน์ได้ แต่คอลัมน์คีย์หลักไม่สามารถเปลี่ยนแปลงได้
  • 🗑️ การตัดทิ้ง (Drop) กับการตัดทอน (Truncate): คำสั่ง Drop จะลบโครงสร้างและข้อมูลทั้งหมด ส่วนคำสั่ง truncate จะล้างทุกแถวแต่ยังคงโครงสร้างของตารางไว้

Cassandra สร้างตาราง แก้ไข ลบ

ไวยากรณ์ของ Cassandra ภาษาสอบถาม (CQL) มีลักษณะคล้ายกับ SQL ภาษา.

วิธีสร้างตารางใน Cassandra

ตระกูลคอลัมน์ใน Cassandra คล้ายกับตาราง RDBMS ตระกูลคอลัมน์ใช้เพื่อจัดเก็บข้อมูล

คำสั่ง 'สร้างตาราง' ใช้เพื่อสร้างตระกูลคอลัมน์ Cassandra.

วากยสัมพันธ์

CREATE TABLE KeyspaceName.TableName (
    ColumnName DataType,
    ColumnName DataType,
    ColumnName DataType,
    PRIMARY KEY (ColumnName)
) WITH PropertyName = PropertyValue;

1. คีย์หลัก: มีสองประเภทเป็น คีย์หลัก.

  • คีย์หลักเดี่ยว: ระบุคีย์หลักตัวเดียวตามรูปแบบต่อไปนี้

วากยสัมพันธ์

PRIMARY KEY (ColumnName)

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

2. คีย์หลักแบบผสม: คีย์หลักแบบผสมจะถูกระบุตามรูปแบบต่อไปนี้

วากยสัมพันธ์

PRIMARY KEY (ColumnName1, ColumnName2, ...)

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

3. คีย์การแบ่งพาร์ติชันแบบผสม: คีย์การแบ่งพาร์ติชั่นแบบผสมถูกระบุโดยรูปแบบไวยากรณ์ดังต่อไปนี้

วากยสัมพันธ์

PRIMARY KEY ((ColumnName1, ColumnName2), ColumnName3)

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

  • ด้วยข้อ

“With clause” ใช้เพื่อระบุคุณสมบัติและค่าของคุณสมบัติสำหรับตารางที่กำหนด เช่น หากคุณต้องการบีบอัด Cassandra ข้อมูลในตาราง คุณสามารถตั้งค่าคุณสมบัติการบีบอัดได้โดยระบุค่าคุณสมบัติอัลกอริธึมการบีบอัดใน "ส่วนคำสั่ง With" ส่วนคำสั่งเดียวกันนี้ยังตั้งค่า CLUSTERING ORDER BY เพื่อกลับทิศทางการเรียงลำดับของคอลัมน์คลัสเตอร์ และตั้งค่า default_time_to_live เพื่อลบข้อมูลทุกแถวโดยอัตโนมัติ

ตัวอย่าง

นี่คือการดำเนินการของคำสั่ง 'สร้างตาราง' ที่จะสร้างชื่อตาราง 'นักเรียน' ในคีย์สเปซ 'มหาวิทยาลัย'

Cassandra สร้างตาราง

CREATE TABLE University.Student (
    RollNo int,
    Name text,
    dept text,
    PRIMARY KEY (RollNo)
);

หลังจากดำเนินการคำสั่ง 'Create table' สำเร็จแล้ว ตาราง 'Student' จะถูกสร้างขึ้นในคีย์สเปซ 'University' โดยมีคอลัมน์ RollNo, Name และ dept. RollNo เป็นคีย์หลัก และยังเป็นคีย์แบ่งพาร์ติชันด้วย ดังนั้นนักเรียนแต่ละคนจะอยู่ในพาร์ติชันแยกกัน โดยแต่ละพาร์ติชันจะมีเพียงแถวเดียว

Cassandra เปลี่ยนตาราง

คำสั่ง 'Alter Table' ใช้ในการวางคอลัมน์ เพิ่มคอลัมน์ใหม่ เปลี่ยนชื่อคอลัมน์ แก้ไขประเภทคอลัมน์ และเปลี่ยนคุณสมบัติของตาราง

วากยสัมพันธ์

ต่อไปนี้คือรูปแบบคำสั่ง 'Alter Table'

ALTER TABLE KeyspaceName.TableName
    ADD ColumnName ColumnDataType;

ALTER TABLE KeyspaceName.TableName
    DROP ColumnName;

ALTER TABLE KeyspaceName.TableName
    RENAME ColumnName TO NewColumnName;

ALTER TABLE KeyspaceName.TableName
    WITH PropertyName = PropertyValue;

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

ตัวอย่าง

นี่คือภาพรวมของคำสั่ง 'Alter Table' ที่จะเพิ่มคอลัมน์ใหม่ในตาราง Student

Cassandra เปลี่ยนตาราง

ALTER TABLE University.Student ADD Semester int;

หลังจากดำเนินการคำสั่ง 'Alter Table' สำเร็จแล้ว คอลัมน์ใหม่ 'ภาคการศึกษา' ที่มีประเภทข้อมูล 'int' จะถูกเพิ่มลงในตาราง Student

นี่คือภาพหน้าจอที่แสดงตารางนักเรียนที่อัปเดต

Cassandra เปลี่ยนตาราง

Cassandra วางตาราง

คำสั่ง 'Drop table' จะลบตารางที่ระบุ รวมทั้งข้อมูลทั้งหมดจากคีย์สเปซ ก่อนทำการลบ ให้ตรวจสอบเงื่อนไขต่อไปนี้ping โต๊ะ Cassandra ถ่ายภาพสแน็ปช็อตของข้อมูลไม่ใช่สคีมาเป็นข้อมูลสำรอง

วากยสัมพันธ์

DROP TABLE IF EXISTS KeyspaceName.TableName;

ตัวอย่าง

นี่คือภาพรวมของคำสั่งที่ดำเนินการ 'Drop Table' ซึ่งจะปล่อยตาราง Student จากคีย์สเปซ 'University'

Cassandra วางตาราง

DROP TABLE University.Student;

หลังจากดำเนินการคำสั่ง 'Drop Table' สำเร็จแล้ว table Student จะถูกดร็อปจาก keyspace University

นี่คือภาพรวมที่แสดงข้อผิดพลาดที่ส่งคืนโดย Cassandra เมื่อพยายามเข้าถึงตารางนักเรียนที่ไม่มีอยู่

Cassandra วางตาราง

Cassandra ตัดตาราง

คำสั่ง 'Truncate table' จะลบข้อมูลทั้งหมดออกจากตารางที่ระบุ ก่อนที่จะตัดทอนข้อมูล Cassandra ถ่ายภาพสแน็ปช็อตของข้อมูลเป็นข้อมูลสำรอง

วากยสัมพันธ์

TRUNCATE KeyspaceName.TableName;

ตัวอย่าง

มีสามระเบียนในตารางนักเรียน นี่คือบันทึกในตาราง

Cassandra ตัดตาราง

นี่คือภาพรวมของคำสั่งที่ดำเนินการ 'Truncate table' ซึ่งจะลบข้อมูลทั้งหมดออกจากตาราง Student

Cassandra ตัดตาราง

หลังจากดำเนินการคำสั่ง 'Truncate Table' สำเร็จแล้ว ข้อมูลทั้งหมดจะถูกลบออกจากตาราง Student

นี่คือภาพรวมของสถานะฐานข้อมูลที่ไม่มีบันทึกในตาราง Student

Cassandra ตัดตาราง

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

Drop vs Truncate vs Delete ใน Cassandra

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

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

หลักการปฏิบัติคือควรเลือกใช้ TRUNCATE แทนการลบข้อมูลจำนวนมาก (bulk DELETE) เมื่อต้องการล้างตารางทั้งหมด เพราะการลบข้อมูลจำนวนหลายพันรายการจะทำให้การอ่านข้อมูลในพาร์ติชันนั้นช้าลง การลบข้อมูลระดับแถวจะกล่าวถึงในหัวข้อถัดไป การแทรก การอัปเดต และการลบ CQL เกี่ยวกับการสอน

คำถามที่พบบ่อย

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

เพิ่ม WITH CLUSTERING ORDER BY (ColumnName DESC) ในขั้นตอนการสร้าง การตั้งค่าในสคีมานั้นประหยัดกว่าการเรียงลำดับในระหว่างการอ่านข้อมูลแต่ละครั้งมาก

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

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

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

สรุปโพสต์นี้ด้วย: