ก่อนอื่นผมต้องขอแชร์ก่อนว่า
การ Expired Rows จริงๆ แล้วในบางงานก็มีความสำคัญอยู่ไม่ใช่น้อย ยกตัวอย่างเช่น
- Email Confirm ต่างๆ เช่น เปลี่ยนรหัสผ่าน, ยืนยันตัวตน หากไม่ทำภายในระยะเวลาที่กำหนด
- เคลียร์ข้อมูล History เช่น Rows ที่มีอายุเกิน 9 เดือนแล้ว
- SMS OTP ยืนยันตัวตน
- และอีกหลายๆ งาน หรือตามความต้องการเป็นต้น
ซึ่งการ Expired Rows ท่าที่ Developers ส่วนใหญ่มักจะทำกันเลย ก็คือ การใช้ Batch ตั้งเวลาไว้ เมื่อถึงเวลาก็เข้ามากวาดเพื่อลบข้อมูลทิ้งไป ฟังดูเหมือนไม่ยาก แต่ถ้าหากเมื่อไหร่งานนั้นๆ จำเป็น แล้ว Batch ไม่ทำงานจะเกิดอะไรขึ้นซึ่งเราก็จะต้องมา Handle กันอีกที
Per Row หลายๆ ท่าน คงจะรู้สึกเฉยๆ แล้ว เพราะถ้าสาย Java อย่าง Redis ก็สามารถทำได้
แล้วถ้า ?!! Per Field ล่ะ จะทำยังไง เรามาดูกัน ฟิ๊ว ~ ~ ~
>> มาเข้าเรื่องได้แล้วววว
ในบทความนี้ผมจะพูดถึงวิธีการ Insert และ Update โดยใช้คำสั่ง ttl หรือ Time To Live นั่นเอง
บทบาทสำคัญของ Cassandra Time to Live (TTL) คือ การตั้งเวลาเพื่อกำหนดเวลาหมดอายุของ Row หรือ Field นั้นๆ เมื่อเวลาครบตามที่กำหนด Cassandra จะลบข้อมูลทิ้งโดยอัตโนมัติ
Cassandra time-to-live (TTL) มีประโยชน์อย่างไร ?
มีประโยชน์มากในการกำหนดเวลาหมดอายุ สำหรับ Row หรือ Field ที่เราต้องการ
ผมจะยกตัวอย่างให้เห็นภาพครับ
สมมติว่าเราต้องการ Verify ข้อมูล User โดยการส่งข้อความ OTP แล้วนำเลข OTP ดังกล่าวมากรอกในระบบเพื่อปรับ Status จาก WAITING เป็น VERIFIED เป็นการยืนยันตัวตน
มาเริ่มกันเลย
1. สร้าง Table test_ttl ขึ้นมาก่อน
create table mindshop_dev.test_ttl
(
uid varchar,
full_name varchar,
otp_verify varchar,
tel varchar,
status varchar,
created_date timestamp,
created_by varchar,
updated_date timestamp,
updated_by varchar,
primary key (uid, tel)
);
insert into test_ttl (uid,
full_name,
otp_verify,
tel,
status,
created_by,
created_date)
values ('abcde1',
'Moss Panusitt',
null,
'0669999969',
'WAITING',
'Mindbase',
toUnixTimestamp(now()));
update test_ttl
using ttl 30
set otp_verify = '987789'
where uid = 'abcde1'
and tel = '0669999969';
select tel, otp_verify
from test_ttl
where tel = '0669999969';
insert into test_ttl (uid,
full_name,
otp_verify,
tel,
status,
created_by,
created_date)
values ('abcde1',
'Moss Panusitt',
'999666',
'0669999969',
'WAITING',
'Mindbase',
toUnixTimestamp(now()))
using ttl 30;
จะสังเกตุได้ว่ามีการกำหนดเวลาให้ในระหว่างการ Insert ข้อมูลเลย
คำสั่ง using ttl 30
คำถามต่อไป อ้าวววว ~~~ แล้วถ้าลูกค้า Verify ก่อน 30 วินาทีล่ะ เราจะทำยังไงเพราะว่าไปกำหนดเวลาหมดอายุนี่หน่าา = ='
เราก็แค่สั่ง Update field otp_verify = null แล้วกำหนด using ttl 0 ทีนี้ Row ดังกล่าว ก็จะมีชีวิตอยู่ต่อ ไม่หมดอายุอีกต่อไปครับ
update test_ttl
using ttl 0
set otp_verify = null
where uid = 'abcde1'
and tel = '0669999969';
ได้เห็นความสามารถของ Cassandra แล้วเป็นไงบ้างครับ เพื่อนๆ สะดวก ใช้งานง่าย ตอบโจทย์ แน่นอน
ทีนี้ท่านก็ลองนำความรู้ดังกล่าวที่เรียนมาไปประยุกต์ใช้งานกับ Flow การทำงานท่านต่อได้เลยครับ