Mnesia มีข้อได้เปรียบอะไรบ้างเกี่ยวกับการติดตั้งฐานข้อมูล SQL ที่สำคัญและมีความแตกต่างกันอย่างไร?
ฉันสามารถใช้ฐานข้อมูลเพื่อเก็บข้อมูลจำนวนมหาศาลได้โดยไม่ทำให้ประสิทธิภาพเสื่อมลงอย่างเห็นได้ชัดหรือไม่?
Mnesia มีข้อได้เปรียบอะไรบ้างเกี่ยวกับการติดตั้งฐานข้อมูล SQL ที่สำคัญและมีความแตกต่างกันอย่างไร?
ฉันสามารถใช้ฐานข้อมูลเพื่อเก็บข้อมูลจำนวนมหาศาลได้โดยไม่ทำให้ประสิทธิภาพเสื่อมลงอย่างเห็นได้ชัดหรือไม่?
คำตอบ:
ขออภัยที่มาสายสำหรับปาร์ตี้ :) นี่คือคำตอบของฉันตามการใช้ Mnesia ตั้งแต่ปี 1996 และเทคโนโลยีฐานข้อมูลอื่น ๆ นับตั้งแต่ปี 1988
Mnesia และ MySQL เป็นสัตว์ที่แตกต่างกันและสิ่งที่ดีที่สุดขึ้นอยู่กับว่าคุณตั้งใจจะใช้มันอย่างไร
หากแอปพลิเคชันของคุณเขียนขึ้นใน Erlang Mnesia ช่วยให้คุณเก็บข้อมูลในพื้นที่หน่วยความจำเดียวกับแอปพลิเคชันของคุณซึ่งหมายความว่าคุณสามารถดึงข้อมูลวัตถุเดียวได้อย่างรวดเร็วเพียงไม่กี่ไมโครวินาที สิ่งนี้เป็นไปไม่ได้ใน MySQL เนื่องจากแอปพลิเคชันของคุณและฐานข้อมูลจะถูกแยกออกจากหน่วยความจำ เหตุผลที่ Mnesia สามารถทำสิ่งนี้และยังมีความแข็งแกร่งอยู่ดีนั่นคือ Erlang ใช้การป้องกันของหน่วยความจำในระดับภาษา
โดยรวมแล้วฐานข้อมูล SQL มักจะให้ปริมาณงานมากกว่าเวลาแฝงและเมื่อพูดถึงเวลาแฝง Mnesia + Erlang ก็มีความโดดเด่น คุณต้องตัดสินใจว่าอันไหนสำคัญที่สุดสำหรับคุณ ดังที่ระบุไว้ในเอกสาร (ด้านบน) แอปพลิเคชันเป้าหมายของ Mnesia คือแอปพลิเคชันการเปลี่ยนระบบโทรคมนาคมซึ่งต้องการเวลาตอบสนองสำหรับการตั้งค่าการโทรเช่นประมาณ 20 มิลลิวินาที สิ่งนี้หมายความว่าคุณสามารถอ่านจากฐานข้อมูลได้หากข้อมูลอยู่ในหน่วยความจำที่ใช้ร่วมกัน แต่จะหลีกเลี่ยงการเขียนไปยังที่จัดเก็บข้อมูลแบบต่อเนื่องตามการตั้งค่าต่อการโทร OTOH แอพพลิเคชั่นเหล่านี้ไม่จำเป็นต้องรองรับการสืบค้นแบบเฉพาะกิจและไม่ใช้ชุดข้อมูลขนาดใหญ่มาก งานบางอย่างได้ดำเนินการเพื่อขยายความเหมาะสมของ Mnesia สำหรับโดเมนอื่น ๆ แต่มันไม่สำคัญสำหรับทีมพัฒนา Erlang / OTP Mnesia คือสิ่งที่มันเป็นและมีแนวโน้มที่จะอยู่อย่างนั้น
ในลิงก์ข้างต้นที่ Mnesia และ MySQL เปรียบเทียบกับความเร็วเราต้องจำไว้ว่ามันอยู่ใน eJabberd ซึ่งทำงานกับเซิร์ฟเวอร์เดียวหากเป็น MySQL และใช้ฐานข้อมูลที่จำลองแบบเต็มหาก Mnesia - และกลุ่ม eJabberd ขนาดใหญ่สามารถมีได้มากเท่ากับ 10 หรือมากกว่าโหนด erlang (และดังนั้น, 10 หรือมากกว่า Mnesia แบบจำลอง) จากมุมมองที่ซ้ำซ้อนนี่เป็นเรื่องไร้สาระและมีราคาแพงและ Mnesia ไม่ได้บังคับให้คุณทำเช่นนั้น เห็นได้ชัดว่ามันช่วยให้อ่านอย่างรวดเร็วในแต่ละโหนด การเปรียบเทียบหลายอย่างที่ฉันได้อ่านจบลงแล้วเมื่อเปรียบเทียบการกระจาย Mnesia กับ MySQL แบบโหนดเดียว หากไม่จำเป็นต้องมีความซ้ำซ้อนสำหรับ MySQL ก็ไม่ควรใช้ Mnesia Mnesia มีความยืดหยุ่นค่อนข้างมากในการให้คุณเลือกรูปแบบการจำลองแบบและตำแหน่งข้อมูลนั้นโปร่งใสสำหรับแอปพลิเคชัน
Mnesia ไม่ จำกัด เพียง 2 GB ต่อตาราง (แม้ว่าจะมีตัวเลือกในการจัดเก็บข้อมูลเฉพาะ) ฐานข้อมูล Mnesia ที่ใหญ่ที่สุดที่ฉันรู้จักมี CA 600 GB ของข้อมูลในดิสก์ RAM 64- บิต - แม้ว่าฉันจะไม่แนะนำก็ตาม สิ่งใดก็ตามที่มีขนาด 10-20 GB ควรปรับอย่างสมบูรณ์แบบด้วยฮาร์ดแวร์ที่ทันสมัย แต่ควรข้าม disc_only_copies ทั้งหมดและใช้ disc_copies - ซื้อ RAM เพิ่มถ้าคุณต้องการ ฉันคิดว่าสองครั้งก่อนที่จะใช้การสนับสนุนการแบ่ง (mnesia_frag) - ใช้งานได้ แต่ไม่ค่อยคุ้มกับปัญหา
บางทีความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่าง Mnesia และ MySQL ก็คือ SQL นั่นเอง Mnesia ไม่ได้มีฟังก์ชั่นการใช้งานเทียบเท่า QLC ให้การสนับสนุนสำหรับคิวรีแบบเฉพาะกิจ แต่ไม่ได้อยู่ในลีกเดียวกันกับ SQL และไม่มีระดับของการเพิ่มประสิทธิภาพคิวรี ในการใช้เครื่องมือและการจัดเตรียม MySQL นั้นเหนือกว่าและถ้าคุณต้องการการวิเคราะห์ไม่มีคำถามใดที่คุณควรเลือก (เช่นไม่ใช่ Mnesia)
วิธีที่ดีที่สุดในการดู Mnesia เป็นส่วนขยายของภาษา Erlang มันทำให้ข้อมูลอยู่ที่ปลายนิ้วของคุณและเป็นเลิศสำหรับชุดข้อมูลขนาดเล็กซึ่งเป็นที่รู้จักกันดีว่าโครงสร้างข้อมูลและรูปแบบการเข้าถึง สำหรับจุดประสงค์นี้การใช้ MySQL เป็นเรื่องที่ไม่สะดวกสบายเหมือนกับการใช้ Mnesia สำหรับสิ่งที่ MySQL ทำงานได้ดีที่สุด
แอปพลิเคชั่นส่วนใหญ่อยู่ระหว่างที่ใดที่หนึ่ง คุณอาจใช้ทั้งคู่ ...
จากเอกสาร :
Mnesia เป็นระบบการจัดการฐานข้อมูลแบบกระจายเหมาะสำหรับแอพพลิเคชั่นด้านการสื่อสารโทรคมนาคมและแอพพลิเคชั่น Erlang อื่น ๆ ที่ต้องการการทำงานอย่างต่อเนื่องและคุณสมบัติแบบเรียลไทม์ที่อ่อนนุ่ม เป็นส่วนหนึ่งของแพลตฟอร์ม Open Telecom (OTP) ซึ่งเป็นแพลตฟอร์มระบบควบคุมสำหรับการสร้างแอพพลิเคชั่นโทรคมนาคม
โดยเฉพาะอย่างยิ่งระดับการยอมรับข้อผิดพลาดที่สูงมากซึ่งจำเป็นในระบบ nonstop จำนวนมากรวมกับข้อกำหนดบน DBMS เพื่อให้ทำงานในพื้นที่ที่อยู่เดียวกับแอปพลิเคชันทำให้เราสามารถใช้ DBMS ใหม่ได้ เรียกว่า Mnesia Mnesia มีการนำมาใช้และเชื่อมโยงอย่างแน่นหนากับภาษาการเขียนโปรแกรม Erlang และให้การทำงานที่จำเป็นสำหรับการใช้งานระบบโทรคมนาคมที่รองรับความผิดปกติ Mnesia เป็นผู้ใช้หลายคนกระจาย DBMS ที่สร้างขึ้นเป็นพิเศษสำหรับการใช้งานการสื่อสารโทรคมนาคมอุตสาหกรรมที่เขียนในภาษาการเขียนโปรแกรมสัญลักษณ์ Erlang ซึ่งเป็นภาษาเป้าหมาย Mnesia พยายามจัดการกับปัญหาการจัดการข้อมูลทั้งหมดที่จำเป็นสำหรับระบบโทรคมนาคมทั่วไปและมีคุณสมบัติหลายอย่างที่ไม่พบในฐานข้อมูลดั้งเดิม
ในแอปพลิเคชั่นโทรคมนาคมมีความต้องการที่แตกต่างจากคุณสมบัติที่จัดทำโดย DBMS แบบดั้งเดิม แอปพลิเคชั่นที่ใช้งานในภาษา Erlang ต้องการการผสมผสานของฟีเจอร์ที่หลากหลายซึ่งโดยทั่วไปไม่ได้รับความพึงพอใจจาก DBMS แบบดั้งเดิม Mnesia ได้รับการออกแบบโดยมีข้อกำหนดดังต่อไปนี้:
ค้นหาคีย์ / ค่าเรียลไทม์ได้อย่างรวดเร็ว
ข้อความค้นหาแบบเรียลไทม์ที่ซับซ้อนซึ่งไม่ซับซ้อนสำหรับการดำเนินงานและการบำรุงรักษาเป็นหลัก
ข้อมูลแบบกระจายเนื่องจากแอปพลิเคชันแบบกระจาย
ความผิดพลาดสูงทน
การกำหนดค่าใหม่แบบไดนามิก
วัตถุที่ซับซ้อน
สิ่งที่ทำให้ Mnesia แตกต่างจาก DBMS อื่น ๆ ส่วนใหญ่คือมันถูกออกแบบด้วยปัญหาการจัดการข้อมูลทั่วไปของแอพพลิเคชั่นด้านการสื่อสารโทรคมนาคม ดังนั้น Mnesia จึงรวมแนวคิดหลายอย่างที่พบในฐานข้อมูลแบบดั้งเดิมเช่นธุรกรรมและแบบสอบถามกับแนวคิดที่พบในระบบการจัดการข้อมูลสำหรับแอปพลิเคชันการสื่อสารโทรคมนาคมเช่นการดำเนินการตามเวลาจริงที่รวดเร็วมาก กำหนดค่าระบบใหม่โดยไม่หยุดหรือหยุดชั่วคราว Mnesia ก็มีความน่าสนใจเนื่องจากการมีเพศสัมพันธ์อย่างแน่นหนากับภาษาการเขียนโปรแกรม Erlang ดังนั้นเกือบจะเปลี่ยน Erlang เป็นภาษาการเขียนโปรแกรมฐานข้อมูล สิ่งนี้มีประโยชน์มากมายที่สำคัญที่สุดคือความต้านทานไม่ตรงกันระหว่างรูปแบบข้อมูลที่ใช้โดย DBMS และรูปแบบข้อมูลที่ใช้โดยภาษาการเขียนโปรแกรม
Mnesia กับ MySQL, ประสิทธิภาพ :
ejabberd ใช้ทรัพยากรการคำนวณน้อยกว่าเมื่อใช้ฐานข้อมูล * SQL บางตัวเมื่อใช้ Mnesia ภายใน คุณอาจสนใจในหัวข้อนั้นเมื่อคุณมีผู้ใช้หลายคนพร้อมกัน (ตัวอย่างเช่นมากกว่า 1,000 คน) ด้วยผู้ใช้ที่ใช้งานพร้อมกันไม่กี่คนการใช้ CPU ของ ejabberd นั้นเล็กน้อยดังนั้นผู้ดูแลระบบของเซิร์ฟเวอร์ขนาดเล็กไม่สนใจที่จะตั้งค่าเซิร์ฟเวอร์ SQL ภายนอกและฐานข้อมูล
CouchDB v. Mnesia, V. MySQLและMnesia หัวข้ออื่น ๆ :
ข้อมูลเชิงลึกหนึ่งที่มาถึงใจทันทีคือในขณะที่มันชัดเจนสำหรับฉันวิธีการจัดโครงสร้างข้อมูลสำหรับ MySQL มันมีน้อยสำหรับ Mnesia และสำหรับ CouchDB ฉันยังไม่แน่ใจในแนวทางที่ดีที่สุดทั้งหมด สำหรับตอนนี้ต่อไปนี้เป็นจุดที่ชัดเจนมากขึ้น:
A 'record' มีฟิลด์ 'ตัวเลข' ซึ่งแสดงให้เห็นชัดเจนว่ามีการเล่นกี่ครั้ง นี่เป็นสิ่งที่ดีใน MySQL แต่ถ้าฉันรวมฟิลด์นี้ลงในเอกสารสำหรับ CouchDB ฉันจะได้รับการแก้ไขเอกสารในฐานข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงจำนวนหนึ่งซึ่งดูเหมือนว่าจะไม่มีประสิทธิภาพมากนัก
เลย์เอาต์สามตารางใน MySQL ของเร็กคอร์ดแท็กและตารางลิงก์ระหว่างกัน (ดูสคริปต์หากยังไม่ชัดเจน) คือ (สำหรับฉันอย่างน้อย) เห็นได้ชัดว่าเป็นทางออกที่ถูกต้อง แต่มีหลายวิธีที่เป็นไปได้ในการทำเช่นนี้ ทั้งใน Mnesia และ CouchDB และฉันพบว่าฉันไม่มีคำตอบอย่างสังหรณ์ใจ
ในระยะสั้นมันถูกออกแบบมาเพื่อวัตถุประสงค์เฉพาะ ไม่มีฐานข้อมูลใดที่สามารถเปรียบเทียบได้อย่างเป็นนามธรรม โดยผ่านการใช้ข้อกำหนดเท่านั้นจึงจะสามารถเป็นองค์ประกอบของความสามารถในการชำระเงิน
ไม่ฉันจะไม่บอกว่า Mnesia นั้นดีสำหรับข้อมูลจำนวนมาก คุณสามารถเลือกใช้Ets หรือ Detsเป็นแบ็กเอนด์ หากคุณเลือก Ets ฐานข้อมูลของคุณจะอยู่ในหน่วยความจำและรวดเร็วมาก แต่ข้อมูลจะไม่คงอยู่ และถ้าคุณต้องการข้อมูลของคุณแบบถาวร (บันทึกไว้ในดิสก์) คุณต้องใช้ Dets ซึ่งมีขีด จำกัด2GBดังนั้นฐานข้อมูลของคุณจึงไม่สามารถเก็บข้อมูลได้มากกว่า 2GB
คุณสามารถใช้แบ็กเอนด์แบบกำหนดเองเช่นอินสโตร์ที่ใช้ในฐานข้อมูลRiak NoSQL
ข้อดีของ Mnesia คือมันเป็นฐานข้อมูลแบบกระจายดังนั้นจึงเป็นเรื่องง่ายที่จะทำระบบป้องกันความผิดปกติถ้าคุณมีคอมพิวเตอร์มากกว่าหนึ่งเครื่อง และมันใช้งานง่ายมากใน Erlang เนื่องจากเป็นฐานข้อมูลในภาษาและทำหน้าที่ "ชอบฟังก์ชั่น" และมันก็เร็วมากหากคุณต้องการเพียงฐานข้อมูลในหน่วยความจำเช่นแคช