ค้นหาคำแนะนำเกี่ยวกับวิธีการรวมข้อมูลจากฐานข้อมูลลูกค้ากว่า 100+ เข้าสู่ฐานข้อมูลการรายงานจากส่วนกลาง


10

ฉันเป็นผู้พัฒนา SQL (ไม่ใช่ DBA หรือสถาปนิก) สำหรับ บริษัท SaaS (มีพนักงานประมาณ 50 คน) ฉันได้รับมอบหมายให้หาวิธี:

  1. ลดการรายงานการปฏิบัติงานจากฐานข้อมูล OLTP กว่า 100 รายการของเรา
  2. อนุญาตให้รายงานเหล่านั้นทำงานกับข้อมูลจากฐานข้อมูลลูกค้าหลาย ๆ
  3. วางตำแหน่ง บริษัท ของเราเพื่อมอบโซลูชันการวิเคราะห์ที่เพิ่มขึ้นในอนาคต

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

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

เนื่องจากข้อ จำกัด ด้านราคาโซลูชันของเราต้องทำงานภายใน SQL Server Standard Edition นอกจากนี้วิธีแก้ปัญหาจะต้องสมเหตุสมผลในการสนับสนุน / ดูแลรักษาภายในองค์กรขนาดเล็กของเรา

การกำหนดค่าพื้นฐาน:

ขณะนี้เรามีฐานข้อมูลลูกค้ากว่า 100 รายส่วนใหญ่ติดตั้งบนเซิร์ฟเวอร์ SQL ที่ศูนย์ข้อมูลของเรา แต่มีบางฐานข้อมูลที่ติดตั้งบนเซิร์ฟเวอร์ลูกค้าภายในศูนย์ข้อมูลของพวกเขาที่เราสามารถเข้าถึงจากระยะไกลได้ นี่คือฐานข้อมูล SQL Server 2008 R2 ทั้งหมด แต่เราวางแผนที่จะอัปเกรดเป็น SQL 2016 ในไม่ช้า

เราใช้โครงการฐานข้อมูลและ dacpacs เพื่อให้แน่ใจว่าสคีมานั้นเหมือนกันในฐานข้อมูลลูกค้าทั้งหมดที่จะรวมเข้าด้วยกัน อย่างไรก็ตามเนื่องจากเราไม่ได้บังคับให้ลูกค้าทุกคนอัพเกรดเป็นเวอร์ชั่นใหม่ในเวลาเดียวกันความแตกต่างของสคีมาจึงเป็นไปได้ระหว่างการอัพเกรด โซลูชันต้องมีความยืดหยุ่นเพียงพอที่จะไม่แตกหากไคลเอ็นต์ A อยู่ในซอฟต์แวร์เวอร์ชัน 1.0 และไคลเอ็นต์ B เป็นเวอร์ชัน 1.1

ขณะนี้รายงานการปฏิบัติงานจะเรียกใช้โดยตรงจากฐานข้อมูล OLTP ของลูกค้าแต่ละราย เรากังวลเกี่ยวกับผลกระทบที่จะเกิดขึ้นกับประสิทธิภาพการทำงานของแอปพลิเคชันหากเราไม่ถ่ายข้อมูล

ข้อกำหนดระดับสูง:

ลูกค้าของเราเป็นแผนกการประมวลผลที่ปราศจากเชื้อในโรงพยาบาล (SPD's) ที่ต้องการรายงานที่ทันสมัยเกี่ยวกับสิ่งที่พวกเขาได้ดำเนินการจนถึงปัจจุบันที่มีสินค้าคงคลัง ฯลฯ SPD ของกระบวนการสินค้าคงคลังตลอดเวลารวมถึงวันหยุดสุดสัปดาห์และวันหยุด เนื่องจากหนึ่งในวัตถุประสงค์หลักของความพยายามนี้คือเพื่อสนับสนุนการรายงานการดำเนินงานที่ดีขึ้นเราต้องการให้ข้อมูลใกล้เคียงกับเวลาจริงมากที่สุดเพื่อตอบสนองความต้องการของลูกค้าต่อไป

ขณะนี้เรามี SPD บางส่วนในฐานข้อมูลแยกต่างหากซึ่งเป็นส่วนหนึ่งของระบบโรงพยาบาลเดียวกัน ลูกค้าเหล่านี้ต้องการความสามารถในการรายงานกับ SPD ทั้งหมดในระบบของพวกเขา

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

ความคิดจนถึงตอนนี้:

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

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

การใช้บริการโบรกเกอร์ SQL เวลาแฝงอาจไม่แน่นอนถ้าคิวไม่สามารถติดตามจำนวนข้อความที่จะดำเนินการ

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

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

คำแนะนำหรือทิศทางที่คุณยินดีที่จะให้จะได้รับการชื่นชมอย่างมาก


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

1
ฉันจะผสม HTAP เข้าด้วยกัน en.m.wikipedia.org/wiki/Hybrid_Transactional/… BIML และ SSIS สำหรับการเติมร้านค้าทั่วไป
Michael Green

@Grimaldi คุณจะแนะนำให้ใช้นายหน้าบริการ SQL เพื่อใช้งานการประมวลผล / คิวข้อความหรือเหตุการณ์เทคโนโลยีการส่งข้อความอื่น ๆ หรือไม่?
bperry

ขอบคุณสำหรับคำแนะนำ @MichaelGreen โดยทั่วไปดูเหมือนว่า HTAP จะช่วยให้เราสามารถใช้ฐานข้อมูลที่มีอยู่ของเราสำหรับทั้ง OLTP และ OLAP โดยการเพิ่มดัชนี columnstore ที่ไม่ใช่คลัสเตอร์ (NCCI) ลงในตารางของเรา รายงานแบบสอบถามใช้ NCCI เพื่อไม่ให้รบกวนการทำงานของธุรกรรม SQL 2016 มีการสนับสนุน HTAP ใน Standard Edition (SE) แต่ดูเหมือนว่าแคชของคอลัมน์ที่เก็บจะถูก จำกัด ที่ 32GB ในอินสแตนซ์ SQL ทั้งหมด นี่อาจเป็นปัญหาสำหรับเราเนื่องจากเรามีฐานข้อมูลหลายสิบรายการในอินสแตนซ์เดียวกัน microsoft.com/en-us/sql-server/sql-server-2016-editions
bperry

1
ใช่ columnstore แต่อยู่ในหน่วยความจำเช่นกันถ้าข้อมูลจำเพาะเซิร์ฟเวอร์ของคุณอนุญาตให้คุณไปที่นั่น ฉันได้ยินสุนิล Agarwal คุยเรื่องนี้เมื่อเร็ว ๆ นี้ กฎของหัวแม่มือของ MS นั้นลดลงประมาณ 3% ของ OLTP เพื่อประโยชน์ของการรายงานเวลาแฝงที่เป็นศูนย์ น่าเศร้าที่ไม่มีอาหารกลางวันฟรี คุณสามารถสร้างอินสแตนซ์ใหม่เพื่อเก็บฐานข้อมูลการรายงานหรือคุณสามารถสร้างอินสแตนซ์ใหม่เพื่อให้มีพื้นที่เพียงพอสำหรับรองรับ HTAP ฉันไม่สนับสนุนรูปแบบนี้ มันอาจไม่ทำงานสำหรับคุณ แค่อยากทำให้คุณรู้ตัวว่ามันมีอยู่จริง
Michael Green

คำตอบ:


1

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

ใช่. คุณสามารถโฮสต์ฐานข้อมูลสมาชิกได้หลายอินสแตนซ์เดียวจากนั้นทำการค้นหาข้ามฐานข้อมูลเหล่านั้นด้วยมุมมองหรือโหลดลงในฐานข้อมูลรวม


มีวิธีที่สง่างามกว่านี้ในการตั้งค่ามุมมองเหล่านั้นนอกเหนือจากสิ่งที่ต้องการ ... เลือก Field1, Field2, Field3 จาก [Database1]. [schema]. [TableName] UNION ALL SELECT ฟิลด์ 1, Field2, Field3 FROM [Database2]. ]. [TableName]
bperry

1

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

  1. เพิ่มอีกหนึ่งคอลัมน์เช่น server_id ด้วยค่าเริ่มต้นเช่น 1,2,3 เป็นต้นไปและทำให้เป็นคีย์หลักแบบรวม

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

ป้อนคำอธิบายรูปภาพที่นี่

http://www.sqlrepl.com/sql-server/central-subscriber-model-explained/


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

ฉันไม่ได้ใช้ 'อัปเดตผู้เผยแพร่' ฉันแบ่งฐานข้อมูลออกเป็นสองส่วนเช่น (การจำลองแบบสองประเภท) บางส่วนของตารางในผู้เผยแพร่รายละเอียด (Publisher ไปยังผู้สมัครสมาชิกจากส่วนกลาง) และบางคนเป็นผู้เผยแพร่หลัก . ผู้ใช้ที่เป็นศูนย์กลางของฉันยังเป็นส่วนหนึ่งของกลุ่ม availibality AlwaysOn เพื่อให้แบบจำลองที่สองของฉันทำงานเป็นเซิร์ฟเวอร์รายงาน
Gulrez Khan

ให้ฉันแน่ใจว่าฉันเข้าใจทางออกของคุณ สมมติว่าผู้เผยแพร่ A อยู่ในเวอร์ชัน 1 และ Publisher B เป็นเวอร์ชัน 2 1) คุณได้ปิดการจำลองแบบการเปลี่ยนแปลงสคีมาของทั้งสองผู้เผยแพร่โฆษณา (โดยใช้ replicate_ddl = 0 เมื่อติดตั้ง) 2) เวอร์ชัน 2 มีคอลัมน์ใหม่ดังนั้นคุณจะเพิ่มด้วยตนเองที่ผู้สมัครสมาชิกส่วนกลาง 3) ที่ Publisher B (อัปเกรด) คุณจะต้องเพิ่มคอลัมน์ใหม่ลงในการจำลองแบบด้วยตนเอง (โดยใช้ sp_articlecolumn) ไม่มีการเปลี่ยนแปลงใด ๆ ที่ Publisher A. สิ่งนี้จะช่วยให้ผู้เผยแพร่ทั้งสองทำการเรพลิเคตไปยังผู้สมัครสมาชิกส่วนกลางโดยไม่หยุดการทำซ้ำ
bperry

ดูลิงค์ด้านล่าง .. dba.stackexchange.com/questions/142449/…
Gulrez Khan

โปรดดูสิ่งนี้ .. dba.stackexchange.com/questions/146070/…
Gulrez Khan

1

สถาปัตยกรรมที่เป็นไปได้หนึ่งอย่าง:

พิจารณาการรายงานตามโซลูชันคลังข้อมูล

โดยทั่วไปคลังข้อมูลคือ DB ที่มีสคีมาที่แสดงชุดย่อยที่จำเป็นของระบบต้นทาง AdventureWorks และ AdventureworksDW แสดงให้เห็นถึงการสร้างแบบจำลองนั้น

ถัดไป ETL: การย้ายข้อมูลจากแหล่งข้อมูลไปยังคลังข้อมูล

การนำไปปฏิบัติที่เป็นไปได้ที่นี่คือการใช้การติดตามการเปลี่ยนแปลง

ประการแรกหนึ่งสามารถใช้มุมมองที่เป็นรุ่นเฉพาะในสิ่งที่พวกเขาใช้ แต่ในแง่ของสิ่งที่พวกเขากลับมาเป็นชุด เช่นถ้า Person.Gender มีอยู่ในเวอร์ชัน 2 แต่ไม่ใช่ในเวอร์ชัน 1 มุมมองบุคคลสำหรับเวอร์ชันหนึ่งสามารถส่งคืนพูดเป็นโมฆะสำหรับเวอร์ชัน 1

สำหรับผู้บริโภคคลังข้อมูลที่อ่านมุมมองเพียงอย่างเดียวข้อมูลจะมีรูปทรงเหมือนกัน

การติดตามการเปลี่ยนแปลงเป็นวิธีที่มีน้ำหนักเบาในการพิจารณาว่าข้อมูลใดที่ต้องการเปลี่ยนแปลงในการรีเฟรช

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

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

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

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