MongoDB MMAPv1 vs เอ็นจิ้นการเก็บข้อมูล WiredTiger


25

ใน mongoDB3 ปรากฏเครื่องมือจัดเก็บข้อมูลใหม่: WiredTiger แต่MMAPv1ยังคงเป็นตัวเลือกเริ่มต้นใน Mongo

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

ในความเป็นจริงในขณะที่ MMAPv1 เป็นเอ็นจิ้นเริ่มต้น WiredTiger ดูเหมือนจะดีกว่าในเกือบทุกสาขา มันมีคุณสมบัติเช่นเดียวกับ MMAPv1 บวก:

  • ประสิทธิภาพการเขียนที่ดีขึ้น
  • การทำงานพร้อมกันของระดับเอกสาร
  • การบีบอัด
  • ภาพรวมและระบบจุดตรวจ

ฉันพบตารางเปรียบเทียบในบล็อกของ MongoDB :

การเปรียบเทียบ WiredTiger และ MMAPv1

ดังนั้นถ้าคุณอยู่บน Solaris มีเหตุผลที่จะไม่เลือก WiredTiger หรือไม่?


แก้ไข

ที่นี่สองวิดีโอที่อธิบายในรายละเอียด internals ของ WiredTigerและMMAPv1


ทุกคนที่นี่ ... คุณสามารถเยี่ยมชมblog.clevertap.com/...สำหรับคำอธิบายที่ดีมากในเรื่อง
therealprashant

คำตอบ:


26

โดยส่วนตัวแล้วฉันชอบเอ็นจิ้นการจัดเก็บ mmapv1 ตอนนี้ด้วยเหตุผลสามประการ

เหตุผลที่ 1: ครบกำหนด

มันไม่ใช่ว่า WiredTiger ยังไม่บรรลุนิติภาวะ แต่ mmapv1 นั้นเป็นที่เข้าใจกันดีและมีการทดสอบการต่อสู้ทั้งทางขึ้นและลงกลับไปกลับมาและอื่น ๆ WiredTiger มีปัญหาร้ายแรงบางอย่าง (ดูhttp://jira.mongodb.comเพื่อดูรายละเอียด) ค่อนข้างเร็วและฉันไม่เต็มใจที่จะให้ลูกค้าของฉันค้นหาต่อไปอย่างยากลำบาก

เหตุผลที่ 2: คุณสมบัติ

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

ผมไม่เห็นว่าจะได้รับประโยชน์มากจากพวกเขามีคุณสมบัติอื่น ๆ ทั่วไป แต่ขณะนี้

เหตุผลที่ 3: ต้นทุนการเป็นเจ้าของทั้งหมด

สำหรับโครงการใหม่ WT อาจใช้ได้โดยเฉพาะอย่างยิ่งตั้งแต่ 3.2 เนื่องจากไม่มีการใช้งานต่อไปนี้

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

ข้อสรุป

ปัจจัยทั้งหมดข้างต้นทำให้ฉันได้ข้อสรุปว่าอย่าใช้ WT เลย ในขณะนี้


ปรับปรุง

โพสต์นี้เก่าแล้วบางเดือนจึงสมควรได้รับการอัปเดต

เมื่อครบกําหนด

ความคิดเห็นดั้งเดิมของฉันเกี่ยวกับวุฒิภาวะนั้นล้าสมัย WiredTiger ยังไม่มีปัญหาสำคัญใด ๆ ในขณะนี้และได้กลายเป็นเอ็นจิ้นการจัดเก็บเริ่มต้น ณ MongoDB 3.2

เกี่ยวกับคุณสมบัติ

ความคิดเห็นดั้งเดิมของฉันยังคงมีความถูกต้องอยู่บ้าง imho

การอัด

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

การเข้ารหัสลับ

MongoDB 3.2 Enterprise นำเสนอความสามารถในการเข้ารหัสที่เก็บสาย WiredTiger สำหรับข้อมูลที่มีความต้องการด้านความปลอดภัยที่เพิ่มขึ้นนี่เป็นคุณสมบัตินักฆ่าและทำให้ WT เป็นเครื่องมือจัดเก็บข้อมูลตัวเดียวที่เลือกได้ทั้งในทางเทคนิค (MMAPv1 ไม่รองรับการเข้ารหัส) และแนวคิด นอกจากความเป็นไปได้ของพาร์ติชั่นดิสก์ที่เข้ารหัสแล้วถึงแม้ว่าคุณอาจไม่มีตัวเลือกนั้นในบางสภาพแวดล้อม

การล็อคระดับเอกสาร

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

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

เกี่ยวกับต้นทุนการเป็นเจ้าของ

การย้ายข้อมูลยังคงมีราคาแพง อย่างไรก็ตามเมื่อพิจารณาถึงการเปลี่ยนแปลงในวุฒิภาวะและมุมมองที่เปลี่ยนแปลงเกี่ยวกับคุณลักษณะต่างๆการโอนย้ายอาจคุ้มค่ากับการลงทุนหาก:

  • คุณต้องเข้ารหัส (Enterprise Edition เท่านั้น!)
  • ประสิทธิภาพไม่ใช่ความกังวลหลักของคุณแน่นอนและคุณสามารถประหยัดเงินในระยะยาว (คำนวณอย่างระมัดระวัง) โดยใช้การบีบอัด
  • คุณมีกระบวนการจำนวนมากที่เขียนพร้อมกันเนื่องจากการเพิ่มประสิทธิภาพอาจช่วยให้คุณปรับขนาดแนวตั้งหรือแนวนอนได้

อัปเดตข้อสรุป

สำหรับโครงการใหม่ฉันใช้ WiredTiger ทันที เนื่องจากการโยกย้ายจากที่บีบอัดไปยังที่เก็บข้อมูล WiredTiger ที่ไม่มีการบีบอัดนั้นค่อนข้างง่ายฉันจึงเริ่มต้นด้วยการบีบอัดเพื่อเพิ่มประสิทธิภาพการใช้งาน CPU หากการบีบอัดมีผลกระทบต่อประสิทธิภาพการทำงานหรือ UX ที่เห็นได้ชัดเจนฉันจะย้ายไปยัง WiredTiger ที่ไม่มีการบีบอัด

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

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


ขอบคุณ Markus สำหรับผู้ประกาศข่าวของคุณ ฉันเข้าใจข้อโต้แย้งของคุณ คุณจะแนะนำให้ตั้งค่าเริ่มต้นกลับเป็น MMAPv1 สำหรับโครงการใหม่หรือไม่? ฉันหมายถึงหากประสิทธิภาพเป็นสิ่งที่น่ากังวลการบีบอัดอาจปิดการใช้งานโดยสิ้นเชิง พื้นที่ดิสก์มีราคาถูก แต่การบีบอัดอาจช่วยให้ชุดทำงานพอดีกับ RAM …และทำให้สมบูรณ์ หรือฉันผิด
Buzut

1
เท่าที่ฉันรู้การบีบอัดจะถูกนำไปใช้กับไฟล์ข้อมูลเท่านั้น สำหรับโครงการใหม่ให้ฉันทำแบบนั้น: ฉันจะขอการตัดสินใจการจัดการแสดงข้อดีและข้อเสีย ฉันใช้ WT ในโครงการของฉันเป็นการส่วนตัวและยังไม่พบปัญหา แต่อาจมีปัจจัยอื่นเช่น SLA (ซึ่งฉันสามารถคำนวณได้ค่อนข้างดีจากประสบการณ์กับ mmapv1) งบประมาณที่ จำกัด (ซึ่งเรียกว่า WT เพื่อบีบอัดให้ ประหยัดพื้นที่ดิสก์) และปัจจัยอื่น ๆ อีกมากมาย การชั่งน้ำหนักความเสี่ยงและโอกาสไม่ใช่การตัดสินใจของ DBA DBA จะต้องให้ข้อมูลที่จำเป็นสำหรับการโทร
Markus W Mahlberg

1
บทความนี้ดูเหมือนจะบ่งบอกว่าวิธีการจัดเก็บดัชนีเป็นประโยชน์อย่างมากเพราะสามารถลดพื้นที่ที่ดัชนีของคุณใช้เวลาถึง 10 เท่า: ilearnasigoalong.blogspot.com/2015/03/ … พื้นที่ดิสก์มีราคาถูก แต่หน่วยความจำไม่ได้
BT

ฉันสับสนเกี่ยวกับประเด็นของคุณในฟีเจอร์คุณจะบอกว่ามีฟีเจอร์ MMAPv1 ที่ WiredTiger ใช้หรือไม่ มันจะดีถ้าส่วนนั้นชัดเจนขึ้นเล็กน้อย
BT

@ BT ไม่เลย สิ่งที่ฉันพยายามจะพูดคือ WT มีคุณสมบัติเจ๋ง ๆ บางอย่างซึ่งสำหรับกรณีการใช้งานบางอย่างอาจมีประโยชน์ แต่โดยทั่วไปไม่ได้ ฉันชอบเอ็นจิ้นการจัดเก็บข้อมูลที่ผ่านการทดสอบการต่อสู้มากกว่าคมตัดเมื่อพูดถึงการจัดเก็บข้อมูล ตามบทความ: ใช่เป็นไปได้ด้วยการบีบอัดคำนำหน้าเพื่อบันทึก RAM และนี่อาจเป็นความคิดที่ดีถ้าไม่มีข้อกังวลอื่น ๆ ลองนึกภาพคุณอาจเชื่อถือได้สำหรับปัญหาการสูญหายของข้อมูลหรือประสิทธิภาพ
Markus W Mahlberg

5

สองเซ็นต์ของฉัน:

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

ในระหว่างการดำเนินการเขียนในขณะที่บันทึกเจอร์นัลยังคงอยู่ในบัฟเฟอร์ WiredTiger การอัพเดตอาจสูญหายได้หลังจากการปิด mongod อย่างหนัก

การทำเจอร์นัลในMMAPv1เขียนการเปลี่ยนแปลงในไฟล์เจอร์นัลบนดิสก์

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


4

เราเปลี่ยนไปใช้ WiredTiger จาก MMAPv1 เพื่อล่อลวงประสิทธิภาพที่เพิ่มขึ้น 7 เท่าเป็น 10 เท่า เราต้องเปลี่ยนกลับเป็น MMAPv1 เนื่องจาก MongoDB จะล็อคขึ้นเมื่อแคช WiredTiger ตี 100% เราได้บันทึกประสบการณ์ของเราที่นี่ - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/


2
เขียนดี Kinda เตือนให้ฉันนึกถึง Uber จาก MySQL ไปจนถึง PostgreSQL ในปี 2013 จากนั้นกลับไปที่ MySQL ในเดือนมิถุนายน 2559
RolandoMySQLDBA

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