Cassandra และ MongoDB แตกต่างกันอย่างไร
Apache Cassandra และ MongoDB เป็นฐานข้อมูล NoSQL สองแบบที่เก็บข้อมูลในรูปแบบที่ไม่ใช่ตาราง Cassandra เป็นฐานข้อมูล NoSQL รุ่นแรกที่มีการออกแบบแบบผสมผสานระหว่างการเก็บข้อมูลแบบตารางและคีย์-ค่า โดยได้รับการออกแบบมาเพื่อจัดเก็บข้อมูลสำหรับแอปพลิเคชันที่ต้องอ่านและเขียนอย่างรวดเร็ว ในทางตรงกันข้าม MongoDB เป็นฐานข้อมูลแบบโครงสร้างเอกสารที่สร้างขึ้นเพื่อวัตถุประสงค์การใช้งานทั่วไป โดยมีโมเดลข้อมูลที่ยืดหยุ่นซึ่งช่วยให้คุณสามารถจัดเก็บข้อมูลที่ไม่มีโครงสร้างในรูปแบบ JSON ที่ปรับให้เหมาะสมแล้ว ซึ่งเรียกว่า Binary JSON หรือ BSON ฐานข้อมูล MongoDB ให้การสนับสนุนการจัดทำดัชนีและการจำลองแบบเต็มรูปแบบด้วย API ที่สมบูรณ์และใช้งานง่าย
อะไรคือความคล้ายคลึงกันระหว่าง Cassandra และ MongoDB
Apache Cassandra และ MongoDB ต่างก็อยู่ในกลุ่มฐานข้อมูล NoSQL เหมือนกัน ฐานข้อมูล NoSQL สามารถจัดเก็บข้อมูลที่มีโครงสร้าง ไม่มีโครงสร้าง และกึ่งมีโครงสร้างได้ โดยไม่ต้องมีสคีมาฐานข้อมูล
พื้นที่เก็บข้อมูลในฐานข้อมูล NoSQL จะไม่ถูกจำกัดโดยรูปแบบตารางและความสัมพันธ์ระหว่างตาราง ซึ่งมีความแตกต่างจากระบบการจัดการฐานข้อมูลแบบเชิงสัมพันธ์แบบดั้งเดิม คุณสามารถแบ่งพาร์ทิชันและทำซ้ำข้อมูลข้ามโหนดต่างๆ ได้อย่างอิสระเพื่อปรับขนาดอย่างมีประสิทธิภาพได้
นอกจากนี้ Cassandra และ MongoDB เวอร์ชันก่อนหน้ายังเป็นแบบโอเพนซอร์สอีกด้วย ซึ่งหมายความว่าคุณสามารถดาวน์โหลดซอร์สโค้ดของฐานข้อมูล NoSQL เหล่านี้และกำหนดค่าได้ตามต้องการ
Facebook ได้พัฒนา Cassandra ขึ้นมาแล้วเผยแพร่เป็นโปรเจกต์แบบโอเพนซอร์สร่วมกับ Apache MongoDB ได้รับการพัฒนาโดยนักพัฒนากลุ่มเล็กๆ ภายใต้ MongoDB, Inc. MongoDB ทุกเวอร์ชันที่เผยแพร่ก่อนวันที่ 16 ตุลาคม 2018 นั้นมีให้บริการภายใต้สัญญาอนุญาต GNU Affero General Public License
ความแตกต่างของโมเดลข้อมูล: Cassandra เทียบกับ MongoDB
แม้ว่า MongoDB และ Apache Cassandra จะเป็นฐานข้อมูล NoSQL ทั้งคู่ แต่จะจัดเก็บและจัดการข้อมูลต่างกัน
Cassandra
Cassandra จะจัดเก็บข้อมูลเป็นที่เก็บแบบคีย์-ค่า ซึ่งช่วยให้คุณกำหนดตารางด้วยแถวและคอลัมน์ได้ แต่จะไม่ได้ใช้โครงสร้างแบบตารางในที่จัดเก็บข้อมูลจริง แต่จะใช้โมเดลฐานข้อมูลเชิงคอลัมน์แบบกว้างแทน ดังนั้นแต่ละแถวในตารางจึงสามารถมีชุดคอลัมน์ที่แตกต่างกันได้
คุณสามารถจัดกลุ่มคอลัมน์เป็นตระกูลคอลัมน์ตามประเภทข้อมูลหรือการใช้งานได้ ทุกแถวจะมีคีย์หลักที่คุณสามารถใช้เพื่ออ่านข้อมูลจาก Cassandra ได้อย่างรวดเร็ว
คุณสามารถดูโครงสร้างตาราง Apache Cassandra ได้ในตัวอย่างต่อไปนี้
Customer id 1 | คอลัมน์ - ชื่อ |
คอลัมน์ - ประเทศ |
|
ค่า - John Doe |
ค่า - สหรัฐอเมริกา |
||
Customer id 2 | คอลัมน์ - ชื่อ |
คอลัมน์ - อายุ |
คอลัมน์ - อีเมล |
ค่า - Jane Doe |
ค่า - 35 |
ค่า - jane_doe@example.com |
MongoDB
ในทางตรงกันข้าม MongoDB จะจัดเก็บข้อมูลโดยไม่มีสคีมา โดยใช้รูปแบบ Binary JSON (BSON) ที่มีการปรับให้เหมาะสม ซึ่งสามารถเก็บข้อมูลหลายประเภทไว้ในเอกสารเดียวกันได้ คล้ายกับอ็อบเจกต์ JSON แล้วทำให้เป็นอนุกรมด้วย BSON
MongoDB จะจัดระเบียบเอกสารเป็นชุดที่สามารถมีข้อมูลที่มีโครงสร้างต่างกัน โมเดลข้อมูลจะมีความยืดหยุ่นและสามารถจัดการกับข้อมูลที่ไม่มีโครงสร้างจำนวนมากได้
ต่อไปนี้คือตัวอย่างข้อมูลลูกค้าใน MongoDB
ลูกค้า:[ { customer_id: "1", name: “John Doe”, country: "United States" }, { customer_id: "2", age: “35” email: "jane_doe@example.com" }] |
ความแตกต่างทางสถาปัตยกรรมระหว่าง Cassandra และ MongoDB
เนื่องจาก Cassandra และ MongoDB มีความแตกต่างในโมเดลข้อมูล ทั้งคู่จึงใช้คุณสมบัติฐานข้อมูลหลายอย่างที่แตกต่างกัน
หน่วยเก็บข้อมูลพื้นฐาน
Sorted String Table (SSTable) ใน Cassandra เป็นหน่วยพื้นฐานของหน่วยเก็บข้อมูลที่ใช้ในการคงข้อมูลบนดิสก์ SSTable เป็นไฟล์ที่มีชุดของคู่คีย์-ค่าที่เรียงลำดับสำหรับตระกูลคอลัมน์ (ตาราง) และพาร์ทิชันเฉพาะ SSTable จะเปลี่ยนแปลงไม่ได้ ซึ่งหมายความว่าเมื่อเขียนแล้วจะไม่สามารถแก้ไขได้
หน่วยเก็บข้อมูลพื้นฐานใน MongoDB คือเอกสาร เอกสารคือชุดของคู่คีย์-ค่า โดยที่คีย์คือสตริง และค่าสามารถเป็นประเภทต่างๆ ได้ ตัวอย่างเช่น ค่าสามารถเป็นเอกสาร อาร์เรย์ สตริง ตัวเลข วันที่ และค่าบูลีนอื่นๆ เอกสารจะถูกจัดเก็บไว้ในคอลเลกชัน
ภาษาการสืบค้น
ภาษาการสืบค้นคือคำสั่งที่คุณใช้เพื่อแทรกและดึงข้อมูลจากฐานข้อมูล
Cassandra Query Language (CQL) เป็นภาษาการสืบค้นที่คุณใช้งานใน Cassandra แม้ว่าจะมีไวยากรณ์และโครงสร้างที่คล้ายคลึงกับ SQL แต่ Apache ก็ได้พัฒนา CQL ขึ้นมาเพื่อทำงานร่วมกับโมเดลข้อมูลตระกูลคอลัมน์
ในทางกลับกัน MongoDB จะใช้ MongoDB Query Language (MQL) ซึ่งมีคำสั่งคล้ายกับ Node.js MQL รองรับการดำเนินการสร้าง อ่าน อัปเดต และลบ (CRUD) คุณสามารถเขียนคำสั่ง MQL บน MongoDB Shell
การจัดทำดัชนี
การทำดัชนีเป็นเทคนิคที่ใช้ในฐานข้อมูลเพื่อปรับปรุงความเร็วรวมถึงประสิทธิภาพของการดำเนินการดึงข้อมูล ซึ่งจะเกี่ยวข้องกับการสร้างโครงสร้างข้อมูลที่แมปค่าของหนึ่งคอลัมน์ขึ้นไปในตารางฐานข้อมูลกับตำแหน่งทางกายภาพของข้อมูลที่สอดคล้องกันบนดิสก์
Cassandra รองรับดัชนีอยู่สองประเภทดังนี้
- ดัชนีรองในแต่ละคอลัมน์
- SSTable-Attached Secondary Indexes (SASI) จะจัดทำดัชนีในหลายคอลัมน์
ดัชนี SASI จะเก็บข้อมูลดัชนีโดยตรงใน SSTable ดัชนีเหล่านี้รองรับการสืบค้น เช่น ช่วง คำนำหน้า และข้อความแบบเต็มในคอลัมน์ที่มีค่าเฉพาะจำนวนมาก
ในทางตรงกันข้าม MongoDB รองรับการสร้างดัชนีที่ระดับคอลเลกชันและระดับฟิลด์ มีดัชนีหลายประเภท เช่น ฟิลด์เดียว แบบผสม และหลายคีย์ นอกจากนี้ยังมีดัชนีเหล่านี้อีกด้วย
- ดัชนีเชิงพื้นที่เฉพาะสำหรับข้อมูลที่กระจายทางภูมิศาสตร์
- ดัชนีการค้นหาข้อความสำหรับข้อมูลข้อความจำนวนมาก
- ดัชนีแฮชและคลัสเตอร์สำหรับข้อมูลตัวเลข
กระบวนการทำงานพร้อมกัน
กระบวนการทำงานพร้อมกันในฐานข้อมูลหมายถึงเมื่อผู้ใช้หรือกระบวนการหลายคนสามารถเข้าถึงและทำธุรกรรมฐานข้อมูลพร้อมกันโดยไม่รบกวนซึ่งกันและกัน
Cassandra สามารถมีกระบวนการทำงานพร้อมกันที่มีความสม่ำเสมอในการทำงานร่วมกันและ Atomicity ในระดับแถวได้ ผู้ใช้สามารถทำงานในแถวเดียวได้คนเดียวเท่านั้นในแต่ละครั้ง
แต่ละโหนดจำลองจะรักษานาฬิกาเวกเตอร์ ซึ่งเป็นโครงสร้างข้อมูลที่ติดตามประวัติรุ่นของข้อมูลที่เกี่ยวข้องโดยมีความสม่ำเสมอในการทำงานร่วมกัน เมื่อดำเนินการเขียน นาฬิกาเวกเตอร์จะอัปเดตเพื่อแสดงเวอร์ชันใหม่ เมื่อดำเนินการอ่าน Cassandra จะส่งคืนเวอร์ชันที่มีการประทับเวลาสูงสุดในแบบจำลองทั้งหมด ซึ่งจะเป็นสิ่งยืนยันได้ว่าข้อมูลเวอร์ชันล่าสุดจะถูกส่งกลับเสมอ
ในทางตรงกันข้าม MongoDB รองรับกลไกสำหรับการควบคุมกระบวนการทำงานพร้อมกันหลายรุ่น (MVCC) MVCC อนุญาตให้มีเอกสารข้อมูลเดียวกันหลายเวอร์ชันพร้อมกันได้ เอกสารแต่ละฉบับจะมี ID การแก้ไขที่ไม่ซ้ำกันซึ่งจะเพิ่มขึ้นในการอัปเดตแต่ละครั้ง การล็อกในระดับเอกสารและ MVCC จะมอบกลยุทธ์กระบวนการทำงานพร้อมกันที่แข็งแกร่งยิ่งขึ้น
ความพร้อมใช้งาน
ความพร้อมใช้งานหมายความว่า คุณสามารถมั่นใจได้ว่าจะไม่มีการหยุดทำงานของข้อมูล แม้ในช่วงที่เซิร์ฟเวอร์หยุดทำงาน ทั้ง Cassandra และ MongoDB รับประกันความพร้อมใช้งานโดยการจำลองข้อมูลผ่านโหนดเซิร์ฟเวอร์หลายโหนด
ใน Apache Cassandra แต่ละโหนดในคลัสเตอร์มีแบบจำลองข้อมูลสำหรับโหนดอื่น ทุกพิกัดของโหนดจะอ่านไปยังโหนดที่ถูกต้องเพื่อเขียนหรือดึงข้อมูล และยังซ่อมแซมข้อมูลที่ขาดความสอดคล้องกันในโหนดต่างๆ ไปพร้อมกัน วิธีนี้จะสามารถส่งผลกระทบต่อประสิทธิภาพในระดับต่างๆ ได้
ในทางตรงกันข้าม MongoDB จะใช้การจำลองแบบโหนดหลักเดียวเพื่อให้ข้อมูลมีความพร้อมใช้งานสูง MongoDB จะจำลองข้อมูลเป็นชุดจำลอง มีเพียงโหนดหลักเดียวเท่านั้นที่ได้รับการเขียน และโหนดอื่นๆ จะทำการจำลองข้อมูลจากโหนดหลัก อย่างไรก็ตาม โหนดหลักจะสร้างความล้มเหลวเพียงจุดเดียว
ความสามารถในการปรับขนาด
ทั้ง Cassandra และ MongoDB อนุญาตให้มีการแบ่งส่วนข้อมูล ซึ่งเป็นเทคนิคในการแบ่งพาร์ทิชันข้อมูลในแนวนอนข้ามโหนดต่างๆ ในคลัสเตอร์ ตัวอย่างเช่นถ้าคุณมีลูกค้านับพันราย คุณจะสามารถแบ่งพาร์ทิชันข้อมูลเพื่อให้ทุกโหนดมีเพียงข้อมูลของลูกค้าไม่กี่ร้อยคนได้ ด้วยวิธีนี้จะทำให้คุณสามารถปรับขนาดฐานข้อมูลของคุณได้ โดยไม่ทำให้เกิดปัญหาคอขวด
Cassandra ใช้อัลกอริทึมแฮชแบบกระจายที่เรียกว่าการแฮชที่สอดคล้องกันเพื่อกำหนดว่าโหนดใดจะรับผิดชอบค่าข้อมูลแบบเฉพาะเจาะจง นอกจากนี้ Cassandra ยังรองรับโหนดเสมือน (vnodes) ซึ่งอนุญาตให้โหนดเดียวมีช่วงข้อมูลหลายช่วงได้
ในทางตรงกันข้าม MongoDB จะใช้คีย์การแบ่งส่วนข้อมูลเพื่อระบุตำแหน่งที่สามารถส่งค่าข้อมูลไปได้ ผู้ดูแลระบบฐานข้อมูลสามารถกำหนดคีย์การแบ่งส่วนข้อมูลเพื่อแบ่งพาร์ทิชันข้อมูลได้ คุณสามารถแบ่งข้อมูลตามปัจจัยต่างๆ เช่น ที่ตั้งทางภูมิศาสตร์ ลำดับตัวอักษร หรือระบบอื่นๆ เพื่อให้เกิดประสิทธิภาพสูงสุดสำหรับชุดข้อมูลของคุณ
เมื่อใดที่ควรใช้ Cassandra เทียบกับ MongoDB
สถาปัตยกรรมแบบกระจายและเวลาการทำงานที่สูงของ Cassandra ทำให้บริการนี้เป็นตัวเลือกที่ดีสำหรับการใช้งานที่ต้องการความพร้อมใช้งานสูง ความสามารถของ MongoDB ในการจัดการข้อมูลที่ไม่มีโครงสร้างด้วยวิธีการเชิงเอกสารนั้นมีประโยชน์สำหรับระบบที่ข้อมูลมีการเปลี่ยนแปลงอยู่ตลอดเวลา
ปัจจัยที่ควรพิจารณาเมื่อคุณเลือกระหว่างสองบริการข้างต้นมีดังต่อไปนี้
รูปแบบข้อมูล
Apache Cassandra มีระบบจัดเก็บข้อมูลที่มีโครงสร้างมากกว่า MongoDB หากข้อมูลที่คุณกำลังทำงานอยู่กับรูปแบบข้อมูลที่คงที่ Cassandra ก็จะเหมาะสมกว่า
หากข้อมูลมีความไดนามิกมากกว่าและไม่มีโครงสร้างที่สอดคล้องกัน ก็จะถือว่า MongoDB จะทำงานได้ดีกว่า
ความพร้อมใช้งาน
MongoDB มีโหนดหลักและชุดแบบจำลอง หากโหนดหลักหยุดทำงาน MongoDB จะใช้เวลาสองถึงสามนาทีในการเลือกโหนดจำลองเพื่อแทนที่ ซึ่งวิธีนี้อาจจะทำให้เกิดการหยุดทำงานในปริมาณน้อย
Cassandra ใช้ระบบโหนดแบบกระจายที่มีโหนดหลัก (Master Node) หลายโหนด ซึ่งช่วยให้มีความพร้อมใช้งานได้ 100%
ความสามารถในการปรับขนาด
MongoDB ช่วยให้คุณสามารถควบคุมเมื่อคุณปรับขนาดได้มากขึ้น คุณจะสามารถตัดสินใจแบ่งพาร์ทิชันข้อมูลระหว่างโหนดได้ตามความต้องการของคุณ และจัดการฐานข้อมูลแบบกระจายจำนวนมากได้ตามขนาด
ประสิทธิภาพของ Cassandra อาจลดลงเล็กน้อยตามขนาด ทั้งนี้ขึ้นอยู่กับค่าของข้อมูล
ภาษาการสืบค้น
ทั้งภาษาการสืบค้นของ Cassandra (CQL) และภาษาการสืบค้นของ MongoDB (MQL) คือภาษาที่ใช้สืบค้นที่มีประสิทธิภาพสูง อย่างไรก็ตาม CQL นั้นมีความคล้ายคลึงกับ SQL มากกว่า ซึ่งช่วยให้คุณสามารถใช้ CQL ได้อย่างง่ายดายหากคุณเชี่ยวชาญในการใช้งาน SQL อยู่แล้ว
MQL จะมีการใช้งานและไวยากรณ์ที่แตกต่างกัน และอาจมีช่วงการเรียนรู้ที่ชันกว่า
รองรับภาษาโปรแกรม
MongoDB รองรับภาษาการเขียนโปรแกรมสิบสองภาษา: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala และ Swift
Cassandra รองรับภาษาที่น้อยกว่า เช่น Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python เป็นต้น
สรุปความแตกต่างระหว่าง Cassandra และ MongoDB
Apache Cassandra |
MongoDB |
|
โมเดลข้อมูล |
Cassandra ใช้โมเดลข้อมูลแบบคอลัมน์แบบกว้างที่เกี่ยวข้องกับฐานข้อมูลแบบเชิงสัมพันธ์อย่างใกล้ชิดมากขึ้น |
MongoDB จะไม่ได้ใช้โมเดลแบบเชิงสัมพันธ์ โดยจะจัดเก็บข้อมูลเป็นเอกสาร |
หน่วยเก็บข้อมูลพื้นฐาน |
ตารางสตริงที่เรียงลำดับ |
เอกสาร JSON ที่เป็นอนุกรม |
การจัดทำดัชนี |
Cassandra รองรับดัชนีรองและ SASI เพื่อจัดทำดัชนีตามคอลัมน์หรือหลายคอลัมน์ |
MongoDB จัดทำดัชนีในระดับคอลเลกชันและระดับฟิลด์ และมีตัวเลือกการจัดทำดัชนีหลายตัว |
ภาษาการสืบค้น |
Cassandra ใช้ CQL |
MongoDB ใช้ MQL |
กระบวนการทำงานพร้อมกัน |
Cassandra สามารถมีกระบวนการทำงานพร้อมกันที่มี Atomicity ในระดับแถว และมีความสม่ำเสมอในการทำงานร่วมกันได้ |
MongoDB ใช้ MVCC และการล็อกในระดับเอกสารเพื่อให้แน่ใจว่ามีการทำงานพร้อมกัน |
ความพร้อมใช้งาน |
Cassandra มีโหนดหลัก (Master Node) หลายโหนด การแบ่งพาร์ทิชันโหนด และการจำลองคีย์เพื่อให้มีความพร้อมใช้งานสูง |
MongoDB ใช้โหนดหลักเดียวและหลายโหนดจำลอง เมื่อรวมกับการแบ่งส่วนข้อมูลแล้ว MongoDB จะมอบความพร้อมใช้งานสูงและความสามารถในการปรับขนาด |
การแบ่งพาร์ทิชัน |
อัลกอริทึมการแฮชที่สอดคล้องกัน ผู้ใช้ควบคุมน้อยลง |
ผู้ใช้สามารถกำหนดคีย์การแบ่งส่วนข้อมูลและควบคุมการแบ่งพาร์ทิชันได้มากขึ้น |
AWS รองรับข้อกำหนดความต้องการของ Cassandra และ MongoDB อย่างไร
Amazon Web Services (AWS) มีบริการอยู่ 2 บริการที่รองรับข้อกำหนดความต้องการทั่วไปของ Apache Cassandra และ MongoDB
Amazon Keyspaces (สำหรับ Apache Cassandra) เป็นฐานข้อมูลที่มีการจัดการซึ่งมีความพร้อมใช้งานสูง ซึ่งจะช่วยให้คุณสามารถย้ายเวิร์กโหลด Cassandra ไปยังระบบคลาวด์ได้ Amazon Keyspaces เป็นบริการแบบไม่ต้องใช้เซิร์ฟเวอร์ ดังนั้นคุณจึงจะถูกเรียกเก็บเงินเฉพาะทรัพยากรที่คุณใช้เท่านั้น และบริการสามารถปรับขนาดตารางขึ้นและลงได้โดยอัตโนมัติตามปริมาณการใช้งานแอปพลิเคชัน คุณสามารถสร้างแอปพลิเคชันที่รองรับคำขอหลายพันรายการต่อวินาทีได้ด้วยปริมาณการประมวลผลและพื้นที่จัดเก็บเสมือนที่ไม่จำกัด
Amazon DocumentDB (พร้อมฟังก์ชันการทำงานร่วมกับ MongoDB) เป็นฐานข้อมูลแบบโครงสร้างเอกสาร JSON แบบดั้งเดิมที่มีการจัดการอย่างเต็มที่ ซึ่งจะทำให้การใช้งานเวิร์กโหลดเอกสารที่สำคัญเป็นเรื่องง่ายและมีความคุ้มค่าในทุกขนาดโดยไม่ต้องจัดการโครงสร้างพื้นฐาน Amazon DocumentDB ทำให้สถาปัตยกรรมของคุณง่ายดายยิ่งขึ้นโดยการสร้างแนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด การสำรองข้อมูลที่ต่อเนื่อง และการผสานรวมแบบเนทีฟร่วมกับบริการ AWS อื่นๆ
เริ่มต้นใช้งานบริการฐานข้อมูล Apache Cassandra และ MongoDB ที่มีการจัดการบน AWS โดยการสร้างบัญชี AWS วันนี้