ป้ายกำกับ: YAML

Spring Boot: Migrate Flyway / LiquibaseSpring Boot: Migrate Flyway / Liquibase

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

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


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

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

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

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

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

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

ตารางเปรียบเทียบสรุป

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

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


เลือก Flyway ถ้า…

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

เลือก Liquibase ถ้า…

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

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