CouchDB - บทนำ
ระบบจัดการฐานข้อมูลมีกลไกในการจัดเก็บและเรียกค้นข้อมูล ระบบจัดการฐานข้อมูลมีสามประเภทหลัก ได้แก่ RDBMS (Relational Database management Systems), OLAP (Online Analytical Processing Systems) และ NoSQL
RDBMS
RDBMS ย่อมาจาก Relational Database Management System RDBMS เป็นพื้นฐานสำหรับ SQL และสำหรับระบบฐานข้อมูลสมัยใหม่ทั้งหมดเช่น MS SQL Server, IBM DB2, Oracle, MySQL และ Microsoft Access
ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) คือระบบการจัดการฐานข้อมูล (DBMS) ที่ยึดตามแบบจำลองเชิงสัมพันธ์ตามที่ EF Codd แนะนำ
ข้อมูลใน RDBMS ถูกเก็บไว้ในวัตถุฐานข้อมูลที่เรียกว่า tables. ตารางคือชุดของรายการข้อมูลที่เกี่ยวข้องและประกอบด้วยคอลัมน์และแถว จัดเก็บเฉพาะข้อมูลที่มีโครงสร้างเท่านั้น
OLAP
Online Analytical Processing Server (OLAP) ขึ้นอยู่กับแบบจำลองข้อมูลหลายมิติ ช่วยให้ผู้จัดการและนักวิเคราะห์ได้รับข้อมูลเชิงลึกผ่านการเข้าถึงข้อมูลที่รวดเร็วสม่ำเสมอและโต้ตอบได้
ฐานข้อมูล NoSQL
ฐานข้อมูล NoSQL (บางครั้งเรียกว่า Not Only SQL) เป็นฐานข้อมูลที่มีกลไกในการจัดเก็บและดึงข้อมูลนอกเหนือจากความสัมพันธ์แบบตารางที่ใช้ในฐานข้อมูลเชิงสัมพันธ์ ฐานข้อมูลเหล่านี้ไม่มีสคีมารองรับการจำลองแบบง่ายมี API ที่เรียบง่ายสอดคล้องกันในที่สุดและสามารถจัดการข้อมูลจำนวนมหาศาล (ข้อมูลขนาดใหญ่) ได้
วัตถุประสงค์หลักของฐานข้อมูล NoSQL มีดังต่อไปนี้ -
- ความเรียบง่ายของการออกแบบ
- มาตราส่วนแนวนอนและ
- ควบคุมความพร้อมใช้งานได้ละเอียดขึ้น
ฐานข้อมูล NoSQL ใช้โครงสร้างข้อมูลที่แตกต่างกันเมื่อเทียบกับฐานข้อมูลเชิงสัมพันธ์ ทำให้การทำงานบางอย่างเร็วขึ้นใน NoSQL ความเหมาะสมของฐานข้อมูล NoSQL ที่กำหนดขึ้นอยู่กับปัญหาที่ต้องแก้ไข ฐานข้อมูลเหล่านี้จัดเก็บทั้งข้อมูลที่มีโครงสร้างและข้อมูลที่ไม่มีโครงสร้างเช่นไฟล์เสียงไฟล์วิดีโอเอกสาร ฯลฯ ฐานข้อมูล NoSQL เหล่านี้แบ่งออกเป็นสามประเภทและมีการอธิบายไว้ด้านล่าง
Key-value Store- ฐานข้อมูลเหล่านี้ออกแบบมาเพื่อจัดเก็บข้อมูลในคู่คีย์ - ค่าและฐานข้อมูลเหล่านี้จะไม่มีสคีมา ในฐานข้อมูลเหล่านี้ค่าข้อมูลแต่ละค่าประกอบด้วยคีย์ที่จัดทำดัชนีและค่าสำหรับคีย์นั้น
ตัวอย่าง - BerkeleyDB, Cassandra, DynamoDB, Riak
Column Store- ในฐานข้อมูลเหล่านี้ข้อมูลจะถูกเก็บไว้ในเซลล์ที่จัดกลุ่มไว้ในคอลัมน์ของข้อมูลและคอลัมน์เหล่านี้จะถูกจัดกลุ่มเป็นตระกูลคอลัมน์เพิ่มเติม กลุ่มคอลัมน์เหล่านี้สามารถมีคอลัมน์กี่คอลัมน์ก็ได้
ตัวอย่าง - BigTable, HBase และ HyperTable
Document Store- นี่คือฐานข้อมูลที่พัฒนาขึ้นจากแนวคิดพื้นฐานของการจัดเก็บคีย์ - ค่าที่ "เอกสาร" มีข้อมูลที่ซับซ้อนมากขึ้น ที่นี่เอกสารแต่ละชุดจะมีการกำหนดคีย์ที่ไม่ซ้ำกันซึ่งใช้ในการดึงเอกสาร สิ่งเหล่านี้ได้รับการออกแบบมาเพื่อการจัดเก็บการเรียกค้นและการจัดการข้อมูลเชิงเอกสารหรือที่เรียกว่าข้อมูลกึ่งโครงสร้าง
ตัวอย่าง - CouchDB และ MongoDB
CouchDB คืออะไร?
CouchDB เป็นฐานข้อมูลโอเพ่นซอร์สที่พัฒนาโดยมูลนิธิซอฟต์แวร์ Apache เน้นที่ความสะดวกในการใช้งานเว็บ เป็นฐานข้อมูลที่เก็บเอกสาร NoSQL
ใช้ JSON ในการจัดเก็บข้อมูล (เอกสาร) สคริปต์ java เป็นภาษาสืบค้นเพื่อแปลงเอกสารโปรโตคอล http สำหรับ api เพื่อเข้าถึงเอกสารค้นหาดัชนีด้วยเว็บเบราว์เซอร์ เป็นแอปพลิเคชั่น multi master ที่เปิดตัวในปี 2548 และกลายเป็นโปรเจ็กต์ apache ในปี 2008
ทำไมต้อง CouchDB?
CouchDB มี REST API ที่ใช้ HTTP ซึ่งช่วยให้สื่อสารกับฐานข้อมูลได้อย่างง่ายดาย และโครงสร้างที่เรียบง่ายของทรัพยากรและวิธีการ HTTP (GET, PUT, DELETE) นั้นง่ายต่อการเข้าใจและใช้งาน
ในขณะที่เราจัดเก็บข้อมูลในโครงสร้างเอกสารที่ยืดหยุ่นจึงไม่จำเป็นต้องกังวลเกี่ยวกับโครงสร้างของข้อมูล
ผู้ใช้จะได้รับการแมปข้อมูลที่มีประสิทธิภาพซึ่งช่วยให้สามารถสืบค้นรวมและกรองข้อมูลได้
CouchDB ให้การจำลองแบบที่ใช้งานง่ายซึ่งคุณสามารถคัดลอกแชร์และซิงโครไนซ์ข้อมูลระหว่างฐานข้อมูลและเครื่อง
แบบจำลองข้อมูล
ฐานข้อมูลเป็นโครงสร้าง / คอนเทนเนอร์ข้อมูลนอกสุดใน CouchDB
ฐานข้อมูลแต่ละชุดเป็นชุดเอกสารอิสระ
เอกสารแต่ละฉบับจะเก็บรักษาข้อมูลของตนเองและสคีมาในตัว
ข้อมูลเมตาของเอกสารมีข้อมูลการแก้ไขซึ่งทำให้สามารถผสานความแตกต่างที่เกิดขึ้นในขณะที่ฐานข้อมูลถูกตัดการเชื่อมต่อ
CouchDB ดำเนินการควบคุมการทำงานพร้อมกันหลายเวอร์ชันเพื่อหลีกเลี่ยงความจำเป็นในการล็อกฟิลด์ฐานข้อมูลระหว่างการเขียน
คุณสมบัติของ CouchDB: ลดเนื้อหา
การจัดเก็บเอกสาร
CouchDB คือฐานข้อมูล NoSQL ที่จัดเก็บเอกสาร ให้ความสะดวกในการจัดเก็บเอกสารที่มีชื่อเฉพาะและยังมี API ที่เรียกว่า RESTful HTTP API สำหรับการอ่านและอัปเดต (เพิ่มแก้ไขลบ) เอกสารฐานข้อมูล
ใน CouchDB เอกสารเป็นหน่วยหลักของข้อมูลและรวมถึงข้อมูลเมตาด้วย ฟิลด์เอกสารได้รับการตั้งชื่อโดยไม่ซ้ำกันและมีค่าของประเภทต่างๆ (ข้อความตัวเลขบูลีนรายการ ฯลฯ ) และไม่มีการกำหนดขนาดข้อความหรือจำนวนองค์ประกอบ
การอัปเดตเอกสาร (เพิ่มแก้ไขลบ) เป็นไปตาม Atomicity กล่าวคือจะถูกบันทึกอย่างสมบูรณ์หรือไม่บันทึกเลย ฐานข้อมูลจะไม่มีเอกสารที่บันทึกหรือแก้ไขบางส่วน
โครงสร้างเอกสาร Json
{
"field" : "value",
"field" : "value",
"field" : "value",
}
คุณสมบัติของกรด
CouchDB มีคุณสมบัติ ACID เป็นหนึ่งในคุณสมบัติ
ความสม่ำเสมอ - เมื่อข้อมูลใน CouchDB ถูกคอมมิตแล้วข้อมูลนี้จะไม่ถูกแก้ไขหรือเขียนทับ ดังนั้น CouchDB จึงมั่นใจได้ว่าไฟล์ฐานข้อมูลจะอยู่ในสถานะที่สอดคล้องกันเสมอ
CouchDB ใช้แบบจำลอง Multi-Version Concurrency Control (MVCC) เนื่องจากไคลเอ็นต์จะเห็นสแนปชอตที่สอดคล้องกันของฐานข้อมูลตั้งแต่ต้นจนจบการดำเนินการอ่าน
เมื่อใดก็ตามที่เอกสารได้รับการอัปเดต CouchDB จะล้างข้อมูลลงในดิสก์และส่วนหัวของฐานข้อมูลที่อัปเดตจะถูกเขียนเป็นสองส่วนติดต่อกันและเหมือนกันเพื่อสร้างเป็น 4k แรกของไฟล์จากนั้นล้างข้อมูลไปยังดิสก์แบบซิงโครนัส การอัปเดตบางส่วนในระหว่างการล้างจะถูกยกเลิก
หากความล้มเหลวเกิดขึ้นขณะส่งส่วนหัวสำเนาที่ยังมีชีวิตอยู่ของส่วนหัวที่เหมือนกันก่อนหน้านี้จะยังคงอยู่เพื่อให้มั่นใจว่าข้อมูลที่ผูกมัดก่อนหน้านี้ทั้งหมดจะเชื่อมโยงกัน ยกเว้นบริเวณส่วนหัวการตรวจสอบความสอดคล้องหรือการแก้ไขหลังจากเกิดเหตุขัดข้องหรือไฟฟ้าดับไม่จำเป็น
การบดอัด
เมื่อใดก็ตามที่พื้นที่ในไฟล์ฐานข้อมูลสูญเปล่าเกินระดับที่กำหนดข้อมูลที่ใช้งานอยู่ทั้งหมดจะถูกคัดลอก (โคลน) ไปยังไฟล์ใหม่ เมื่อกระบวนการคัดลอกเสร็จสิ้นทั้งหมดไฟล์เก่าจะถูกทิ้ง ทั้งหมดนี้ทำได้โดยกระบวนการบดอัด ฐานข้อมูลยังคงออนไลน์อยู่ในระหว่างการบีบอัดและการอัปเดตและการอ่านทั้งหมดได้รับอนุญาตให้ดำเนินการให้เสร็จสมบูรณ์
มุมมอง
ข้อมูลใน CouchDB ถูกจัดเก็บในเอกสารกึ่งโครงสร้างที่มีความยืดหยุ่นตามโครงสร้างโดยนัยของแต่ละบุคคล แต่เป็นรูปแบบเอกสารที่เรียบง่ายสำหรับการจัดเก็บและแบ่งปันข้อมูล หากเราต้องการดูข้อมูลของเราในรูปแบบต่างๆเราจำเป็นต้องมีวิธีกรองจัดระเบียบและรายงานข้อมูลที่ยังไม่ถูกย่อยสลายเป็นตาราง
เพื่อแก้ปัญหานี้ CouchDB จัดเตรียมโมเดลมุมมอง มุมมองเป็นวิธีการรวบรวมและรายงานเกี่ยวกับเอกสารในฐานข้อมูลและสร้างขึ้นตามความต้องการเพื่อรวมเข้าร่วมและรายงานเกี่ยวกับเอกสารฐานข้อมูล เนื่องจากมุมมองถูกสร้างขึ้นแบบไดนามิกและไม่ส่งผลกระทบต่อเอกสารที่อยู่ข้างใต้คุณจึงสามารถนำเสนอมุมมองที่แตกต่างกันของข้อมูลเดียวกันได้มากเท่าที่คุณต้องการ
ประวัติศาสตร์
- CouchDB เขียนด้วยภาษาโปรแกรม Erlang
- เริ่มต้นโดย Damien Katz ในปี 2548
- CouchDB กลายเป็นโครงการ Apache ในปี 2551
CouchDB เวอร์ชันปัจจุบันคือ 1.61