ย้ายจาก MySQL ไป PostgreSQL ด้วยพลัง Cursor

Dev · Aunhelloworld ·

ตอนแรกคิดว่าต้องกินเวลาน๊านนานนน แต่สุดท้ายมันจบลงได้ในเวลาไม่กี่ชั่วโมง ด้วยตัวช่วยที่เก่งจนน่ากลัวอย่าง Cursor ครับ

เรื่องของเรื่องคือ วันนี้ผมตัดสินใจย้าย Database ของโปรเจกต์ใหญ่โปรเจกต์หนึ่ง จาก MySQL ข้ามค่ายไปอยู่บน PostgreSQL

ต้องออกตัวก่อนนะครับว่า ไม่ใช่ว่า MySQL มันไม่ดี ระบบเดิมก็รันของมันได้ดีอยู่ แต่เราเป็นคนชอบหาทำ ... และคิดว่าถ้าเกิดมันโตขึ้นเรื่อยๆ จนถึงจุดที่เราเริ่มมองหาการเติบโตและการต่อยอดในอนาคต ผมเริ่มรู้สึกว่า PostgreSQL น่าจะเป็นคำตอบที่เปิดประตูให้เราไปได้ไกลกว่าครับ เพราะมันมีลูกเล่นและฟีเจอร์ขั้นสูงที่ตอบโจทย์ความซับซ้อนได้ยืดหยุ่นกว่ามาก ไม่ว่าจะเป็นเรื่องของการจัดการข้อมูลแบบ JSON ที่ทรงพลังกว่า, ระบบ Indexing ที่ฉลาดและหลากหลาย, หรือการรองรับ Concurrent Writes ที่โหดกว่าในระดับ Row-level locking อธิบายง่ายๆ คือ ระบบจะล็อกข้อมูลเฉพาะแถวที่กำลังถูกแก้ไขเท่านั้น ไม่ได้ล็อกตารางข้อมูลทั้งหมด ทำให้คนจำนวนมากสามารถวิ่งเข้ามาเขียนหรืออัปเดตข้อมูลในตารางเดียวกันได้พร้อมกันทันที โดยไม่ต้องยืนต่อคิวรอจนเว็บหมุนติ้วๆ ซึ่งจริงๆ มันก็ไม่มีทางถึงวันนั้นหรอก แต่ผมแค่ชอบ หาทำ อะไรใหม่ๆ และอยากลองดูว่ามันจะเป็นยังไง..

แต่นั่นแหละครับ ปัญหาของการย้ายค่ายดาต้าเบสในเว็บระบบที่ค่อนข้างใหญ่และมีหลายไฟล์ (เว็บอะใหญ่ โครงสร้างแน่นแต่ไม่มีคนเข้านะ5555+)
คือความนรกในการไล่แก้โค้ด ครับ คือต้องเข้าใจก่อนว่า ถ้าเราย้ายจาก Mysql ไป Postgresql มันไม่ใช่แค่การย้ายข้อมูลอย่างเดียว แต่มันต้องแก้โค้ดแต่ละหน้าด้วยไง มันเยอะก็ตรงนี้แหละ

คนเขียนโค้ดจะรู้ดีว่า ดาต้าเบสแต่ละเจ้ามีภาษาหรือ Dialect แตกต่างกันเล็กๆ น้อยๆ การย้ายระบบครั้งนี้ แปลว่าผมต้องเข้าไปไล่ตรวจเช็กแทบจะทุกไฟล์ ยิ่งถ้าโค้ดเดิมมีการเขียน Query ตรงๆ (Raw SQL) หรือพึ่งพา Syntax เฉพาะของ MySQL อยู่ล่ะก็... การนั่งแปลงประเภทข้อมูล (Data Type) การไล่แก้สัญลักษณ์อย่าง Backticks ให้กลายเป็น Double Quotes ตามมาตรฐานของ Postgres รวมถึงการสร้างสคริปต์สำหรับ Data Migration เพื่อโยกดาต้าจากที่เก่าไปที่ใหม่โดยไม่ให้ตกหล่นและไม่ให้ความสัมพันธ์ของข้อมูลพัง... ทั้งหมดนี้คือฝันร้ายของคนทำเว็บเลย ซึ่งความสามารถผมนั้น ถ้าจะไล่แก้โดยไม่มีเอไอ เป็นไปไม่ได้เลย เพราะเราไม่ใช่เทพเหมือนโปรแกรมเมอร์ยุคก่อนๆ ที่ทำแบบ เมนวล manual เออ เมนวล... 5555+

แต่ครั้งนี้ผมไม่ได้ทำคนเดียว ผมยกหน้าที่ Heavy Lifting ทั้งหมดนี้ให้ Cursor (AI Code Editor) เป็นคนลุยครับ :D

สิ่งที่ผมทำคือการเป็นคนที่คอยควบคุมทิศทางและสั่งการ ส่วน Cursor ทำหน้าที่เป็นแรงงานฝีมือดีระดับเทพ มันมองเห็น Context ของโค้ดทั้งโปรเจกต์ของผม และเจ้าเคอเซ่อ มันรู้ทันทีว่าจุดไหนใช้ Query แบบไหน แล้วมันก็ทำการแปลง Syntax จาก MySQL ไปเป็น PostgreSQL ให้แบบอัตโนมัติ หรือจุดไหนที่มีความต่างเรื่อง Timezone หรือประเภทข้อมูลเฉพาะ มันก็จัดการ Mapping ให้เสร็จสรรพ แถมยังช่วยเขียนสคริปต์ Migration ดึงข้อมูลข้ามค่ายให้อีกด้วยครับ

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

และตอนนี้ เว็บนั้นก็ได้ย้ายฐานข้อมูลจาก MySQL ไปอยู่บน PostgreSQL เรียบร้อยแล้ว พร้อมสำหรับการอัปเกรดฟีเจอร์ซับซ้อนใหม่ๆ ที่จะตามมาในอนาคตครับ

เหตุการณ์นี้ทำให้ผมตระหนักเลยครับว่า พลังของ AI ในยุคนี้มันไม่ได้มาแทนที่โปรแกรมเมอร์หรอก แต่มันมาปลดล็อกขีดจำกัดต่างหาก ซึ่งจริงๆแล้ว ผมเชื่อว่าหลายๆคน ก็สามารถ Manual ย้ายดาต้าเบสได้เองแหละ แต่มันนานและเยอะเว้ย ฟีลแบบเราสามารถถอนหญ้าทั้งสนามฟุตบอลได้ แต่เราเลือกที่จะใช้เครื่องตัดหญ้าแทนครับ :D ซึ่งพอมีเครื่องทุ่นแรง ผมคิดว่าเราเอาพลังสมองมาโฟกัสกับโครงสร้างและการสร้างสรรค์อะไรใหม่ๆ ดีกว่าครับ

← Home