ทำไมและเมื่อ Liquibase?


103

ฉันได้ค้นหาคำตอบนี้ในสแตกล้น แต่ไม่พบคำถามใด ๆ เกี่ยวกับเรื่องนี้ ฉันยังใหม่Liquibaseและต้องการเรียนรู้

  • ทำไมLiquibase?
  • เมื่อใดที่ควรใช้Liquibaseในโครงการ

ฉันรู้ว่านี่คือการเก็บการเปลี่ยนแปลงฐานข้อมูลทั้งหมดไว้ในที่เดียว แต่สิ่งที่คล้ายกันนี้สามารถทำได้โดยการสร้างSQLไฟล์อย่างง่ายในระบบที่เก็บบางระบบและอัปเดตตามเวลา

คำตอบ:


72

ตัวสร้างความแตกต่างที่สำคัญระหว่างไฟล์สร้างสคีมาที่จัดการด้วยตนเองและ Liquibase (หรือเครื่องมือการโอนย้ายสคีมาอื่น ๆ) คือส่วนหลังให้การเปลี่ยนแปลงสคีมา นี่คือบันทึกการเปลี่ยนแปลงของสคีมาเมื่อเวลาผ่านไป ช่วยให้ผู้ออกแบบฐานข้อมูลระบุการเปลี่ยนแปลงในสคีมาและเปิดใช้งานการอัปเกรดแบบเป็นโปรแกรมหรือดาวน์เกรดของสคีมาตามความต้องการ

มีประโยชน์อื่น ๆ เช่น:

  • ความเป็นอิสระของผู้ขายฐานข้อมูล (เป็นเรื่องที่น่าสงสัย แต่พวกเขาพยายาม)
  • เอกสารอัตโนมัติ
  • สคีมาฐานข้อมูลต่างกัน

เครื่องมือทางเลือกหนึ่งคือฟลายเวย์

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


1
แต่สมมติว่าเราสร้างไฟล์และเขียนสคริปต์แรกของเราในนั้นและยอมรับว่า git ตอนนี้เมื่อถึงเวลาแล้วสคีมาจะได้รับการอัปเดตและเราสามารถย้อนกลับไปยังช่วงเวลาใดก็ได้และเปลี่ยนกลับสคีมาด้วยไม่?
SSC

1
ด้วยวิธีการดังกล่าวคุณสามารถสร้างสคีมาใหม่ได้ แต่คุณไม่สามารถดาวน์เกรด / อัปเกรดได้ ความแตกต่างคือการสูญเสียข้อมูล
Synesso

1
แต่ส่วนอื่น ๆ เวลาใช้หาย?
SSC

1
Synesso ฉันยังไม่เห็นวิธีที่คุณสามารถปรับลดรุ่นฐานข้อมูลการผลิตโดยอัตโนมัติหลังจากที่มีการใช้งานมาระยะหนึ่งและได้ทำการตัดสินใจเกี่ยวกับข้อมูลโดยใช้คอลัมน์ที่เพิ่มใหม่ คุณไม่สามารถทิ้งมันได้ในตอนนี้ นอกจากนี้ฉันไม่เห็นว่าเหตุใดจึงดีกว่าชุดสคริปต์ SQL เวอร์ชันที่เก็บไว้ในการควบคุมซอร์สซึ่งรวมถึงการแทรกแบบง่ายในตารางเวอร์ชันเมื่อเริ่มต้นและการอัปเดตในตอนท้ายเพื่อติดตามสิ่งที่ถูกนำไปใช้
ก่อรัก

อีกคำถามเพิ่ม ... เราจะบันทึกข้อผิดพลาดผ่านอีเมลใน java ได้อย่างไร เมื่อ SQL เปลี่ยนแปลงแก้ไขผ่าน XML?
UmaShankar

19

ฉันได้เห็นลิควิดเบสสร้างวินัยในหมู่นักพัฒนาเมื่อต้องปรับเปลี่ยนสคีมา คุณไม่สามารถไปเขียนทับการเปลี่ยนแปลงของนักพัฒนาคนอื่นและดำเนินการได้ คุณสร้างชุดการเปลี่ยนแปลงของคุณเองและเพิ่มลงในตอนท้ายของลำดับการเปลี่ยนแปลงที่จะดำเนินการ นอกจากนี้ยังทำให้เกิดความชัดเจนว่าการเปลี่ยนแปลงเกิดขึ้นเมื่อใดและใครเป็นผู้นำมา

แนวทางการดูแลรักษาสคีมาแบบ "เวอร์ชัน" มาก

สำหรับผู้เริ่มต้นจะให้ความรู้สึกถึง "งานที่ไม่จำเป็น"


4
ซึ่งก็คือฉัน (มันทำให้ฉันรู้สึกประทับใจที่คุณพูดถึง: P) +1 สำหรับความมุ่งมั่นที่สำคัญนั้น
Ismail Sahin

คุณพูดถูกเราสามารถติดตามการเปลี่ยนแปลงทั้งหมดว่าใครทำการเปลี่ยนแปลงล่าสุดและเมื่อใด หากเราต้องการย้อนกลับไปยังจุดที่เฉพาะเจาะจงลิลิเบสจะเป็นประโยชน์
Anoop PS

7

เมื่อคุณมีอินสแตนซ์ฐานข้อมูลหลายอินสแตนซ์ใน dev, qa, production และคุณต้องการมีเครื่องมือในการติดตามประวัติการเปลี่ยนแปลงโดยอัตโนมัติและใช้การเปลี่ยนแปลงอย่างชาญฉลาด (ใช้ความแตกต่างของสคีมาปัจจุบันและสคีมาสุดท้าย) เครื่องมือเช่น libibase หรือฟลายเวย์จะมีประโยชน์มาก .


3

ฉันเชื่อว่า Liquibase นั้นยอดเยี่ยมเมื่อปรัชญาของคุณคือฐานข้อมูลเป็นสิ่งที่คิดในภายหลัง ปรัชญานี้ทำให้เกิดฐานข้อมูลที่ไม่ดีส่วนใหญ่ในการผลิต - และส่วนใหญ่ไม่ดี ฐานข้อมูลควรได้รับการออกแบบให้มีมุมมองที่สมบูรณ์ของระบบธุรกิจทั้งหมดไม่ใช่โดยนักพัฒนาแอปพลิเคชันที่ทำงานในไซโลของตนเอง วิธีการหลังส่งผลให้เกิดการหลีกเลี่ยงข้อมูลที่ผิดปกติความสัมพันธ์ที่ไม่ดีระหว่างตารางการทำซ้ำพื้นที่ธุรกิจและระบบที่ยุ่งเหยิงและมีค่าใช้จ่ายในการบำรุงรักษาสูงซึ่งลูกค้าจะเกลียดในไม่ช้าหลังจากการปรับใช้เนื่องจากปัญหาที่เกิดขึ้น หากฐานข้อมูลได้รับการออกแบบมาเพื่อสะท้อนความสัมพันธ์ทางธุรกิจอย่างถูกต้องอายุการใช้งานจะยาวนานขึ้น 5 เท่าและจะตอบสนองวัตถุประสงค์ของมันได้ดีกว่าฐานข้อมูลที่ออกแบบเป็นชิ้นเล็กชิ้นน้อยถึง 5 เท่าซึ่งน่าเสียดายที่สุด

Liquibase ไม่ใช่ปัญหาในตัวเอง แต่ช่วยให้นักพัฒนาแอปพลิเคชันออกแบบฐานข้อมูลได้ นั่นคือปัญหา


19
การเปลี่ยนแปลงรายละเอียดคุณสมบัติใหม่เพิ่มข้อบกพร่องได้รับการแก้ไข แม้จะสมมติว่า "ฐานข้อมูลถูกออกแบบมาเพื่อสะท้อนความสัมพันธ์ทางธุรกิจอย่างถูกต้อง" แต่ก็เป็นเรื่องปกติและคาดว่าคุณจะต้องเปลี่ยนแปลงฐานข้อมูลเมื่อเวลาผ่านไปเนื่องจากธุรกิจและความสัมพันธ์ทางธุรกิจมีการเปลี่ยนแปลงอยู่ตลอดเวลา Liquibase ช่วยให้คุณจัดการการเปลี่ยนแปลงเหล่านั้นได้ แค่นั้นแหละ.
Steven Byks

จากประสบการณ์ของฉันมี DBA น้อยมากและนักพัฒนาจำนวนมากใช้ Liquibase - ฉันคิดว่า @ bob-barry เป็นจุดที่พบกับผลลัพธ์ส่วนใหญ่ DBA ที่ใช้เครื่องมือเช่น Liquibase (หรือเพียงคอมไพล์เก่า ๆ สำหรับประวัติการเปลี่ยนแปลง) จะพบว่ามีประโยชน์
PhillipHolmes

แนวทางปฏิบัติของฐานข้อมูลเชิงวิวัฒนาการและคล่องตัวโดยทั่วไปสนับสนุนและเปิดใช้งานการตรวจสอบโดยเพื่อน สำหรับฐานข้อมูลที่ต้องการประสิทธิภาพ DBA ยังคงทำงานร่วมกับทีมแอปสำหรับการเปลี่ยนแปลงฐานข้อมูล เครื่องมือเช่น Liquibase ช่วยให้สามารถ refactoring ได้ง่ายขึ้นโดยเทียบกับอาร์กิวเมนต์ denormalization ของคุณ 10 ปีที่ผ่านมาฉันทำงานให้กับผลิตภัณฑ์ที่ติดตั้งกับลูกค้ามากกว่า 20 รายแต่ละคนมีแพตช์และรอบการอัปเกรดของตัวเอง หลังจาก 2 ปีแห่งฝันร้ายและพยายามเขียนเครื่องมือดังกล่าวด้วยมือเราก็ไปหาลิควิดเบสทันทีที่รู้เรื่องนี้ และเรามีตารางที่มีระเบียน 200 M ซึ่งไม่ได้ใหญ่โตในเวลานั้น แต่มีบางอย่างที่ต้องการ DBA
user6317694

3
ฉันหวังว่าจะได้พบคุณบนสวรรค์สักวัน เสียงดีแน่นอน
Bijan

3

ฉันคิดว่าทำไมลิควิดเบสสามารถตอบได้หากคุณอ่านบทความด้านล่างนี้ http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html

หากคุณอ่านอย่างละเอียดความสามารถในการดาวน์เกรดเป็นเวอร์ชันที่ต่ำกว่าจากเวอร์ชันที่สูงกว่าด้วยความช่วยเหลือของคำสั่ง mvn หรือ CLI แบบง่ายนั้นมีประโยชน์มากซึ่งคุณจะไม่ได้รับหากคุณทำตามวิธีการส่งไฟล์ sql ของคุณไปยัง GIT เพราะคุณ ต้องเรียกใช้สคริปต์เหล่านั้นด้วยตนเองและคุณไม่มีชุดการเปลี่ยนแปลงเช่น: - ใครเป็นผู้สร้างการเปลี่ยนแปลง ฯลฯ


0

การเป็น DevOps บุคคลในทีมของฉันฉันต้องการมีไฟล์ SQL ทั้งหมดในที่เดียวเช่นใน SCM ของฉัน (การจัดการซอร์สโค้ด)

นอกจากนี้ในช่วงCI / CD หาก DB Schema ถูกสร้างขึ้นพร้อมกันจะช่วยประหยัดเวลาและทรัพยากรได้มาก คุณไม่จำเป็นต้องมีบุคคลอื่นที่จัดการฐานข้อมูลของคุณสำหรับลูกค้ารายนั้น

ORM เช่น Flyway, Liquibase, EF เป็นต้นช่วยในการบรรลุเป้าหมายนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.