| Apache CouchDB | |
|---|---|
อินเทอร์เฟซการดูแลระบบ Fauxton ของ CouchDB ฐานข้อมูลผู้ใช้ | |
| ผู้เขียนต้นฉบับ | เดเมียน แคทซ์, แจน เลห์นาร์ด, นาโอมิ สเลเตอร์, คริสโตเฟอร์ เลนซ์, เจ. คริส แอนเดอร์สัน, พอล เดวิส, อดัม โคโคลอสกี้, เจสัน เดวีส์, เบอนัวต์ เชสโน, ฟิลิเป้ มานานา, โรเบิร์ต นิวสัน |
| นักพัฒนา | มูลนิธิซอฟต์แวร์ Apache |
| การเปิดตัวครั้งแรก | 2005 ( 2005 ) |
| การปล่อยแบบเสถียร | 3.5.1
/ 9 พฤศจิกายน 2568 ( 9 พฤศจิกายน 2568 ) |
| ที่เก็บข้อมูล |
|
| เขียนใน | เออร์แลง , จาวาสคริปต์ , ซี , ซี++ |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | ฐานข้อมูลเชิงเอกสาร |
| ใบอนุญาต | ใบอนุญาต Apache 2.0 |
| เว็บไซต์ | couchdb.apache.org |
Apache CouchDBเป็น ฐานข้อมูล NoSQL แบบโอเพ่นซอร์ส ที่เน้นเอกสาร ซึ่ง ใช้ งานในErlang
CouchDB ใช้รูปแบบและโปรโตคอลที่หลากหลายในการจัดเก็บ ถ่ายโอน และประมวลผลข้อมูล โดยใช้JSONเพื่อจัดเก็บข้อมูล ใช้ JavaScriptเป็นภาษาคิวรีที่ใช้MapReduceและHTTPสำหรับAPI [
CouchDB เปิดตัวครั้งแรกในปี 2548 และต่อมาได้กลายเป็น โครงการ ของ Apache Software Foundationในปี 2551
ต่างจากฐานข้อมูลเชิงสัมพันธ์ฐานข้อมูล CouchDB จะไม่จัดเก็บข้อมูลและความสัมพันธ์ในตาราง แต่ละฐานข้อมูลจะเป็นชุดของเอกสารที่แยกจากกัน แต่ละเอกสารจะเก็บรักษาข้อมูลและสคีมาของตนเอง แอปพลิเคชันสามารถเข้าถึงฐานข้อมูลได้หลายฐานข้อมูล เช่น ฐานข้อมูลหนึ่งที่เก็บไว้ในโทรศัพท์มือถือของผู้ใช้ และอีกฐานข้อมูลหนึ่งที่เก็บไว้ในเซิร์ฟเวอร์ เมตาดาต้าของเอกสารประกอบด้วยข้อมูลการแก้ไข ทำให้สามารถรวมความแตกต่างใดๆ ที่อาจเกิดขึ้นในขณะที่ฐานข้อมูลถูกตัดการเชื่อมต่อได้
CouchDB ใช้ระบบควบคุมการทำงานพร้อมกันหลายเวอร์ชัน (MVCC) เพื่อไม่ให้ล็อกไฟล์ฐานข้อมูลระหว่างการเขียน ข้อขัดแย้งจะถูกปล่อยให้แอปพลิเคชันแก้ไข โดยทั่วไปการแก้ไขข้อขัดแย้งจะเกี่ยวข้องกับการรวมข้อมูลเข้ากับเอกสารฉบับใดฉบับหนึ่งก่อน จากนั้นจึงลบเอกสารเก่า
คุณสมบัติอื่นๆ ได้แก่ ความหมาย ของ ACIDระดับเอกสารพร้อมความสอดคล้องในที่สุด , MapReduce (แบบเพิ่มหน่วย) และการจำลองข้อมูล (แบบเพิ่มหน่วย) หนึ่งในคุณสมบัติเด่นของ CouchDB คือการจำลองข้อมูลแบบหลายมาสเตอร์ซึ่งช่วยให้สามารถปรับขนาดข้ามเครื่องต่างๆ เพื่อสร้างระบบประสิทธิภาพสูง แอปพลิเคชันเว็บในตัวที่ชื่อว่า Fauxton (เดิมชื่อ Futon) ช่วยในการบริหารจัดการ
ประวัติศาสตร์
Couchเป็นตัวย่อของcluster of unreliable commodity hardware [ โครงการ CouchDB สร้างขึ้นในเดือนเมษายน พ.ศ. 2548 โดย Damien Katz อดีต นักพัฒนา Lotus Notesที่IBMเขาออกทุนโครงการนี้ด้วยตัวเองเกือบสองปี และเผยแพร่เป็นโครงการโอเพนซอร์สภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU
ในเดือนกุมภาพันธ์ พ.ศ. 2551 ได้กลายเป็นโครงการ Apache Incubator และได้รับการเสนอภายใต้Apache Licenseแทนไม่กี่เดือนต่อมา ก็พัฒนาเป็นโครงการระดับสูงสุดส่งผลให้เวอร์ชันเสถียรแรกได้รับการเผยแพร่ในเดือนกรกฎาคม พ.ศ. 2553
ในช่วงต้นปี 2012 Katz ออกจากโครงการเพื่อมุ่งเน้นไปที่Couchbase Server [
นับตั้งแต่ Katz ลาออก โปรเจ็กต์ Apache CouchDB ยังคงดำเนินต่อไป โดยเปิดตัวเวอร์ชัน 1.2 ในเดือนเมษายน 2012 และ 1.3 ในเดือนเมษายน 2013 ในเดือนกรกฎาคม 2013 ชุมชน CouchDB ได้รวมฐานโค้ดสำหรับBigCouchซึ่งเป็นเวอร์ชันคลัสเตอร์ของ CouchDB ของCloudant เข้ากับโปรเจ็กต์ Apache เฟรมเวิร์กคลัสเตอร์ BigCouch รวมอยู่ใน Apache CouchDB เวอร์ชันปัจจุบัน
รองรับการทำคลัสเตอร์แบบเนทีฟในเวอร์ชัน 2.0.0 และ Mango Query Server ใหม่มอบวิธีการง่ายๆ ที่ใช้ JSON ในการดำเนินการคิวรี CouchDB โดยไม่ต้องใช้ JavaScript หรือ MapReduce นอกจากนี้ ในเวอร์ชัน 2.0.0 ยังมีการเปิดตัว Fauxton ซึ่งเป็นเว็บอินเทอร์เฟซในตัวใหม่ เพื่อแทนที่ Futon ซึ่งเป็นเว็บอินเทอร์เฟซในตัวแบบเดิม
คุณสมบัติหลัก
- ความหมายของกรด
- CouchDB นำเสนอความหมายของ ACID โดยดำเนินการดังกล่าวโดยใช้การควบคุมการทำงานพร้อมกันหลายเวอร์ชันซึ่งหมายความว่า CouchDB สามารถจัดการผู้อ่านและผู้เขียนพร้อมกันจำนวนมากได้โดยไม่เกิดข้อขัดแย้ง
- สร้างขึ้นสำหรับออฟไลน์
- CouchDB สามารถจำลองไปยังอุปกรณ์ (เช่น สมาร์ทโฟน) ที่สามารถออฟไลน์ได้ และจัดการซิงค์ข้อมูลให้กับคุณเมื่ออุปกรณ์กลับมาออนไลน์อีกครั้ง
- สถาปัตยกรรมแบบกระจายพร้อมการจำลอง
- CouchDB ได้รับการออกแบบโดยคำนึงถึงการทำสำเนาข้อมูลแบบสองทิศทาง (หรือการซิงโครไนซ์) และการทำงานแบบออฟไลน์ ซึ่งหมายความว่าเรพลิกาหลายเรพลิกาสามารถมีสำเนาข้อมูลเดียวกันเป็นของตัวเอง แก้ไขข้อมูล และซิงค์การเปลี่ยนแปลงเหล่านั้นในภายหลังได้
- การจัดเก็บเอกสาร
- CouchDB จัดเก็บข้อมูลเป็น "เอกสาร" โดยเป็นคู่ฟิลด์/ค่าอย่างน้อยหนึ่งคู่ที่แสดงในรูปแบบJSONค่าของฟิลด์อาจเป็นข้อมูลพื้นฐาน เช่น สตริง ตัวเลข หรือวันที่ แต่ สามารถใช้ รายการแบบเรียงลำดับและอาร์เรย์แบบเชื่อมโยงได้เช่นกัน เอกสารทุกฉบับในฐานข้อมูล CouchDB มีรหัสเฉพาะตัว และไม่มีโครงสร้างเอกสารที่จำเป็น
- ความสม่ำเสมอในที่สุด
- CouchDB รับประกันความสอดคล้องในที่สุดเพื่อให้สามารถให้ทั้งความพร้อมใช้งานและความทนทานต่อการแบ่งพาร์ติชันได้
- แผนที่/ลดมุมมองและดัชนี
- ข้อมูลที่จัดเก็บไว้จะถูกจัดโครงสร้างโดยใช้มุมมอง ใน CouchDB แต่ละมุมมองถูกสร้างขึ้นโดย ฟังก์ชัน JavaScriptซึ่งทำหน้าที่เป็น Map ครึ่งหนึ่งของ การดำเนินการ map /reduce ฟังก์ชันนี้จะแปลงเอกสารเป็นค่าเดี่ยวที่ส่งคืน CouchDB สามารถสร้างดัชนีมุมมองและอัปเดตดัชนีเหล่านั้นเมื่อมีการเพิ่ม ลบ หรืออัปเดตเอกสาร
- เอพีไอเอชทีที
- รายการทั้งหมดมี URI เฉพาะตัวที่เปิดเผยผ่าน HTTP โดยใช้เมธอด HTTP POST, GET, PUT และ DELETE สำหรับการดำเนินการ CRUDพื้นฐานสี่อย่าง(สร้าง อ่าน อัปเดต ลบ) บนทรัพยากรทั้งหมด
CouchDB ยังมีอินเทอร์เฟซการดูแลระบบในตัวที่สามารถเข้าถึงได้ผ่านเว็บที่เรียกว่า Fauxton
กรณีการใช้งานและการปรับใช้การผลิต
ความสามารถในการจำลองและซิงโครไนซ์ของ CouchDB ทำให้เหมาะอย่างยิ่งสำหรับการใช้งานในอุปกรณ์พกพาที่ไม่มีการรับประกันการเชื่อมต่อเครือข่าย และแอปพลิเคชันจะต้องทำงานแบบออฟไลน์ต่อไป
CouchDB เหมาะอย่างยิ่งสำหรับแอปพลิเคชันที่มีข้อมูลสะสมและเปลี่ยนแปลงเป็นครั้งคราว ซึ่งต้องรันคิวรีที่กำหนดไว้ล่วงหน้า และการกำหนดเวอร์ชันเป็นสิ่งสำคัญ (เช่น ระบบ CRM, CMS) การจำลองแบบ Master-Master เป็นฟีเจอร์ที่น่าสนใจเป็นพิเศษ ช่วยให้ปรับใช้หลายไซต์ได้อย่างง่ายดาย
ผู้ใช้งาน
ผู้ใช้ CouchDB ได้แก่:
- CERNใช้ CouchDB เป็นฐานข้อมูลสำหรับระบบการจัดการข้อมูลที่Large Hadron Collider [
- สภากาชาดใช้แอปพลิเคชัน iDAT เพื่อจัดทำรายงานกรณีฉุกเฉินทางอิเล็กทรอนิกส์ในพื้นที่ภัยพิบัติ โดย CouchDB ถูกใช้เป็นฐานข้อมูลแบบเพียร์ทูเพียร์แบบออฟไลน์หลายโหนด
- บริการ IBM Cloud มีพื้นฐานอยู่บน CouchDB
- United Airlinesใช้ CouchDB สำหรับระบบความบันเทิงบนเครื่องบินในเครื่องบินมากกว่า 3,000 ลำ
- Amadeus IT Groupสำหรับระบบแบ็คเอนด์บางส่วนของพวกเขา
- Credit Suisseสำหรับใช้ภายในแผนกสินค้าโภคภัณฑ์สำหรับกรอบงานตลาดของพวกเขา
- Meeboสำหรับแพลตฟอร์มโซเชียล (เว็บและแอปพลิเคชัน) Meebo ถูกซื้อโดย Google และผลิตภัณฑ์ส่วนใหญ่ถูกปิดตัวลงในวันที่ 12 กรกฎาคม 2012
- npmใช้ CouchDB เป็นฐานข้อมูลจำลองสำหรับรีจิสทรีแพ็คเกจของพวกเขา
- Sophosสำหรับระบบแบ็คเอนด์บางส่วนของพวกเขา
- BBCสำหรับแพลตฟอร์ม CMS แบบไดนามิก
- Canonicalเริ่มใช้ในปี 2009 สำหรับบริการซิงโครไนซ์ "Ubuntu One" แต่หยุดใช้เมื่อเดือนพฤศจิกายน 2011
- CANAL+สำหรับแพลตฟอร์มออนดีมานด์ระดับนานาชาติที่ CANAL+ Overseas
- Protogrid เป็นแบ็กเอนด์จัดเก็บข้อมูลสำหรับกรอบการทำงานการพัฒนาแอปพลิเคชันอย่างรวดเร็ว
การจัดการข้อมูล: เอกสารและมุมมอง
CouchDB จัดการชุด เอกสาร JSONโดย เอกสารจะถูกจัดระเบียบผ่านมุมมอง (views) มุมมองถูกกำหนดด้วยฟังก์ชันรวมและตัวกรองจะถูกคำนวณแบบขนาน เช่นเดียวกับMapReduce
โดยทั่วไปแล้วมุมมองจะถูกเก็บไว้ในฐานข้อมูลและดัชนีจะได้รับการอัปเดตอย่างต่อเนื่อง CouchDB รองรับระบบมุมมองโดยใช้เซิร์ฟเวอร์ซ็อกเก็ตภายนอกและโปรโตคอลแบบ JSON ด้วยเหตุนี้ เซิร์ฟเวอร์มุมมองจึงได้รับการพัฒนาขึ้นในหลากหลายภาษา (โดยค่าเริ่มต้นคือ JavaScript แต่ก็มี PHP, Ruby, Python และ Erlang ด้วย)
การเข้าถึงข้อมูลผ่าน HTTP
แอปพลิเคชันโต้ตอบกับ CouchDB ผ่านทาง HTTP ตัวอย่างต่อไปนี้แสดงตัวอย่างการใช้cURLซึ่งเป็นยูทิลิตี้บรรทัดคำสั่ง ตัวอย่างเหล่านี้สมมติว่า CouchDB ทำงานอยู่บนlocalhost (127.0.0.1) บนพอร์ต 5984
| การกระทำ | ขอ | การตอบสนอง |
|---|---|---|
| การเข้าถึงข้อมูลเซิร์ฟเวอร์ | ขด http://127.0.0.1:5984/
|
{
"couchdb" : "ยินดีต้อนรับ" , "เวอร์ชัน" : "1.1.0" }
|
| การสร้างฐานข้อมูลชื่อwiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{ "โอเค" : จริง}
|
| กำลังพยายามสร้างฐานข้อมูลที่สองชื่อwiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{
"error" : "file_exists" , "reason" : "ไม่สามารถสร้างฐานข้อมูลได้ ไฟล์นี้มีอยู่แล้ว" }
|
| ดึงข้อมูลเกี่ยวกับฐานข้อมูล วิกิ | ขด http://127.0.0.1:5984/wiki
|
{
"db_name" : "wiki" , "doc_count" : 0 , "doc_del_count" : 0 , "update_seq" : 0 , "purge_seq" : 0 , "compact_running" : false , " disk_size" : 79 , "instance_start_time" : "1272453873691070" , "disk_format_version" : 5 }
|
| ลบวิกิ ฐานข้อมูล | curl -X ลบ http://127.0.0.1:5984/wiki
|
{ "โอเค" : จริง}
|
| สร้างเอกสารโดยขอให้ CouchDB ระบุรหัสเอกสาร | curl -X POST -H "Content-Type: application/json" --data \ '{ "text" : "Wikipedia บน CouchDB", "rating": 5 }' \
http://127.0.0.1:5984/วิกิ
|
{
"ตกลง" : true , "id" : "123BAC" , "rev" : "946B7D1C" }
|
| รับรายชื่อฐานข้อมูล | ขด http://127.0.0.1:5984/_all_dbs
|
[ "_replicator" , "_users" , "wiki" ]
|
ส่วนประกอบโอเพนซอร์ส
CouchDB รวมโครงการโอเพ่นซอร์สอื่น ๆ อีกหลายโครงการเป็นส่วนหนึ่งของแพ็คเกจเริ่มต้น
| ส่วนประกอบ | คำอธิบาย | ใบอนุญาต |
|---|---|---|
| เออร์ลัง | Erlang เป็น ภาษาโปรแกรมแบบพร้อมกัน สำหรับวัตถุประสงค์ทั่วไปและ ระบบ รันไทม์ชุดย่อยแบบลำดับของ Erlang เป็นภาษาฟังก์ชันที่มีการประเมินอย่างเข้มงวดการกำหนดเดี่ยวและการพิมพ์แบบไดนามิก | Apache 2.0 (รุ่น 18.0 ขึ้นไป) ใบอนุญาตสาธารณะ Erlang (รุ่นก่อนหน้า) |
| ห้องไอซียู | International Components for Unicode (ICU) เป็นโครงการโอเพ่นซอร์สของไลบรารีC / C++และJava ที่สมบูรณ์แบบสำหรับ การรองรับ Unicode การทำให้ ซอฟต์แวร์เป็นสากลและการทำให้ซอฟต์แวร์เป็นสากล | ใบอนุญาตยูนิโค้ด |
| เจคิวรี | jQuery เป็นไลบรารี JavaScript ข้ามเบราว์เซอร์ที่ มีน้ำหนักเบา ซึ่งเน้นการโต้ตอบระหว่างJavaScriptและHTML | ใบอนุญาต MIT |
| โอเพ่นเอสเอสแอล | OpenSSL คือการนำ โปรโตคอล SSL และ TLS มาใช้งาน แบบโอเพนซอร์ส ไลบรารีหลัก(เขียนด้วยภาษา C ) ทำหน้าที่ เข้ารหัสข้อมูลพื้นฐานและจัดเตรียมฟังก์ชันยูทิลิตี้ต่างๆ | Apache 1.0และใบอนุญาต BSD สี่ข้อ |
| สไปเดอร์มังกี้ | SpiderMonkey เป็นเอ็นจิ้น JavaScript ประสิทธิภาพสูง ที่ดูแลโดยMozilla Foundationประกอบด้วยอินเทอร์ พรีเตอร์ คอม ไพเลอร์ JITและตัวรวบรวมขยะ | เอ็มพีแอล 2.0 |
ดูเพิ่มเติม
บรรณานุกรม
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 พฤศจิกายน 2009), CouchDB: The Definitive Guide (พิมพ์ครั้งที่ 1), O'Reilly Media , หน้า 300, ISBN 978-0-596-15816-3
- เลนนอน, โจ (15 ธันวาคม 2552), Beginning CouchDB (ฉบับพิมพ์ครั้งที่ 1), Apress , p. 300, ไอเอสบีเอ็น 978-1-4302-7237-3เก็บถาวรจากแหล่งดั้งเดิมเมื่อวันที่ 5 ธันวาคม 2553 สืบค้นเมื่อ1 พฤศจิกายน 2552
- Holt, Bradley (7 มีนาคม 2011), การเขียนและการสอบถามมุมมอง MapReduce ใน CouchDB (ฉบับที่ 1), O'Reilly Media , หน้า 76, ISBN 978-1-4493-0312-9
- Holt, Bradley (11 เมษายน 2011), Scaling CouchDB (พิมพ์ครั้งที่ 1), O'Reilly Media , หน้า 72, ISBN 978-1-4493-0343-3
- Brown, MC (31 ตุลาคม 2011), การเริ่มต้นใช้งาน CouchDB (พิมพ์ครั้งที่ 1), O'Reilly Media , หน้า 50, ISBN 978-1-4493-0755-4
- Thompson, Mick (2 สิงหาคม 2011), การเริ่มต้นใช้งาน GEO, CouchDB และ Node.js (พิมพ์ครั้งที่ 1), O'Reilly Media , หน้า 64, ISBN 978-1-4493-0752-3
ลิงค์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- CouchDB: คู่มือฉบับสมบูรณ์
- เอกสารอ้างอิง HTTP API ที่สมบูรณ์
- ไลบรารี PHP5 ที่เรียบง่ายสำหรับการสื่อสารกับ CouchDB
- ไคลเอนต์ CouchDB แบบอะซิงโครนัสสำหรับ Java
- ไคลเอนต์ CouchDB แบบอะซิงโครนัสสำหรับ Scala
- Lehnardt, Jan (2008). "Couch DB ที่ระดับความสูง 10,000 ฟุต". Erlang eXchange 2008.เก็บถาวรจากแหล่งเดิมเมื่อวันที่ 9 พฤศจิกายน 2012. สืบค้นเมื่อ15 เมษายน 2012 .
- Lenhardt, Jan (2009). "CouchDB สำหรับนักพัฒนา Erlang". Erlang Factory London 2009.เก็บถาวรจากแหล่งเดิมเมื่อวันที่ 19 มิถุนายน 2011. สืบค้นเมื่อ15 เมษายน 2012 .
- Katz, Damien (มกราคม 2009). "CouchDB and Me". RubyFringe . InfoQ. เก็บถาวรจากแหล่งเดิมเมื่อวันที่ 27 เมษายน 2011. สืบค้นเมื่อ15 เมษายน 2012 .