Schema Migration: เครื่องมือข้อมูลเซิร์ฟเวอร์ SQL เทียบกับ Liquibase และ Flyway


11

นี่อาจดูเหมือนคำถามงี่เง่า แต่ฉันได้ดูวิธีแก้ไขปัญหาโอเพนซอร์ซสำหรับการโยกย้ายสคีมาคือ Liquibase และ Flyway

อย่างไรก็ตามเจ้านายของฉันบอกฉันว่า SQL Server Data Tools (SSDT) ​​ประสบความสำเร็จในงานเดียวกัน ฉันไม่แน่ใจว่าตกลง แต่ฉันพบน้อยมากบนอินเทอร์เน็ตที่เปรียบเทียบโดยตรงกับ Liquibase และ / หรือ Flyway

มุมมองของฉันคือ SSDT เป็นเครื่องมือในการพัฒนาการสร้างแบบจำลองข้อมูลและการออกแบบสำหรับ SQL Server และยังสนับสนุนการเปรียบเทียบสคีมา (และการสร้างสคริปต์ของมัน) และการควบคุมแหล่งที่มา มันจัดการกับปัญหาที่แตกต่างกันแม้ว่าอาจมีเหลื่อมซ้อนกับ Liquibase / Flyway ในบางแง่มุมของการโยกย้ายสคีมา แต่ในฐานะที่เป็นเครื่องมือในการโยกย้ายสคีมาโดยรวม Liquibase และ Flyway เป็นเครื่องมือที่ทุ่มเทอย่างเต็มที่ในขณะที่ SSDT นั้นมีความสำคัญมากกว่าสำหรับการออกแบบและพัฒนาฐานข้อมูล

ความคิดเห็นใด ๆ ที่จะได้รับการชื่นชมมากแม้ว่ามันจะบอกว่าไม่มีการเปรียบเทียบและ SSDT ไม่ใช่เครื่องมือโยกย้ายสคีมาต่อ

คำตอบ:


17

SSDT เปรียบได้กับ Liquibase / Flyway เหมือนกับที่ทำในสิ่งที่พวกเขาทำ ด้วย SSDT คุณมีสภาพแวดล้อมการพัฒนาเพื่อให้คุณได้รับสิ่งต่าง ๆ เช่นคำจำกัดความค้นหาการอ้างอิงและความรู้สึกภายในรวมถึงความสามารถในการคอมไพล์โครงการใน dacpac จากนั้นปรับใช้ dacpac นั้นกับฐานข้อมูล

วิธี SSDT (และวิธีเปรียบเทียบ sql redgate) เพื่อทำการ deloyment คือการประกาศสิ่งที่คุณต้องการดังนั้นหากคุณต้องการเปลี่ยนตารางที่มีลักษณะดังนี้:

create table a(id int)

ไปยังตารางที่มีลักษณะดังนี้:

create table a(id int, another_column varchar(12))

ด้วย SSDT คุณเพียงแค่เปลี่ยนคำจำกัดความของตารางเป็นอันที่สองและให้ SSDT กังวลเกี่ยวกับวิธีการอัพเกรด (สามารถทำตารางแก้ไข, เพิ่มคอลัมน์หรือเปลี่ยนลำดับคอลัมน์ได้ดังนั้นคุณจะต้องสร้างตาราง ฯลฯ )

ด้วย Liquibase (DbUp, ReadyRoll, วิธีการด้วยตนเองและอื่น ๆ ) สิ่งที่คุณทำคือในกรณีนี้ต้องเขียนตารางการเปลี่ยนแปลงด้วยตัวเองและตรวจสอบให้แน่ใจว่าคุณรันสคริปต์ในลำดับที่ถูกต้องพิจารณาสถานการณ์นี้:

  1. ปล่อย 1 - สร้างคอลัมน์สวัสดีบนตาราง
  2. เผยแพร่ 2 - เปลี่ยนชื่อคอลัมน์สวัสดีเป็น joe_blogs
  3. เผยแพร่ 3 - เปลี่ยนชื่อคอลัมน์ joe_blogs เป็น hello
  4. เผยแพร่ 4 - สร้างคอลัมน์ joe_blogs

หากมีการเผยแพร่ใด ๆ ที่ขาดหายไปจะไม่มีการแก้ไขใด ๆ ต่อไป

ประโยชน์ของการอัปเกรดสคริปต์ (Liquibase, DbUp และอื่น ๆ ):

  • คุณสามารถควบคุมสคริปต์ได้อย่างสมบูรณ์
  • DBA's / Developers ถูกใช้ในการนี้

ประโยชน์ของการเปรียบเทียบ / ผสาน (SSDT, Redgate SQL Compare):

  • ไม่ต้องเขียนสคริปต์อัพเกรด
  • มันง่ายที่จะไปยังรุ่นใด ๆ ที่เฉพาะเจาะจงเพียงแค่เปรียบเทียบและผสานเวอร์ชันนั้น

ข้อเสียของการอัปเกรดสคริปต์:

  • ต้องทำงานตามลำดับ
  • พึ่งพามนุษย์โดยไม่ทำผิด
  • ได้ช้าโดยเฉพาะถ้าคุณมีการเปลี่ยนแปลงมากมาย
  • เว้นแต่ว่าทีมของคุณจะมีฐานข้อมูลที่มีระเบียบวินัยสูงในสภาพแวดล้อมที่แตกต่างกัน (dev, test, staging, prod ฯลฯ ) มักจะไม่ซิงค์ทำให้การทดสอบไม่ถูกต้อง
  • การลดระดับการปล่อยหมายถึงการเขียนสคริปต์ทั้งหมดที่คุณเขียนไปแล้ว

ข้อเสียของการใช้การเปรียบเทียบ / ผสาน:

  • เครื่องมือไม่น่าเชื่อถือ 100% บางทีอาจไม่ยุติธรรม
  • SSDT ต้องการโครงการที่ใช้งานได้ฐานข้อมูลจำนวนมากมีรหัสที่ไม่ได้รวบรวมหรือเรียกใช้จริง ๆ (คิดว่าตารางที่ถูกดร็อป แต่ไม่ใช่โพรซีเดอร์ ฯลฯ ) ฉันเห็นสิ่งนี้ในฐานข้อมูลประมาณ 8/10 ที่ฉันได้รับมา :)
  • DBA หลายคน / นักพัฒนาลังเลที่จะยอมแพ้ในการพัฒนา SSMS / notepad

โดยส่วนตัวแล้วฉันคิดว่า SSDT เป็นสภาพแวดล้อมการพัฒนาที่เป็นมืออาชีพและนั่นหมายความว่าฉันสามารถมีสมาธิในการเขียนโค้ดและการทดสอบที่มีประโยชน์แทนการเขียนสคริปต์อัพเกรดที่อยู่ในตัวของมันเอง

คุณขอความคิดเห็นเพื่อไปที่นั่น :)

เอ็ด


1
SSDT ทำงานกับสิ่งอื่นนอกเหนือจาก SQL Server หรือไม่ เช่น Postgres
a_horse_with_no_name

3
ไม่มี "เครื่องมือข้อมูลเซิร์ฟเวอร์ SQL" :)
Ed Elliott

1
ทำไมจะไม่ล่ะ? แพคเกจ SSIS สามารถถ่ายโอนแหล่ง ODBC ส่วนใหญ่ได้ทั้งหมด
a_vlad

ถ้าฉันเข้าใจผิดฉันคิดว่าเรากำลังพูดถึงการจัดการสกีมาฐานข้อมูลแทนที่จะสร้างแพ็คเกจ SSIS ความสุขที่จะได้รับการแก้ไข :)
เอ็ดเอลเลียต

1
SSIS มีวัตถุประสงค์เพื่อย้ายข้อมูลและเช่นสนับสนุนการเชื่อมต่อกับระบบที่หลากหลาย SSDT มีไว้สำหรับการพัฒนาและบำรุงรักษาโครงการฐานข้อมูล SQL Server มันมีกระบวนการสร้างที่ตรวจสอบเวอร์ชั่น SQL Server เป้าหมายของคุณสำหรับความเข้ากันได้ของสคริปต์และตรวจสอบการอ้างอิง procs ฯลฯ ทั้งหมดสำหรับไวยากรณ์ T-SQL
เดฟ

2

ฉันแค่เติมคำตอบก่อนหน้า

ความแตกต่างที่ใหญ่ที่สุดที่อธิบายไว้ในเว็บไซต์ของ Flyway ในใจกลางเมือง

แก้ไขปัญหาเดียวเท่านั้นและแก้ไขได้ดี Flyway ย้ายฐานข้อมูลของคุณดังนั้นคุณไม่ต้องกังวลอีกต่อไป

Visual Studio + SSDT + SSIS = เครื่องมือ ETL ที่ทรงพลังเต็มรูปแบบด้วยข้อเสียเปรียบเพียงข้อเดียวเท่านั้น - ทำงานได้ภายใต้ windows จำเป็นต้องใช้ Windows + SQL Server สำหรับแพ็คเกจทำงาน แต่ทำงานกับแหล่งที่มาส่วนใหญ่ทั้งหมด

สำหรับการถ่ายโอน / ย้ายข้อมูล - ผลิตภัณฑ์จำนวนมากในตลาด พาณิชย์แหล่งที่มาเปิดชุมชน / ด่วนและอื่น ๆ

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


2

ฉันได้ทำงานกับทั้งเครื่องมือข้อมูล SQL Server และทางบิน เมื่อใช้ SSDT ฉันได้รับข้อดีดังต่อไปนี้:

  1. ฉันสามารถรวบรวมโครงการฐานข้อมูล .. ความหมายไม่มีความกลัวที่จะวางคอลัมน์ที่ถูกอ้างอิงโดยมุมมองฟังก์ชั่นหรือ procs ที่เก็บไว้ นี่เป็นคุณสมบัติที่ยอดเยี่ยมเพราะในอดีตเราพบว่ามีข้อผิดพลาดดังกล่าวหลังจากการเปิดตัวเท่านั้น
  2. หลังจากสร้างสำเร็จแล้ว SSDT จะสร้างสิ่งที่เรียกว่า "DACPAC" คิดถึง msi นี้ด้วยรุ่น

  3. dacpac ที่ได้รับพร้อมด้วย say version 5 สามารถนำไปใช้กับฐานข้อมูลซึ่งอยู่ใน Dacpac เวอร์ชัน 1,2,3,4 หรือ 6,7,8 เป็นต้นหากใช้กับ 1-4 ฐานข้อมูลจะถูกอัพเกรด หากนำไปใช้กับ 6,7 ฯลฯ ฐานข้อมูลจะถูกลดระดับ / ย้อนกลับ จะมีคำเตือนหากจะมีการสูญหายของข้อมูลซึ่งสามารถระงับได้ ดังนั้นเราจึงได้รับคุณสมบัติการย้อนกลับที่ยอดเยี่ยมซึ่งไม่สามารถใช้ได้กับเครื่องมืออื่น ๆ เช่นเส้นทางบิน ฯลฯ ด้วยเส้นทางบินเราต้องจัดเตรียมสคริปต์ชุดใหม่สำหรับการย้อนกลับ

  4. DACPAC ใช้การเปลี่ยนแปลงทั้งหมดในหนึ่งธุรกรรม หมายความว่าหากมีการเปลี่ยนแปลง 5 ตารางในการอัพเกรดและหนึ่งในนั้นล้มเหลวธุรกรรมทั้งหมดจะถูกย้อนกลับ Flyway รองรับสิ่งนี้เช่นกัน แต่สำหรับไฟล์ทุกไฟล์

อย่างไรก็ตาม SSDT และ DACPACs เป็น Microsoft SQL Server โดยเฉพาะ flyway สามารถใช้กับฐานข้อมูลได้หลากหลาย

ดังนั้นถ้าคุณใช้ SQL Server เพียงอย่างเดียวมันควรจะเป็นการตัดสินใจที่ง่ายที่จะใช้ SSDT และ DACPAC

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