PlusMagi's Blog By Pitt Phunsanit Java,Spring Boot Spring Boot: Migrate Flyway / Liquibase

Spring Boot: Migrate Flyway / Liquibase

ในการจัดการฐานข้อมูลสำหรับโปรเจกต์ซอฟต์แวร์ การใช้เครื่องมือ Database Migration เป็นสิ่งจำเป็นพอ ๆ กับการใช้ Git เพื่อควบคุมเวอร์ชันของ Code โดยเครื่องมือยอดนิยมที่มักถูกหยิบมาเปรียบเทียบกันคือ Flyway และ Liquibaseระบบ Migrate เครื่องมือที่นิยมที่สุดคือ Flyway หรือ Liquibase ( เปรียบเสมือน php artisan migrate ของฝั่ง Java )

แม้ทั้งคู่จะทำหน้าที่เดียวกันคือการจัดการลำดับการเปลี่ยนแปลง Schema ของ Database แต่ก็มีปรัชญาการทำงานที่แตกต่างกันอย่างชัดเจน ดังนี้ครับ


Flyway: เน้นความง่ายและความชัดเจน ( Simplicity First )

Flyway ยึดหลักการว่า “SQL คือภาษาสากล” ดังนั้นการเขียน Migration จึงทำผ่านไฟล์ SQL เป็นหลัก

  • รูปแบบการเขียน: ใช้ไฟล์ SQL (.sql) โดยกำหนดชื่อไฟล์ตามรูปแบบที่กำหนด เช่น V1__Create_user_table.sql
  • จุดเด่น: * Learning Curve ต่ำ: ถ้าคุณเขียน SQL เป็น คุณก็ใช้ Flyway เป็นทันที
    • อ่านง่าย: Developer สามารถตรวจสอบโครงสร้าง Table ได้โดยตรงจากไฟล์ SQL
    • เบาและเร็ว: ตัว Library มีขนาดเล็กและทำงานได้รวดเร็ว
  • ข้อจำกัด: ผูกติดกับ Database เฉพาะทาง ( Database Specific ) หากคุณเขียน SQL สำหรับ MySQL คุณจะไม่สามารถนำไฟล์เดิมไปรันบน Oracle หรือ PostgreSQL ได้ทันทีโดยไม่แก้ไข

Liquibase: เน้นความยืดหยุ่นและการทำงานข้ามระบบ ( Power & Flexibility )

Liquibase ทำหน้าที่เป็น “Layer” คั่นกลางระหว่าง Developer และ Database โดยใช้วิธีระบุการเปลี่ยนแปลงผ่านรูปแบบ Abstract

  • รูปแบบการเขียน: รองรับ XML, YAML, JSON และ SQL
  • จุดเด่น:
    • Database Agnostic: คุณเขียนคำสั่งสร้าง Table ในรูปแบบ XML/YAML เพียงครั้งเดียว Liquibase จะแปลงเป็น SQL ที่ถูกต้องตามประเภท Database ที่คุณเชื่อมต่อให้เอง
    • ฟีเจอร์จัดเต็ม: รองรับการทำ Rollback ที่ซับซ้อน, การตรวจสอบสถานะ Database ปัจจุบัน ( Diff ), และการจัดการ Context ( เช่น รันเฉพาะใน Dev หรือ Test )
    • ความปลอดภัย: มีระบบตรวจสอบความผิดพลาดก่อนรันจริงที่ละเอียดกว่า
  • ข้อจำกัด: มีความซับซ้อนสูง ( Learning Curve สูงกว่า ) และไฟล์ XML/YAML อาจจะอ่านยากและเทอะทะเมื่อเทียบกับ SQL เพียว ๆ

ตารางเปรียบเทียบสรุป ( Comparison Table )

หัวข้อเปรียบเทียบFlywayLiquibase
รูปแบบหลักSQL ( Plain SQL )XML, YAML, JSON, SQL
ความยากง่ายง่ายมาก ( Simple )ปานกลาง-สูง ( Sophisticated )
การ Rollbackมีในเวอร์ชัน Enterprise ( เสียเงิน )รองรับตั้งแต่เวอร์ชัน Open Source
การย้าย Databaseยาก ( ต้องแก้ SQL ตาม Syntax )ง่าย ( แปลง Syntax ให้อัตโนมัติ )
การควบคุม ( Control )สูง (เพราะเขียน SQL เอง)ปานกลาง ( ต้องผ่านตัวกลาง )
ความนิยมสูงมากในกลุ่ม Spring Boot / Javaสูงมากใน Enterprise โปรเจกต์ใหญ่

ควรเลือกใช้ตัวไหนดี ?


เลือก Flyway ถ้า…

  1. ทีมของคุณมีความเชี่ยวชาญ SQL อยู่แล้วและต้องการความรวดเร็ว
  2. โปรเจกต์ไม่มีแผนที่จะเปลี่ยนประเภท Database ในอนาคต ( เช่น ใช้ PostgreSQL ตลอดไป )
  3. ต้องการความเรียบง่าย ไม่ชอบโครงสร้าง XML/YAML ที่ซับซ้อน

เลือก Liquibase ถ้า…

  1. ซอฟต์แวร์ของคุณต้องรองรับ Database หลายประเภท ( เช่น ขาย Solution ให้ลูกค้าหลายที่ที่มีระบบต่างกัน )
  2. ต้องการฟีเจอร์ Rollback แบบละเอียดในเวอร์ชันฟรี
  3. โปรเจกต์มีความซับซ้อนสูง และต้องการการจัดการ Migration ที่เป็นระบบและมีเงื่อนไขเยอะ

อ่านเพิ่มเติม