การจำลองแบบ MySQL เร็วแค่ไหน?


19

ฉันกำลังพิจารณาตั้งค่าการจำลองฐานข้อมูล mysql ของเราเพื่อให้สามารถมีทาสท้องถิ่นในสำนักงานสาขาของเราแต่ละแห่งในขณะที่มีต้นแบบในสำนักงานใหญ่เพื่อปรับปรุงประสิทธิภาพการใช้งานแอปพลิเคชัน (อย่างมีนัยสำคัญ) ที่สำนักงานสาขาของเรา

ตัวฐานข้อมูลนั้นไม่ใหญ่มาก (<1gb) แต่ฉันสงสัยว่า; เมื่อพิจารณาจากการอัปเดตสูงสุด 200-300 รายการ / นาที: การจำลองแบบรวดเร็วแค่ไหน (สมมติว่าก่อนอื่นการเชื่อมต่อ dsl ทั่วไป 5mb เร็วขึ้นถ้าจำเป็น - พยายามรักษาต้นทุนให้ต่ำที่สุดเท่าที่จะทำได้ แต่มีเงินมากขึ้น)

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

หมายเหตุ:

  • ฉันกำลังคิดการตั้งค่าต้นแบบ 1, 2 ทาส (2 สำนักงานสาขา) ในเอกสารที่นี่ยกเว้นว่าเป็นแอปไม่ใช่เว็บไคลเอ็นต์
  • การอัปเดตใด ๆ ที่ทำบนต้นแบบจำเป็นต้องทำซ้ำกับทาสอื่น ๆ ใน <10 นาที
  • ทั้งหมดนี้ถือว่าฉันสามารถรับ ORM ของเรา (DevExpress XPO) มีความสุขกับแนวคิดของการอ่านจากทาสและการเขียนถึงต้นแบบ

คำตอบ:


21

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

การจำลองแบบหลายหลักทำสิ่งเดียวกัน แต่ในทั้งสองทิศทาง

การคำนวณพื้นฐานบางอย่างจะช่วยคุณในการกำหนดความต้องการแบนด์วิดท์ที่ดีขึ้น

Average transaction size * number of slaves * updates/minute = bandwidth needed

หวังว่านี่จะช่วยได้


4

การจำลองแบบทางด้านทาสถูกจัดการโดยสองเธรดอิสระ

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

เวลาแฝงของการจำลองแบบถูก จำกัด โดย IO อันดับแรก IO บนฐานข้อมูล Slave เพื่อใช้ธุรกรรมจากบันทึกการถ่ายทอด (ซึ่งอาจเกี่ยวข้องกับการสืบค้น SQL ที่ซับซ้อน) และประการที่สองโดย IO บนต้นแบบเพื่ออ่าน binlog และส่งไปยัง Slave แต่ละรายการ

การเรพลิเคท MySQL เพิ่มความสามารถในการสืบค้นข้อมูล แต่ไม่เพิ่มประสิทธิภาพการเขียนเคียวรีซึ่งจะเพิ่มความเร็วของ IO ที่จะถูกฟลัชไปยัง binlog ทั้งในมาสเตอร์และทาส


3

การจำลองแบบใน MySQL เป็นสวยรวดเร็วในการรับข้อมูลเพื่อทาส (เร็วกว่าที่คุณจะสามารถเรียกใช้UPDATEในต้นแบบและสวิทช์ไปที่หน้าต่างอีกครั้งเพื่อให้ทำงานSELECTบนทาสถ้า(และเฉพาะในกรณีที่) การเชื่อมต่อเครือข่ายหมดและทุกอย่างทำงานได้แล้ว การเชื่อมต่อ DSL ระดับใดก็ได้ที่ดีสำหรับกรณีทั่วไปของการสืบค้นขนาดเล็กปกติของคุณ แต่การแทรก / อัปเดตขนาดใหญ่อาจใช้เวลาสักครู่ในการคัดลอกและการซิงโครไนซ์อีกครั้งในกรณีที่มีการคัดลอกข้อมูลซ้ำ แต่น่าเสียดายที่) จะใช้เวลาสักครู่ (คัดลอกฐานข้อมูลทั้งหมดของคุณจากต้นแบบอีกครั้ง) มีเทคนิคในการ จำกัด ผลกระทบของการซิงโครไนซ์ใหม่บนต้นแบบของคุณเช่นการวาง MySQL บน LVM เพื่อให้คุณสามารถล็อค / สแนปชอตได้อย่างรวดเร็วและซิงค์เนื้อหาสแนปช็อตกับทาส แต่ในที่สุด Resync จะดูด

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