
เห็นบทความต่าง ๆ เกี่ยวกับ PostgreSQL ว่า เอามาจัดการเรื่อง caching ได้เลย
ซึ่งเอามาแทนที่ Memcached หรือ Redis ได้เลย
แถมไม่ต้องไปจัดการข้อมูลแยกระบบ หรือ คนละ software ด้วย
ดังนั้น จึงมาลองใช้งานกันดูหน่อยว่าเป็นอย่างไร ?
ก่อนอื่นนั้นในการจัดเก็บข้อมูล caching นั้นปกติจะทำการเก็บใน memory เป็นหลัก
รวมทั้งเขาถึงแบบ key-value จะได้ทำงานเร็ว ๆ
ทั้งการเขียนและการอ่าน
รวมทั้งยังต้องมีการจัดการ expired time ของข้อมูล
รวมทั้ง evection policy อีกด้วย
แต่ใน PostgreSQL นั้น ถ้าใช้งานแบบปกติ หรือ ค่า default นั้น
ในการอ่านเขียนข้อมูลจะทำการบันทึกลง disk โดยสร้างไฟล์ WAL (Write Ahead Log) ขึ้นมาในทุก ๆ record
เพื่อให้การเขียนข้อมูลปลอดภัย ถ้าเครื่องมีปัญหาขึ้นมา
และในการอ่านจะทำการอ่านจาก shared memory ก่อน
ถ้าไม่มีก็จะทำการอ่านข้อมูลจาก disk แล้วมาจัดเก็บไว้ใน shared memory อีกครั้ง
ทำให้การอ่านเร็วขึ้น
แต่มีปัญหาในการเขียนข้อมูล ซึ่งมี overhead จากการทำงานปกติ
ดังนั้นในกรณีที่ต้องการเขียนข้อมูลเยอะ ๆ
จึงได้ทำการเพิ่ม Unlogged table ขึ้นมาแก้ไขปัญหานี้
ซึ่งจะข้ามการสร้างไฟล์ WAL ไปเลย
แต่จะมีปัญหาเมื่อเครื่องมีปัญหา ข้อมูลหายแน่นอน
รวมทั้งข้อมูลจะอยู่ที่ primary server เท่านั้น ไม่สามารถ replcate ได้
นั่นคือทำ distributed caching โดย default ไม่ได้
ดังนั้น การใช้งานก็ขึ้นอยู่ที่ use case ของเรานั่นเอง
อธิบายมากไป จะงง !!
ดังนั้นมาลองใช้งานกันดีกว่า ว่ามีขั้นตอนอย่างไรบ้าง ?
ขั้นตอนที่ 1 สร้าง PostgreSQL Server ขึ้นมาก่อน โดยใช้งานผ่าน Docker
โดยทำการสร้าง unlogged table ขึ้นมาเพื่อจัดเก็บข้อมูล cached
ในรูปแบบของ key-value
ซึ่ง value จะเป็นข้อมูลในรูปแบบ JSON
และทำการสร้าง index ให้ด้วยเพื่อความรวดเร็วในการอ่านข้อมูล
ขั้นตอนที่ 2 ทำการลบข้อมูลตาม expire date ที่กำหนดไว้
เนื่องจาก PostgreSQL ไม่มีการจัดการข้อมูลที่มี expire time มาให้
จึงต้องสร้างเองด้วย
- Store procedure สำหรับลบข้อมูล
- ตั้งเวลาให้ทำการ run store procedure ด้วย pg_cron
- หรือถ้าไม่อยากใช้ pg_cron ก็ใช้ trigger ได้อีกด้วย
ดังนี้
เริ่มด้วยการสร้าง store procedure
จากนั้นทำการติดตั้ง pg_cron extension
และสร้าง job ให้ run ทุก ๆ ชั่วโมง
เมื่อทุกอย่างเรียบร้อยก็ลองทดสอบดูได้เลย
ดู config และ code ตัวอย่างได้ที่ GitHub:Up1
ขอให้สนุกกับการ coding ครับ
Reference websites