Cassandra ทีทีแอล & Cassandra ประเภทข้อมูล CQL (ตัวอย่าง)
⚡ สรุปอย่างชาญฉลาด
Cassandra ประเภทข้อมูลกำหนดว่าแต่ละคอลัมน์สามารถเก็บค่าอะไรได้บ้าง และ TTL ควบคุมระยะเวลาที่ค่าจะคงอยู่ก่อนที่จะหมดอายุโดยอัตโนมัติ หน้านี้แสดงรายการประเภท CQL ทั้งหมด อธิบายกลไกการหมดอายุ และครอบคลุมพฤติกรรมของข้อมูลที่ถูกลบหลังจากหมดอายุ

Cassandra ประเภทข้อมูล
Cassandra รองรับประเภทข้อมูลประเภทต่างๆ นี่คือตารางที่แสดงชนิดข้อมูล ค่าคงที่ และคำอธิบาย
| ประเภท CQL | ค่าคงที่ | Descriptไอออน |
|---|---|---|
| ASCII | Strings | ชุดอักขระ US-Ascii |
| ใหญ่ | จำนวนเต็ม | เซ็นชื่อแบบ 64 บิตแบบยาว |
| หยด | blobs | ไบต์ตามอำเภอใจเป็นเลขฐานสิบหก |
| บูล | booleans | จริงหรือเท็จ |
| ตอบโต้ | จำนวนเต็ม | ค่าตัวนับแบบกระจาย 64 บิต |
| ข้อมูล | จำนวนเต็ม, สตริง | วันที่ในปฏิทินที่ไม่มีส่วนประกอบของเวลา |
| ทศนิยม | จำนวนเต็ม, ลอยตัว | ทศนิยมความแม่นยำตัวแปร |
| สอง | จำนวนเต็ม, ลอยตัว | จุดลอยตัว 64 บิต |
| ระยะเวลา | ระยะเวลา | ช่วงเวลาหลายเดือน หลายวัน และหลายนาโนวินาที |
| ลอย | จำนวนเต็ม, ลอยตัว | จุดลอยตัว 32 บิต |
| แช่แข็ง | สิ่งอันดับ คอลเลกชัน ประเภทที่ผู้ใช้กำหนด | จัดเก็บค่าที่มีหลายส่วนเป็นข้อมูลที่ไม่สามารถเปลี่ยนแปลงได้เพียงชุดเดียว |
| inet | Strings | ที่อยู่ IP ในรูปแบบ IPv4 หรือ IPv6 |
| int | จำนวนเต็ม | จำนวนเต็ม 32 บิตแบบมีเครื่องหมาย |
| รายการ | การรวบรวมองค์ประกอบอย่างเป็นระเบียบ | |
| แผนที่ | ชุดข้อมูลแบบ JSON ที่ประกอบด้วยคู่คีย์และค่า | |
| เซ็ต | กลุ่มขององค์ประกอบที่ไม่ซ้ำกันซึ่งไม่ได้เรียงลำดับ | |
| ขนาดเล็ก | จำนวนเต็ม | จำนวนเต็ม 16 บิตแบบมีเครื่องหมาย |
| ข้อความ | Strings | สตริงที่เข้ารหัส UTF-8 |
| เวลา | จำนวนเต็ม, สตริง | บอกเวลาด้วยความแม่นยำระดับนาโนวินาที |
| การประทับเวลา | จำนวนเต็ม, สตริง | วันที่และเวลาที่เข้ารหัสเป็นมิลลิวินาทีตั้งแต่ยุคเริ่มต้น |
| ไทม์ยูไอด์ | UUID | UUID ประเภท 1 สามารถเรียงลำดับตามเวลาที่ฝังอยู่ได้ |
| Tinyint | จำนวนเต็ม | จำนวนเต็ม 8 บิตแบบมีเครื่องหมาย |
| ทูเพิล | กลุ่มฟิลด์ประเภทคงที่ | |
| ยูอิด | UUID | UUID มาตรฐาน |
| วาร์ชาร์ | Strings | สตริงที่เข้ารหัสแบบ UTF-8 ซึ่งเป็นชื่อเรียกอีกอย่างหนึ่งของข้อความ |
| วารินต์ | จำนวนเต็ม | จำนวนเต็มความแม่นยำตามอำเภอใจ |
สามตัวเลือกในรายการนั้นเป็นสาเหตุหลักของข้อผิดพลาดในการสร้างแบบจำลอง ดังนั้นจึงควรระบุไว้อย่างชัดเจน
- ข้อความเทียบกับ varchar มันเป็นประเภทเดียวกัน จะเรียกชื่อไหนก็ได้ การผสมชื่อไม่ได้เพิ่มคุณค่าอะไร
- การประทับเวลาเทียบกับ timeuuid ใช้ timestamp เพื่อบันทึกเวลาที่เหตุการณ์เกิดขึ้น ใช้ timeuuid เป็นคอลัมน์สำหรับการจัดกลุ่มเมื่อมีเหตุการณ์จำนวนมากเกิดขึ้นในช่วงเวลามิลลิวินาทีเดียวกัน เนื่องจาก UUID รับประกันความไม่ซ้ำกันในขณะที่ยังคงเรียงลำดับตามเวลาได้
- เลขฐานสิบเทียบกับเลขฐานสอง ค่าทางการเงินควรอยู่ในรูปแบบเลขฐานสิบ การใช้เลขฐานสอง (double) จะทำให้เกิดข้อผิดพลาดในการปัดเศษแบบไบนารี ซึ่งจะสะสมเพิ่มขึ้นเรื่อยๆ ในการคำนวณ
A ตอบโต้ คอลัมน์นี้มีข้อจำกัดพิเศษ คือ ตารางสามารถมีคอลัมน์นับหรือคอลัมน์ธรรมดาได้เท่านั้น ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ และไม่สามารถแทรกแถวนับได้ ทำได้เพียงเพิ่มค่าของแถวนับเท่านั้น
Cassandra TTL (Time to Live) โดยใช้การหมดอายุข้อมูลอัตโนมัติ
Cassandra มีฟังก์ชันการทำงานที่ทำให้ข้อมูลสามารถหมดอายุได้โดยอัตโนมัติ
ในระหว่างการแทรกข้อมูล คุณต้องระบุค่า 'ttl' เป็นวินาที ค่า 'ttl' คือเวลาที่จะแสดงค่าปัจจุบันของข้อมูล หลังจากระยะเวลาดังกล่าว ข้อมูลจะถูกลบออกโดยอัตโนมัติ
ตัวอย่างเช่น ระบุค่า ttl 100 วินาทีระหว่างการแทรก ข้อมูลจะถูกลบโดยอัตโนมัติหลังจากผ่านไป 100 วินาที เมื่อข้อมูลหมดอายุ ข้อมูลที่หมดอายุนั้นจะถูกทำเครื่องหมายด้วยป้ายหลุมศพ
มีป้ายหลุมศพอยู่ในช่วงเวลาผ่อนผัน หลังจากข้อมูลหมดอายุ ข้อมูลจะถูกลบออกโดยอัตโนมัติหลังจากกระบวนการบดอัด
วากยสัมพันธ์
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
ตัวอย่าง
นี่คือภาพรวมที่มีการแทรกข้อมูลในตารางนักเรียนโดยมีค่า TTL เท่ากับ 100 วินาที
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
นี่คือภาพรวมที่ข้อมูลจะหมดอายุโดยอัตโนมัติหลังจาก 100 วินาที และข้อมูลจะถูกลบออกโดยอัตโนมัติ
การตรวจสอบและเปลี่ยนแปลงค่า TTL บนข้อมูลที่มีอยู่
เมื่อค่าใดค่าหนึ่งมีค่า TTL แล้ว จะมีการดำเนินการเพิ่มเติมอีกสามอย่างที่เป็นประโยชน์ และแต่ละอย่างก็มีพฤติกรรมที่อาจทำให้ผู้ที่เพิ่งเริ่มต้นใช้งานประหลาดใจ
สามารถอ่านค่าอายุการใช้งานที่เหลืออยู่ของคอลัมน์ที่ไม่ใช่คีย์หลักได้โดยใช้ฟังก์ชัน TTL
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
ผลลัพธ์ที่เป็นค่าว่างหมายความว่าคอลัมน์นั้นไม่ได้กำหนดวันหมดอายุไว้ ไม่สามารถเรียกดูข้อมูลจากคอลัมน์คีย์หลักด้วยวิธีนี้ได้ เนื่องจากค่า TTL จะผูกกับค่าของข้อมูล ไม่ใช่กับคีย์
สามารถกำหนดค่า TTL ใหม่ให้กับค่าที่มีอยู่ได้โดยการอัปเดตค่าดังกล่าว ซึ่งจะรีเซ็ตการนับถอยหลังตั้งแต่ขณะนั้นเป็นต้นไป
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
การกำหนดค่าเริ่มต้นทั่วทั้งตารางจะช่วยหลีกเลี่ยงการทำซ้ำข้อความดังกล่าวในทุกคำสั่ง
ALTER TABLE University.Student WITH default_time_to_live = 86400;
ผลที่ตามมามีสองประการ ประการแรก TTL จะใช้กับคอลัมน์ ไม่ใช่แถว ดังนั้นการอัปเดตคอลัมน์เดียวโดยไม่มี TTL จะทำให้คอลัมน์นั้นยังคงอยู่หลังจากส่วนที่เหลือหมดอายุ ทำให้ได้แถวที่มีข้อมูลไม่สมบูรณ์ การตั้งค่า TTL ให้กับการแทรกทั้งหมดจะช่วยหลีกเลี่ยงปัญหานี้ ประการที่สอง ทุกครั้งที่หมดอายุจะมีการเขียน tombstone ดังนั้นตารางที่มีหลายล้านแถวหมดอายุพร้อมกันจะทำให้การอ่านช้าลงจนกว่าการบีบอัดจะล้างออก การใช้ TimeWindowCompactionStrategy สำหรับตารางดังกล่าวจะช่วยให้สามารถลบ SSTable ทั้งหมดได้ในครั้งเดียว แทนที่จะบีบอัดทีละแถว
นอกจากนี้ ยังสามารถกำหนดวันหมดอายุให้กับองค์ประกอบภายในคอลเลกชันได้ ซึ่งจะกล่าวถึงในหัวข้อถัดไป Cassandra คอลเลกชัน เกี่ยวกับการสอน


