Cassandra คอลเลกชัน: ตั้งค่า รายการ และแมปใน CQL พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
Cassandra คอลเลกชันจะจัดเก็บค่าหลายค่าไว้ในคอลัมน์เดียวโดยใช้ประเภทข้อมูล set, list และ map หน้านี้อธิบายแต่ละประเภท ไวยากรณ์ CQL สำหรับการสร้างและเติมข้อมูล วิธีการอัปเดตองค์ประกอบ และข้อจำกัดด้านขนาดที่กำหนดว่าเมื่อใดที่การใช้คอลเลกชันไม่เหมาะสม

สิ่งที่เป็น Cassandra คอลเลกชัน?
Cassandra คอลเลกชันเป็นวิธีที่ดีสำหรับการจัดการงาน สามารถจัดเก็บองค์ประกอบหลายรายการไว้ในคอลเลกชันได้ มีข้อจำกัดอยู่ใน Cassandra คอลเลกชัน
- คอลัมน์ประเภทคอลเลกชันไม่สามารถจัดเก็บข้อมูลได้เกิน 64 KB ในค่าเดียว
- ควรจำกัดขนาดของคอลเลกชันให้เล็ก เพื่อป้องกันภาระที่เกิดจากการอ่านข้อมูลทั้งหมดในคอลเลกชัน แม้ว่าจะต้องการเพียงแค่ข้อมูลเดียวก็ตาม
- การจัดเก็บข้อมูลมากกว่า 64 KB หมายความว่าสามารถเรียกดูข้อมูลได้เพียง 64 KB แรกเท่านั้น ซึ่งส่งผลให้ข้อมูลสูญหาย
- ชุดข้อมูลที่ไม่ได้แช่แข็งจะมีจำนวนองค์ประกอบจำกัดอยู่ที่ประมาณ 65,535 รายการ และทุกองค์ประกอบจะถูกอ่านรวมกันเป็นหน่วยเดียว
ข้อจำกัดเหล่านี้ชี้ให้เห็นถึงกฎข้อหนึ่ง: ชุดข้อมูลเหมาะสำหรับคุณลักษณะเพียงไม่กี่อย่างที่แนบมากับแถว ไม่ใช่รายการแบบไม่จำกัดที่เติบโตขึ้นตามการใช้งาน สิ่งใดก็ตามที่เติบโตขึ้นเรื่อยๆ ควรอยู่ในคอลัมน์การจัดกลุ่มของตารางแยกต่างหาก
ประเภทของ Cassandra คอลเลคชั่น
คอลเลกชันส่วนใหญ่มีสามประเภทนั้น Cassandra รองรับ:
- ชุด
- รายการ
- แผนที่แสดงที่ตั้งบริษัท
Cassandra ชุดคอลเลกชัน
ชุดเก็บกลุ่มขององค์ประกอบที่ส่งคืนองค์ประกอบที่เรียงลำดับเมื่อทำการสอบถาม
วากยสัมพันธ์
ต่อไปนี้เป็นรูปแบบโครงสร้างของคอลเลกชันชุดที่จัดเก็บที่อยู่อีเมลหลายรายการสำหรับครู
CREATE TABLE University.Teacher ( id int, Name text, Email set<text>, PRIMARY KEY (id) );
ตัวอย่าง
นี่คือภาพสแน็ปช็อตที่สร้างตาราง "ครู" โดยมีคอลัมน์ "อีเมล" เป็นคอลเลกชัน
นี่คือภาพรวมที่มีการแทรกข้อมูลในคอลเลกชัน
INSERT INTO University.Teacher (id, Name, Email) VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});
สามารถเพิ่มหรือลบองค์ประกอบแต่ละรายการได้โดยไม่ต้องเขียนทับชุดข้อมูลทั้งหมด ซึ่งเป็นข้อได้เปรียบหลักของการปล่อยให้ชุดข้อมูลไม่ถูกตรึงไว้
UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1; UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;
Cassandra รายการคอลเลกชัน
เมื่อลำดับขององค์ประกอบมีความสำคัญ รายการจะถูกใช้
ตัวอย่าง
นี่คือภาพหน้าจอที่แสดงการเพิ่มคอลัมน์หลักสูตรประเภทรายการในตาราง "ครู"
ALTER TABLE University.Teacher ADD coursenames list<text>;
นี่คือภาพรวมที่มีการแทรกข้อมูลในคอลัมน์ “ชื่อหลักสูตร”
INSERT INTO University.Teacher (id, Name, Email, coursenames) VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);
นี่คือสแน็ปช็อตที่แสดงสถานะฐานข้อมูลปัจจุบันหลังจากการแทรก
สามารถเพิ่มองค์ประกอบต่อท้ายหรือเพิ่มไว้ข้างหน้าได้ แต่การเพิ่มไว้ข้างหน้าและการอัปเดตโดยใช้ดัชนีนั้นต้องใช้เงื่อนไขบางอย่าง Cassandra การอ่านรายการก่อนทำให้กระบวนการนี้ช้ากว่าการเพิ่มข้อมูลต่อท้าย
UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2; UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;
Cassandra คอลเลกชันแผนที่
แผนที่เป็นประเภทคอลเลกชันที่ใช้ในการจัดเก็บคู่ของค่าคีย์ เนื่องจากชื่อของมันบ่งบอกเป็นนัยว่ามันจะจับคู่สิ่งหนึ่งกับอีกสิ่งหนึ่ง
ตัวอย่างเช่น หากคุณต้องการบันทึกชื่อหลักสูตรพร้อมกับชื่อหลักสูตรเบื้องต้น คุณสามารถใช้การรวบรวมแผนที่ได้
ตัวอย่าง
นี่คือภาพรวมที่มีการสร้างประเภทแผนที่สำหรับชื่อหลักสูตรและชื่อหลักสูตรเบื้องต้น
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
นี่คือภาพรวมที่มีการแทรกข้อมูลลงในประเภทการรวบรวมแผนที่
INSERT INTO University.Course (id, prereq) VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});
สามารถเพิ่มหรือลบข้อมูลเพียงรายการเดียวโดยไม่กระทบต่อส่วนอื่นๆ ของแผนที่
UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1; DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;
ชุดเทียบกับรายการเทียบกับแผนที่: การเลือกใช้คอลเลกชัน
ทั้งสามแบบดูเหมือนกัน แต่แตกต่างกันในเรื่องการรับประกันการสั่งซื้อและค่าใช้จ่ายในการอัปเดต
| แง่มุม | ชุด | รายการ | แผนที่แสดงที่ตั้งบริษัท |
|---|---|---|---|
| การสั่งซื้อ | เรียงลำดับตามค่า | ลำดับการแทรกยังคงอยู่ | เรียงตามคีย์ |
| รายการที่ซ้ำกัน | ไม่ได้รับอนุญาต | ได้รับอนุญาต | กุญแจที่ไม่ซ้ำกัน |
| อัปเดตต้นทุน | ราคาถูก ไม่ต้องอ่าน | เพิ่มข้อมูลราคาถูก; การเพิ่มข้อมูลไว้ข้างหน้าและการอัปเดตดัชนีต้องใช้การอ่านข้อมูล | ราคาถูกต่อกุญแจ |
| เหมาะสำหรับ | แท็ก, ที่อยู่อีเมล, ป้ายกำกับเฉพาะ | ขั้นตอนเรียงลำดับที่การทำซ้ำมีความหมาย | คุณลักษณะที่มีชื่อพร้อมคีย์ที่ไม่สามารถคาดเดาได้ |
ควรเลือกใช้ชุดข้อมูลแทนรายการข้อมูล เว้นแต่ลำดับมีความสำคัญจริงๆ เพราะการดำเนินการกับดัชนีของรายการข้อมูลจะสร้างจุดที่ข้อมูลสูญหายและอาจให้ผลลัพธ์ที่ไม่คาดคิดเมื่อมีการเขียนข้อมูลพร้อมกัน การเพิ่ม แช่แข็ง ส่งข้อมูลไปยังร้านค้าทั้งสามแห่งในรูปแบบค่าที่ไม่เปลี่ยนแปลงค่าเดียว ซึ่งช่วยให้คอลเลกชันปรากฏในคีย์หลักได้ แต่จะขจัดปัญหาการอัปเดตในระดับองค์ประกอบ
CREATE TABLE University.Enrolment ( id int, tags frozen<set<text>>, PRIMARY KEY (id, tags) );
เมื่อชุดข้อมูลมีจำนวนองค์ประกอบเกินกว่าสองสามสิบรายการ ให้สร้างแบบจำลองเป็นตารางแยกต่างหาก โดยใช้องค์ประกอบนั้นเป็นคอลัมน์สำหรับการจัดกลุ่ม ตามแนวทางใน [อ้างอิง] Cassandra กฎแบบจำลองข้อมูลการกรองเนื้อหาในชุดข้อมูลจำเป็นต้องใช้ดัชนี ซึ่งได้กล่าวถึงไว้ในหัวข้อต่อไปนี้ สร้างและลบดัชนี เกี่ยวกับการสอน






