แนวทางปฏิบัติหรือเครื่องมือใดที่เปิดใช้งานการปรับใช้ฐานข้อมูลอย่างต่อเนื่อง


17

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

ฉันทราบว่ามีวิธีปฏิบัติเช่นเพิ่มเฉพาะวัตถุฐานข้อมูลเช่นตารางและคอลัมน์ไม่เคยแก้ไขหรือลบออก - นี่เป็นวิธีการเพิ่มเติมอย่างหมดจดในการเข้าใกล้ schema ของฐานข้อมูล สกีมา

อย่างเท่าเทียมกันมีผลิตภัณฑ์เช่นFlywayและReady Rollซึ่งช่วยในการเขียนการย้ายข้อมูลที่จะเขียนระหว่างสกีมาเวอร์ชันต่างๆ

มีวิธีปฏิบัติและเครื่องมืออื่นใดอีกบ้างในปัจจุบันที่อนุญาตให้มีการปรับใช้สกีมาฐานข้อมูลอย่างต่อเนื่องในสภาพแวดล้อมการผลิตที่มีความสมบูรณ์ของข้อมูล


เหตุใด DB schema จึงต้องเปลี่ยนหรือโอนย้ายหากรหัสที่เข้าถึงฐานข้อมูลไม่เปลี่ยนแปลง (สมมติว่าไม่มีการเข้าถึงฐานข้อมูลแบบแมนนวลซึ่งอาจอธิบายได้)
Dan Cornilescu

สวัสดี @DanCornilescu, วิธีการเพิ่ม "ดัชนี" เพื่อลด / แก้ไขปัญหาประสิทธิภาพการทำงานที่อยู่?
Pierre.Vriens

ตรงไปตรงมาฉันรู้น้อยมากเกี่ยวกับฐานข้อมูลแบบดั้งเดิม - คำถามสามารถนำไปใช้กับดัชนีของพวกเขาได้เป็นอย่างดี ฉันใช้ที่เก็บข้อมูลบนคลาวด์ของ Google ซึ่งการเปลี่ยนแปลงดัชนีมักจะมาพร้อมกับการเปลี่ยนแปลงรหัสแอปเช่นกัน ความคิดเห็นของฉันเป็นคำถามที่ซื่อสัตย์ไม่ใช่ "การร้องเรียน" เกี่ยวกับคำถามของริชาร์ด แต่อย่างใด
Dan Cornilescu

@DanCornilescu ฉันยังเชื่อในสิ่งที่คุณเขียนไว้ในความคิดเห็นก่อนหน้านี้ (และความคิดเห็นก่อนหน้าของฉันเป็นเพียงความพยายามที่จะให้คำตอบที่เป็นไปได้สำหรับคำถามในความคิดเห็นแรกของคุณ) คำถามต่อไป (ของจริง?)
Pierre.Vriens

คุณอาจพบ Flyway ที่น่าสนใจflywaydb.org
Thorbjørn Ravn Andersen

คำตอบ:


13

Pramod Sadalage และ Scott Ambler เขียนหนังสือRefactoring Databases: การออกแบบฐานข้อมูลเชิงวิวัฒนาการซึ่งเป็นไพรเมอร์ที่แข็งแกร่งอย่างไม่น่าเชื่อในเรื่องของ DBs ในองค์กรซีดี / ทีม


คุณสามารถเพิ่มการสรุปได้หรือไม่
030

11

ความท้าทาย


ฉันทราบว่ามีวิธีปฏิบัติเช่นเพิ่มเฉพาะวัตถุฐานข้อมูลเช่นตารางและคอลัมน์ไม่เคยแก้ไขหรือลบออก

ที่ บริษัท หนึ่งที่ฉันทำงานอยู่หน้าต่างของข้อมูลดิบที่มีค่าเท่ากับประมาณ 6 เดือนและกิน 10 TB จากนั้นข้อมูลจะถูกประมวลผลในรูปแบบ RDBMS ซึ่งมีค่าใช้จ่ายข้อมูลที่สามารถใช้งานได้ 6 TB ซึ่งคิดเป็นข้อมูลประมาณ 10 ปี ประเด็นก็คือในระดับการปฏิบัติประเภทนี้ก็ไม่ได้เกิดขึ้นจริง การจัดเก็บมีราคาแพง - อาจเป็นค่าใช้จ่ายในการคำนวณที่ยิ่งใหญ่ที่สุด นี่เป็นความท้าทายที่น่าสนใจหลายประการ:

  1. การสำรองข้อมูล - ปลั๊กอิน innodb นั้นยอดเยี่ยมและทั้งหมด แต่เวลาในการสำรองข้อมูลบนข้อมูลจำนวนมากนั้นไม่สามารถนำไปใช้ได้จริง
  2. คืนเวลา - สำหรับชุดข้อมูลขนาดใหญ่ - โดยเฉพาะอย่างยิ่งถ้าคุณต้องการการจำลองแบบให้ทันหลังจากการคืนค่ากลับสู่สถานะการดำเนินการอาจใช้เวลาหลายวันหรือหลายสัปดาห์
  3. การสร้าง / การสร้างอินสแตนซ์ใหม่ - บ่อยครั้งที่งานที่คุณอาจทำในการพัฒนา / ทดสอบเกี่ยวข้องกับงาน ETL (แยก, แปลงและโหลด) บนชุดข้อมูลของคุณ ต้องมีการตรวจสอบความถูกต้องโดยใช้หน่วยทดสอบ QA แต่ต้องทำในลักษณะที่ไม่ทำลายเพื่อให้ชุดข้อมูลการผลิตดั้งเดิมถูกเก็บรักษาไว้ ในขณะที่เกิดภัยพิบัติคุณอาจยินดีที่จะจัดการกับเวลาในการเรียกคืนที่ยาวนานในการทำความเข้าใจว่าการสำรองข้อมูลเป็นนโยบายการประกันและความตั้งใจคือการหลีกเลี่ยงพวกเขาเวิร์กโฟลว์การพัฒนา DevOps ต้องการให้คุณสามารถทำการกู้คืนหรือ สำเนาข้อมูลของคุณเป็นประจำ (อาจวันละหลายครั้ง)
  4. ความจุ - การวนรอบข้อมูลจำนวนมากในระดับที่ฉันเพิ่งอธิบายนั้นอาจเป็น I / O อย่างเข้มข้น ไม่เพียงคุณต้องจัดการกับปัญหาที่อธิบายไว้ในข้อ 1-3 แต่คุณต้องทำในลักษณะที่ไม่ทำให้ระบบขัดข้องหรือประสิทธิภาพการทำงานช้าลงสำหรับระบบการผลิตของคุณ

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

การกำหนดข้อกำหนด


ดังนั้นคุณต้องกำหนดข้อกำหนดหลายประการ:

  1. RTO - RTO หรือ Restore Time Objective สำหรับการสำรองข้อมูลเป็นหนึ่งในไดรเวอร์ที่สำคัญที่สุดของโซลูชันการสำรองฐานข้อมูล ในขณะที่ในตอนแรกมันอาจจะไม่เกี่ยวข้องกับปัญหาอื่น ๆ ส่วนใหญ่มันจะมีความเกี่ยวข้องอย่างมากเมื่อคุณถามว่า "จะเกิดอะไรขึ้นถ้าฉันใช้โซลูชันสำรองของฉันสำหรับการสร้างหรือสร้างอินสแตนซ์ใหม่?" ฉันจะครอบคลุมเทคนิคบางอย่างสำหรับการทำเช่นนั้นในส่วนถัดไป
  2. RPO - RPO หรือจุดคืนค่าจุดประสงค์สำหรับการสำรองข้อมูลกำหนด A) ไกลแค่ไหนที่คุณสามารถกู้คืน (นาที, ชั่วโมง, วัน, สัปดาห์, เดือนหรือปี) B) ช่วงเวลาการสำรองข้อมูลที่ระดับที่แตกต่างกันและ C) . ตัวอย่างเช่นสำหรับฐานข้อมูลอีเมลการสำรองข้อมูลระดับข้อความ - การกู้คืนอีเมลที่เฉพาะเจาะจง - มักจะหา ในทำนองเดียวกันคุณอาจพบว่าข้อมูลในช่วงสองสามวันนั้นไร้ประโยชน์อย่างสมบูรณ์ - ดังนั้นจึงไม่มีจุดคืนค่าปี
  3. ขนาดของชุดข้อมูลของคุณ - นี่เป็นสิ่งสำคัญเพราะสำหรับฐานข้อมูล 1MB RTO ของคุณอาจประสบความสำเร็จได้ด้วยผลิตภัณฑ์สำรองและโซลูชันส่วนใหญ่ สำหรับฐานข้อมูล 10TB คุณจะพบว่าการสำรองข้อมูลระดับแถวเต็มไปยังเทป LTO 3 อาจไม่สามารถบรรลุ RTO ของคุณและอาจรบกวน RPO ของคุณเนื่องจากการสำรองข้อมูลเริ่มเกินกว่าหน้าต่างสำรองของคุณ คุณไม่สามารถทำ mysqldump กับชุดข้อมูลขนาดใหญ่นี้ได้อย่างแน่นอน แต่อาจจะไปกับฐานข้อมูล 1MB ได้
  4. ความสอดคล้องของฐานข้อมูล - สิ่งสุดท้ายที่สร้างความแตกต่างอย่างมากในการปรับใช้อย่างต่อเนื่องความน่าเชื่อถือของไซต์การปรับขนาดและความพร้อมใช้งานสูงเมื่อทำงานกับฐานข้อมูลคือความต้องการของคุณ มีสามประเภทพื้นฐาน: ความสอดคล้องทันทีความสอดคล้อง Just-In-Time (JIT) และความมั่นคงในที่สุด

นอกเหนือจากข้อควรพิจารณาที่สำคัญข้างต้นคุณยังต้องพิจารณาข้อกำหนดเกี่ยวกับสิทธิ์ใช้งานและการสนับสนุน (โอเพ่นซอร์สหรือแหล่งข้อมูลปิดการสนับสนุนในบ้านการสนับสนุนจากบุคคลที่สามหรือการสนับสนุนผู้ขาย) ข้อกำหนดของแอปพลิเคชัน / ภาษา แอปของคุณรวบรวมหรือไม่คุณมีสิทธิ์เข้าถึงซอร์สโค้ดหรือไม่คุณสามารถคอมไพล์ใหม่หรือให้ผู้ขายได้หรือไม่หรือใช้กับภาษาที่ตีความหรือไม่) ข้อกำหนดทางการเมือง (องค์กรของคุณเชื่อถือ Oracle เท่านั้นหรือไม่พวกเขาเกลียด Oracle ? พวกเขาไม่เชื่อถือ MySql คุณรู้สึกอย่างไรเกี่ยวกับ MariaDB หรือ Postgres?) และเอ็นจิ้นฐานข้อมูล (innoDB? MyISAM? Blackhole? NDB Cluster Spider?) และข้อกำหนดด้านประวัติศาสตร์หรือความเข้ากันได้ (เราใช้ PL / SQL มานานครึ่งปี สร้างขึ้นในเครื่องยนต์ oracle! เราจะส่งต่อไปยัง MariaDB ได้อย่างไร!?)

ทุกสิ่งเหล่านี้ (อย่างมีนัยสำคัญ) ส่งผลกระทบต่อเครื่องมือที่มีให้สำหรับคุณ

ตัวเลือกบางอย่างสำหรับการจัดการข้อมูลภายใน


หมายเหตุ: ข้อมูลต่อไปนี้จะไม่ครบถ้วนสมบูรณ์และผู้ใช้ SE อื่น ๆ ควรพูดสอดด้วยคำแนะนำเพิ่มเติม

ด้วยการพิจารณาโดยทั่วไปให้ฉันใช้เทคนิคและเทคโนโลยีบางอย่างสำหรับการพูดถึงข้างต้น ก่อนอื่นให้ถามตัวคุณเองว่าคุณจำเป็นต้องใช้ RDBMS จริง ๆ หรือไม่หรือข้อมูลที่ไม่มีโครงสร้างกับ Hadoop, CouchDB หรือแม้แต่ Object Oriented Storage (อย่างรวดเร็ว) เป็นตัวเลือก

ประการที่สองพิจารณาการค้นหาโซลูชันที่ใช้ระบบคลาวด์ สิ่งนี้ทำให้บางคนปวดหัวและส่งมอบปัญหาที่ซับซ้อนให้กับบุคคลที่มีคุณสมบัติสูง (และมีค่าใช้จ่าย) อย่างไรก็ตามในระดับคุณจะพบว่าสิ่งนี้กินเข้าไปในงบประมาณของคุณ (ผู้ให้บริการคลาวด์ทำกำไรได้ในระดับนี้และในระดับหนึ่งคุณสามารถที่จะจ้างผู้เชี่ยวชาญเหล่านี้ได้ด้วยตนเอง) หรือหากคุณทำงานภายใต้ความปลอดภัยหรือการเมือง ข้อกำหนด (อ่าน: เราไม่สามารถทำคลาวด์ได้) ให้พิจารณา NFS / FibreChannel Filer แบบผสม ไฟล์เหล่านี้ส่วนใหญ่เช่น NetApp, Pure Storage และ Tegile สนับสนุนเทคนิคการจับภาพและการโคลนตามเดลต้าซึ่งมีประโยชน์มากสำหรับ A) การสำรองข้อมูล, B) การกู้คืนการสำรองข้อมูลและ C) การสร้างการสำรองข้อมูลใหม่

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

แต่ที่ถูกกล่าวว่าผลิตภัณฑ์เหล่านี้ช่วยให้คุณสามารถถ่ายภาพที่แตกต่างกันภายใต้ฐานข้อมูลของคุณ คุณจะต้องสคริปต์ "ตารางล็อคพร้อมล็อคการอ่าน" อย่างเต็มรูปแบบบนหนึ่งในอินสแตนซ์ฐานข้อมูลของคุณ (แนะนำให้ใช้แบบอ่านอย่างเดียว) และทิ้งตำแหน่ง binlog หรือ GTID ของคุณ แต่สำหรับไฟล์เหล่านี้เมื่อคุณทำแล้วคุณจะสามารถ เพื่อใช้ snaps เหล่านี้เพื่อสร้างอินสแตนซ์ใหม่ของฐานข้อมูลของคุณ คุณจะต้องวาง binlogs ในพาร์ติชันแยกต่างหากและใส่เฉพาะข้อมูลฐานข้อมูลของคุณในพาร์ทิชันเหล่านี้ เมื่อคุณทำเช่นนั้นคุณจะสามารถโคลนพาร์ติชั่นเหล่านี้ (บน NetApps สิ่งนี้รู้ว่าเป็น " FlexClone "

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

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

เคล็ดลับเพียงอย่างเดียวที่นี่คือสิ่งนี้อาจไม่ใช่วิธีการสำรองข้อมูลเต็มรูปแบบเนื่องจาก "การสำรองข้อมูล" ยังคงอยู่ในไฟล์ของคุณ สำหรับสิ่งนี้คุณอาจต้องใช้บางสิ่งบางอย่างที่ NetApp เรียกว่า Snap Mirror ซึ่งจะสะท้อนข้อมูล (โดยใช้เทคโนโลยี rsync-style) ระหว่าง filers และแม้กระทั่ง datacenters หรือใช้วิธีการสำรองข้อมูลแบบบูรณาการบางชนิดซึ่งสามารถสำรองข้อมูลลงเทป ดิ้นโคลน

อย่างไรก็ตามสิ่งนี้มีข้อบกพร่องสำคัญหนึ่งประการ: ข้อมูลทั้งหมดของคุณ - การทดสอบและการทดสอบยังคงใช้ I / O ในตัวกรองและหัวจัดเก็บข้อมูลเดียวกัน ในการหลีกเลี่ยงปัญหานี้ให้พิจารณาสร้างอินสแตนซ์ฐานข้อมูลทาสบนไฟล์ตัวที่สองซึ่งอาจเป็นจุดเริ่มต้นสำหรับคุณทดสอบและ / หรือตัวกรอง dev หรือลองใช้ตัวควบคุมการส่งมอบ load balancer / applcation สำหรับชั้นแอปพลิเคชันของคุณ สภาพแวดล้อมการทดสอบ (และ / หรือ dev) สิ่งนี้มีประโยชน์เพิ่มเติมในการขว้างปริมาณการใช้ผลิตภัณฑ์ที่สภาพแวดล้อม QA / ทดสอบของคุณก่อนที่จะส่งเสริมการผลิตสำหรับปัญหาที่อาจไม่สังเกตเห็นได้ทันที จากนั้นคุณสามารถตรวจสอบบันทึกข้อผิดพลาดตามปริมาณการใช้งานจริงและพฤติกรรมของผู้ใช้

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

ความยืดหยุ่นและความพร้อมใช้งานสูง

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

ฉันพูดถึง JIT ทันทีและในที่สุดความสอดคล้อง นี่คือสิ่งที่เอ็นจิ้น RDBMS ที่หลากหลายเข้ามาความสอดคล้องในที่สุดนั้นค่อนข้างง่ายโดยเพียงกำหนดค่าการจำลองแบบอะซิงโครนัสแบบวงกลม สิ่งนี้สามารถทำให้เกิดการชนกันอย่างไรก็ตาม * (ถ้าแอปพลิเคชันของคุณเลเยอร์อัปเดตข้อมูลในด้านหนึ่งของคลัสเตอร์และอีกด้านหนึ่งของคลัสเตอร์ก่อนที่การจำลองจะเสร็จสมบูรณ์?) เพื่อความสอดคล้องทันทีให้ดูที่ Galera คลัสเตอร์ ทำให้เกิดปัญหาความยืดหยุ่น (คุณจะทำซ้ำไปยังไซต์ Disaster Recovery หรือโหลดบาลานซ์ทางภูมิศาสตร์โดยไม่เกิดความล่าช้าอย่างมีนัยสำคัญเนื่องจากความล่าช้าในการเลเยอร์เครือข่าย?) คุณยังสามารถดูว่าคุณสามารถทำซ้ำแบบซิงโครนัสภายในศูนย์ข้อมูล แต่นี่ดูเหมือนจะเลวร้ายที่สุดของทั้งสองโลก

อย่างไรก็ตามโดยทั่วไป Poeple ส่วนใหญ่ไม่ต้องการการจำลองแบบซิงโครนัสอย่างสมบูรณ์ - โดยปกติจะต้องการเฉพาะสภาพแวดล้อมการเขียนสูงที่เฉพาะเจาะจง (และแปลกใหม่) ที่จำเป็นต้องใช้ multi-master พร้อมกับการแบ่งตาราง แอพส่วนใหญ่สามารถจัดการกับ Just-In-Time ที่สอดคล้องกันโดยใช้พร็อกซีฐานข้อมูล ตัวอย่างเช่นScaleArcจะตรวจสอบสถานะการจำลองแบบและติดตามการเขียนที่เพิ่งไป (เพื่อส่งคำขออ่าน subesquent จนกว่าการจำลองแบบจะเกิดขึ้น) เพื่อให้ความสอดคล้อง Just-In-Time และลักษณะที่ปรากฏของความสอดคล้องของฐานข้อมูล ScaleArc สามารถใช้งานร่วมกับ Postgres, MySQL, MariaDB, Oracle และ MSSQL และสามารถใช้นิพจน์ทั่วไปเพื่อสร้าง / แบ่งพาร์ติชันฐานข้อมูลของคุณสำหรับแอปพลิเคชันที่ไม่สามารถใช้คีย์ shard ได้ นอกจากนี้ยังมี REST API ที่แข็งแกร่งสำหรับซอฟต์แวร์การจัดการการกำหนดค่าของคุณเพื่อโต้ตอบกับ - และทีมสนับสนุนของพวกเขาโดดเด่น

ในทำนองเดียวกันคุณอาจต้องการพิจารณาทางเลือกฟรีMaxScale ที่พัฒนาโดยทีม MariaDB สำหรับ MariaDB มันขาด GUI และคุณสมบัติการแคชบางส่วนของ ScaleArc อย่างไรก็ตาม

ในที่สุดผ้าของ MySQL (และในคลัสเตอร์ของ MySQL เท่านั้น - ถ้าคุณสามารถจ่ายได้มาก RAM) เป็นศักยภาพอื่น ๆ - โดยเฉพาะอย่างยิ่งกับพร็อกซีใหม่ของ MySQL สิ่งนี้สามารถจัดเตรียมความสามารถในการปรับขนาดและความซ้ำซ้อนให้กับสภาพแวดล้อมของคุณ

Postgres และ Oracle ควรมีคุณสมบัติการจำลองแบบและการแบ่งส่วนที่คุณต้องการ แต่ ScaleArc จะจับคู่ได้ดีถ้าคุณต้องการพร็อกซี

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


6

เราใช้Flywayในที่ทำงานเพื่อจัดการ schema ของ Postgres ในแอพและPillarสำหรับจัดการ schema ของ Cassandra เราพบว่ามันดีที่สุดถ้าแอพจัดการสคีมาของตัวเอง

เรามีประสบการณ์ที่น่ากลัวมีจัดการสกีมาก่อนปพลิเคชันที่มีการจัดการสกีมาของตัวเอง


6

ฉันจะเถียงเครื่องมือเพียงอย่างเดียวจะไม่ช่วยถ้าคุณเปลี่ยนความรับผิดชอบสคีมาที่ทีมแอปพลิเคชัน

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

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

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


4

เราใช้liquibaseในการทำงานของเราและฉันจะพูดอย่างนั้น นอกจากนี้ยังใช้โดยเครื่องมือ QA QASymphony ของเรา

เราใช้มันกับฐานข้อมูล MSSQL และ Oracle ภายในและ QASymphony ใช้ / ได้ใช้กับทั้งอินสแตนซ์ postgres + mysql


4

ในการตอบคำถามนี้ในบริบทของสภาพแวดล้อมเมนเฟรมและเฉพาะกับฐานข้อมูล DB2 โดยทั่วไปจะมีทางเลือก 2 ตัว (ไม่ใช่ราคาถูก ... ) เพื่อเลือกจาก:

  • การจัดการวัตถุสำหรับ DB2จาก BMC นี่คือรายละเอียดบางอย่างเกี่ยวกับมัน (อ้างจากหน้าเชื่อมโยง):

    การเปลี่ยนแปลงวัตถุในฐานข้อมูลของคุณหรือแม้แต่เพียงแค่ดำเนินการตามภารกิจการดูแลระบบตามปกติอาจเป็นงานที่ยากและเสี่ยง มีงานนับไม่ถ้วนที่ต้องติดตามและความผิดพลาดครั้งเดียวอาจส่งผลกระทบร้ายแรงต่อความพร้อมใช้งานและความสมบูรณ์ของข้อมูล คุณสามารถลดความพยายามและความเสี่ยงด้วย BMC Object Administration สำหรับ DB2 11 ซึ่งเป็นชุดเครื่องมือที่จะช่วยคุณ:

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

    มันลดความซับซ้อนของงานที่ซับซ้อนที่เกี่ยวข้องกับการจัดการวัตถุและสคีมา DB2 อย่างปลอดภัยตลอดวงจรชีวิตของแอปพลิเคชันโดยมีผลกระทบน้อยที่สุดต่อความพร้อมใช้งาน

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

บูรณาการกับเครื่องมือ SCM

เมื่อไม่นานมานี้ฉันถูกลูกค้าท้าทายให้ "รวม" ทางเลือก BMC ในวงจรชีวิต SCM (จัดการโดยSERENA ChangeMan ZMF ) แนวคิดเบื้องหลังการบูรณาการดังกล่าวคือ " พิจารณา DB2 DBA-team ของเรา (ทำสิ่งที่มี DDL) เป็นกรณีพิเศษของทีมพัฒนาโดยไม่ได้ตั้งใจโดยใช้ตัวแก้ไขแปลกใหม่ (เครื่องมือ BMC) เพื่อสร้างรหัส (DDL) ที่จะโยกย้าย "

เกี่ยวกับความท้าทาย(แต่จริง !) เกี่ยวกับการรวมนี้ก็เพื่ออำนวยความสะดวก "ความสามารถในการรีสตาร์ท" ซึ่งเป็นหนึ่งในประโยชน์หลักของเครื่องมือ DBA ดังกล่าว:

  • ความสามารถในการรีสตาร์ทหมายความว่าเมื่อเครื่องมือ DBA นี้กำลังทำสิ่งนั้น (ผ่านงานที่ใช้เวลานานบางครั้งตามลักษณะของงานที่ต้องทำให้เสร็จ) อาจเกิดสิ่งที่ไม่คาดคิดขึ้นได้ (การหยุดชะงักเวลาหยุดทำงานผิดปกติ ฯลฯ )

  • หากสิ่งเหล่านี้เกิดขึ้นและคุณไม่ต้องการรีสตาร์ทจากการสำรองข้อมูลของคุณ (ก่อนที่จะเริ่มต้น) เครื่องมือ DBA คาดว่าคุณจะเริ่มต้นใหม่จากจุด (ตรวจสอบ -) ซึ่งสิ่งต่าง ๆ เริ่มผิดพลาด (และจากที่ใด คุณต้องการให้ทุกอย่างดำเนินการซ้ำ)

  • ยังดีกว่า (หรือฉันควรจะพูดว่า "ยิ่งแย่ลง"?) ถ้า newbee ไปยังเครื่องมือ DBA ไม่รู้จริง ๆ ว่าจะเริ่มต้นใหม่จากจุดตรวจสอบดังกล่าวได้อย่างไรและลองอีกครั้ง (ตั้งแต่ต้น) จากนั้นเครื่องมือ DBA จะล้มเหลว ด้วยข้อผิดพลาดของผู้ใช้บางประเภท และสิ่งนี้มีข้อบ่งชี้บางอย่างเช่น " จนกว่าคุณจะบอกฉันว่าคุณต้องการให้ฉันดำเนินการต่อหลังจากจุดสุดท้ายของความล้มเหลวฉันปฏิเสธที่จะทำอะไร (เพื่อไม่ทำให้สิ่งเลวร้ายลง) "

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

โบนัส: หลังจากการรวม SCM ของทางเลือก BMC เสร็จสมบูรณ์ลูกค้าจึงตัดสินใจเปลี่ยนเครื่องมือ DBA เป็นทางเลือกของ IBM และแม้ว่าตัวเลือกทั้งสองจะดูไม่เหมือนกัน แต่ผลกระทบของการรวม SCM นั้นค่อนข้างน้อย: เพียงแค่การแทนที่ (ในการปรับแต่ง SCM ที่ใช้ซ้ำได้บางส่วน) การโทรไปยังทางเลือก BMC โดยการเรียกเทียบเท่ากับ IBM ทางเลือก ... ซึ่ง (ใช้ DevOps คำศัพท์) ได้ดำเนินการโดย / คุณลักษณะสลับ

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