Cassandra คอลเลกชัน: ตั้งค่า รายการ และแมปใน CQL พร้อมตัวอย่าง

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

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

  • 📦 สามประเภท: Set เก็บค่าที่ไม่ซ้ำกันโดยไม่เรียงลำดับ List รักษาลำดับการแทรก และ Map เก็บคู่คีย์และค่า
  • 🔤 พฤติกรรมการตั้งค่า: ข้อมูลจะถูกจัดเก็บโดยเรียงลำดับ และข้อมูลซ้ำจะถูกลบออกโดยอัตโนมัติ
  • 🔢 ข้อควรระวัง: ลำดับจะถูกรักษาไว้ แต่การเพิ่มข้อมูลไว้ข้างหน้าและการสร้างดัชนีจำเป็นต้องอ่านข้อมูลก่อนจึงจะเขียนข้อมูลได้
  • 🗺️ การใช้งานแผนที่: แผนที่เหมาะสำหรับแอตทริบิวต์ที่ยังไม่ทราบคีย์เมื่อออกแบบสคีมา
  • 📏 ขีดจำกัดขนาด: ควรจัดเก็บชุดข้อมูลให้มีขนาดเล็ก เพราะจะต้องอ่านทั้งชุดข้อมูลแม้ว่าจะต้องการใช้เพียงส่วนใดส่วนหนึ่งก็ตาม
  • 🧊 ตัวเลือกแบบแช่แข็ง: ชุดข้อมูลที่ถูกแช่แข็งจะถูกจัดเก็บเป็นค่าเดียวและต้องได้รับการแทนที่ทั้งหมด

Cassandra แผนผังรายการชุดสะสม

สิ่งที่เป็น Cassandra คอลเลกชัน?

Cassandra คอลเลกชันเป็นวิธีที่ดีสำหรับการจัดการงาน สามารถจัดเก็บองค์ประกอบหลายรายการไว้ในคอลเลกชันได้ มีข้อจำกัดอยู่ใน Cassandra คอลเลกชัน

  • คอลัมน์ประเภทคอลเลกชันไม่สามารถจัดเก็บข้อมูลได้เกิน 64 KB ในค่าเดียว
  • ควรจำกัดขนาดของคอลเลกชันให้เล็ก เพื่อป้องกันภาระที่เกิดจากการอ่านข้อมูลทั้งหมดในคอลเลกชัน แม้ว่าจะต้องการเพียงแค่ข้อมูลเดียวก็ตาม
  • การจัดเก็บข้อมูลมากกว่า 64 KB หมายความว่าสามารถเรียกดูข้อมูลได้เพียง 64 KB แรกเท่านั้น ซึ่งส่งผลให้ข้อมูลสูญหาย
  • ชุดข้อมูลที่ไม่ได้แช่แข็งจะมีจำนวนองค์ประกอบจำกัดอยู่ที่ประมาณ 65,535 รายการ และทุกองค์ประกอบจะถูกอ่านรวมกันเป็นหน่วยเดียว

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

ประเภทของ Cassandra คอลเลคชั่น

คอลเลกชันส่วนใหญ่มีสามประเภทนั้น Cassandra รองรับ:

  1. ชุด
  2. รายการ
  3. แผนที่แสดงที่ตั้งบริษัท

Cassandra ชุดคอลเลกชัน

ชุดเก็บกลุ่มขององค์ประกอบที่ส่งคืนองค์ประกอบที่เรียงลำดับเมื่อทำการสอบถาม

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

ต่อไปนี้เป็นรูปแบบโครงสร้างของคอลเลกชันชุดที่จัดเก็บที่อยู่อีเมลหลายรายการสำหรับครู

CREATE TABLE University.Teacher (
    id int,
    Name text,
    Email set<text>,
    PRIMARY KEY (id)
);

ตัวอย่าง

นี่คือภาพสแน็ปช็อตที่สร้างตาราง "ครู" โดยมีคอลัมน์ "อีเมล" เป็นคอลเลกชัน

ตัวอย่างของการ Cassandra ชุดคอลเลกชัน

นี่คือภาพรวมที่มีการแทรกข้อมูลในคอลเลกชัน

ตัวอย่างของการ Cassandra ชุดคอลเลกชัน

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 รายการคอลเลกชัน

เมื่อลำดับขององค์ประกอบมีความสำคัญ รายการจะถูกใช้

ตัวอย่าง

นี่คือภาพหน้าจอที่แสดงการเพิ่มคอลัมน์หลักสูตรประเภทรายการในตาราง "ครู"

ตัวอย่างของการ Cassandra รายการคอลเลกชัน

ALTER TABLE University.Teacher ADD coursenames list<text>;

นี่คือภาพรวมที่มีการแทรกข้อมูลในคอลัมน์ “ชื่อหลักสูตร”

ตัวอย่างของการ Cassandra รายการคอลเลกชัน

INSERT INTO University.Teacher (id, Name, Email, coursenames)
VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);

นี่คือสแน็ปช็อตที่แสดงสถานะฐานข้อมูลปัจจุบันหลังจากการแทรก

Cassandra ตัวอย่างการรวบรวมรายการ

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

UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2;
UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;

Cassandra คอลเลกชันแผนที่

แผนที่เป็นประเภทคอลเลกชันที่ใช้ในการจัดเก็บคู่ของค่าคีย์ เนื่องจากชื่อของมันบ่งบอกเป็นนัยว่ามันจะจับคู่สิ่งหนึ่งกับอีกสิ่งหนึ่ง

ตัวอย่างเช่น หากคุณต้องการบันทึกชื่อหลักสูตรพร้อมกับชื่อหลักสูตรเบื้องต้น คุณสามารถใช้การรวบรวมแผนที่ได้

ตัวอย่าง

นี่คือภาพรวมที่มีการสร้างประเภทแผนที่สำหรับชื่อหลักสูตรและชื่อหลักสูตรเบื้องต้น

ตัวอย่างของการ Cassandra คอลเลกชันแผนที่

CREATE TABLE University.Course (
    id int,
    prereq map<text, text>,
    PRIMARY KEY (id)
);

นี่คือภาพรวมที่มีการแทรกข้อมูลลงในประเภทการรวบรวมแผนที่

ตัวอย่างของการ Cassandra คอลเลกชันแผนที่

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 กฎแบบจำลองข้อมูลการกรองเนื้อหาในชุดข้อมูลจำเป็นต้องใช้ดัชนี ซึ่งได้กล่าวถึงไว้ในหัวข้อต่อไปนี้ สร้างและลบดัชนี เกี่ยวกับการสอน

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

ใช่แล้ว เมื่อมีดัชนีอยู่แล้ว ให้ใช้คำสั่ง CONTAINS สำหรับค่าชุดและรายการ และ CONTAINS KEY สำหรับคีย์แผนที่ หลังจากสร้างดัชนี VALUES, KEYS หรือ ENTRIES ที่ตรงกันแล้ว

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

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

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

โดยส่วนใหญ่แล้ว โปรแกรมมักสับสนระหว่างวงเล็บปีกกาชุดกับวงเล็บเหลี่ยมรายการ และละเว้นการใช้เครื่องหมายดอกจัน (frozen) ในกรณีที่คีย์หลักต้องการ ควรทดลองใช้คำสั่งที่สร้างขึ้นกับคีย์สเปซทดสอบก่อน

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