Cassandra ทีทีแอล & Cassandra ประเภทข้อมูล CQL (ตัวอย่าง)

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

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

  • 🔤 ตระกูลประเภท: CQL จัดกลุ่มประเภทข้อมูลเป็นหมวดหมู่ข้อความ ตัวเลข วันที่และเวลา ตัวระบุ และชุดข้อมูล
  • 🔢 ตัวเลือกเชิงตัวเลข: ตัวแปร tinyint ถึง varint ครอบคลุมความกว้างของจำนวนเต็มทุกขนาด ในขณะที่ decimal รักษาความแม่นยำที่แน่นอนสำหรับการคำนวณเงิน
  • 🆔 UUID เทียบกับ TimeUUID: timeuuid ฝังข้อมูลเวลาและจัดเรียงตามลำดับเวลา จึงเหมาะสำหรับคอลัมน์การจัดกลุ่มตามลำดับเวลา
  • หลักการพื้นฐานของ TTL: ค่า TTL (Time To Lease) ในหน่วยวินาทีที่ตั้งไว้ขณะแทรกข้อมูล จะลบข้อมูลโดยอัตโนมัติเมื่อเวลาดังกล่าวหมดลง
  • 🪦 ลักษณะการหมดอายุ: ข้อมูลที่หมดอายุจะกลายเป็นเหมือนป้ายหลุมศพ และจะถูกลบออกไปอย่างถาวรก็ต่อเมื่อทำการบีบอัดข้อมูลแล้วเท่านั้น
  • 🧊 ประเภทแช่แข็ง: การทำเครื่องหมายชุดข้อมูลหรือทูเพิลว่า "แช่แข็ง" จะจัดเก็บค่าดังกล่าวเป็นค่าเดียวที่ไม่สามารถเปลี่ยนแปลงได้ ซึ่งจะต้องแทนที่ทั้งหมดเมื่อทำการเปลี่ยนแปลงใหม่

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 วินาที

Cassandra TTL ใช้การหมดอายุข้อมูลอัตโนมัติ

INSERT INTO University.Student (rollno, name, dept, semester)
VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;

นี่คือภาพรวมที่ข้อมูลจะหมดอายุโดยอัตโนมัติหลังจาก 100 วินาที และข้อมูลจะถูกลบออกโดยอัตโนมัติ

Cassandra TTL ใช้การหมดอายุข้อมูลอัตโนมัติ

การตรวจสอบและเปลี่ยนแปลงค่า 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 คอลเลกชัน เกี่ยวกับการสอน

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

ไม่ TTL จะผูกกับค่าที่ไม่ใช่คีย์ แถวจะหายไปก็ต่อเมื่อคอลัมน์ที่ไม่ใช่คีย์ทั้งหมดหมดอายุแล้วเท่านั้น ดังนั้นการตั้งค่า TTL ให้กับการแทรกทั้งหมดจึงเป็นวิธีการที่เชื่อถือได้

ค่าสูงสุดคือ 630,720,000 วินาที หรือยี่สิบปี ค่าที่สูงกว่านี้จะถูกปฏิเสธ ดังนั้นการเก็บรักษาข้อมูลที่นานกว่านั้นจะต้องจัดการโดยกระบวนการล้างข้อมูลในระดับแอปพลิเคชัน

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

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

โปรแกรมนี้สามารถแปลงนโยบายการเก็บรักษาข้อมูลเป็นค่า TTL และแนะนำกลยุทธ์การบีบอัดข้อมูลได้ โปรดตรวจสอบระยะเวลาการเก็บรักษาตามกฎหมายก่อน เนื่องจากข้อมูลที่หมดอายุแล้วไม่สามารถกู้คืนได้

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