เหตุใดฉันจึงควรใช้ฐานข้อมูลตามเอกสารเช่น CouchDB แทนที่จะใช้ฐานข้อมูลเชิงสัมพันธ์ มีแอพพลิเคชั่นหรือโดเมนแบบทั่วไปที่ฐานข้อมูลเอกสารนั้นเหมาะสมกว่าฐานข้อมูลเชิงสัมพันธ์หรือไม่?
เหตุใดฉันจึงควรใช้ฐานข้อมูลตามเอกสารเช่น CouchDB แทนที่จะใช้ฐานข้อมูลเชิงสัมพันธ์ มีแอพพลิเคชั่นหรือโดเมนแบบทั่วไปที่ฐานข้อมูลเอกสารนั้นเหมาะสมกว่าฐานข้อมูลเชิงสัมพันธ์หรือไม่?
คำตอบ:
อาจเป็นไปได้ว่าคุณไม่ควร :-)
คำตอบที่ชัดเจนที่สุดอันดับสองคือคุณควรใช้ถ้าข้อมูลของคุณไม่สัมพันธ์ สิ่งนี้มักแสดงให้เห็นว่าไม่มีวิธีง่ายๆในการอธิบายข้อมูลของคุณเป็นชุดของคอลัมน์ ตัวอย่างที่ดีคือฐานข้อมูลที่คุณเก็บเอกสารกระดาษจริง ๆ เช่นการสแกนจดหมายสำนักงาน ข้อมูลเป็น PDF ที่สแกนและคุณมีข้อมูลเมตาบางส่วนที่มีอยู่เสมอ (สแกนที่สแกนตามประเภทของเอกสาร) และฟิลด์เมทาดาทาที่เป็นไปได้จำนวนมากซึ่งบางครั้ง (หมายเลขลูกค้าหมายเลขซัพพลายเออร์หมายเลขคำสั่งซื้อเก็บไว้จนถึง OCR แบบเต็มข้อความ ฯลฯ ) โดยปกติแล้วคุณไม่ทราบล่วงหน้าว่าจะเพิ่มเขตข้อมูลเมตาใดภายในสองปีถัดไป สิ่งต่างๆเช่น CouchDB ทำงานได้ดีกว่าสำหรับข้อมูลประเภทนั้นมากกว่าฐานข้อมูลเชิงสัมพันธ์
ฉันเองก็ชอบความจริงที่ว่าฉันไม่ต้องการไคลเอนต์ไลบรารีสำหรับ CouchDB ยกเว้นไคลเอนต์ HTTP ซึ่งปัจจุบันรวมอยู่ในเกือบทุกภาษาโปรแกรม
คำตอบที่ชัดเจนอย่างน้อยน่าจะ: ถ้าคุณรู้สึกว่าไม่มีความเจ็บปวดโดยใช้ RDBMS อยู่กับมัน หากคุณต้องหลีกเลี่ยง RDBMS ของคุณเพื่อให้งานของคุณเสร็จสิ้นฐานข้อมูลที่มุ่งเน้นเอกสารอาจคุ้มค่ากับการดู
สำหรับรายการที่ซับซ้อนมากขึ้นตรวจสอบการโพสต์ของ Richard Jonesนี้
CouchDB (จากเว็บไซต์ของพวกเขา)
เซิร์ฟเวอร์ฐานข้อมูลเอกสารเข้าถึงได้ผ่าน RESTful JSON API โดยทั่วไปฐานข้อมูลเชิงสัมพันธ์นั้นไม่ได้เข้าถึงผ่านบริการ REST แต่ต้องการ SQL API ที่ซับซ้อนกว่านี้มาก บ่อยครั้งที่ API (JDBC, ODBC ฯลฯ ) เหล่านี้ค่อนข้างซับซ้อน ส่วนที่เหลือค่อนข้างง่าย
Ad-hoc และ schema-free ด้วยพื้นที่ที่อยู่แบบแฟลต ฐานข้อมูลเชิงสัมพันธ์มีสคีมาที่ซับซ้อนและคงที่ คุณกำหนดตารางคอลัมน์ดัชนีลำดับมุมมองและสิ่งอื่น ๆ โซฟาไม่จำเป็นต้องมีการวางแผนขั้นสูงที่ซับซ้อนราคาแพงและเปราะบาง
กระจายการจำลองแบบที่แข็งแกร่งและเพิ่มขึ้นด้วยการตรวจจับและจัดการความขัดแย้งแบบสองทิศทาง ผลิตภัณฑ์เชิงพาณิชย์ของ SQL บางตัวเสนอสิ่งนี้ เนื่องจาก SQL API และสคีมาคงที่นี่จึงซับซ้อนยากและมีราคาแพง สำหรับที่นอนมันดูเรียบง่ายและราคาไม่แพง
สามารถสืบค้นและสร้างดัชนีได้ซึ่งมีเอ็นจิ้นการรายงานที่เน้นตารางซึ่งใช้ Javascript เป็นภาษาของแบบสอบถาม ดังนั้น SQL และฐานข้อมูลเชิงสัมพันธ์ ไม่มีอะไรใหม่ที่นี่
ดังนั้น. ทำไมต้อง CouchDB
สำหรับการจัดเก็บและให้บริการเซิร์ฟเวอร์ - ข้อมูลอย่างโง่เขลา
ในสองสามสัปดาห์ที่ผ่านมาฉันเล่นกับแอพ lifestream ที่โพลฟีดของฉัน (อร่อย, flickr, github, twitter ... ) และเก็บไว้ใน couchdb ความสวยงามของ couchdb คือมันช่วยให้ฉันเก็บข้อมูลดั้งเดิมไว้ในโครงสร้างดั้งเดิมโดยไม่มีค่าใช้จ่าย ฉันเพิ่มฟิลด์ 'คลาส' ลงในเอกสารแต่ละฉบับจัดเก็บเซิร์ฟเวอร์ต้นทางและเขียนคลาสการแสดงผลจาวาสคริปต์สำหรับแต่ละแหล่งที่มา
โดยทั่วไปเมื่อใดก็ตามที่เซิร์ฟเวอร์ของคุณสื่อสารกับเซิร์ฟเวอร์อื่นพื้นที่เก็บข้อมูลแบบ Schema-less จะดีที่สุดเนื่องจากคุณไม่สามารถควบคุมสคีมาได้ เป็นโบนัส couchdb ใช้โปรโตคอลดั้งเดิมของเซิร์ฟเวอร์และไคลเอนต์ - JSON สำหรับการเป็นตัวแทนและ HTTP REST สำหรับการขนส่ง
การพัฒนาแอปพลิเคชั่นอย่างรวดเร็วเป็นสิ่งสำคัญ
เมื่อฉันพัฒนาสคีมาของฉันอยู่ตลอดเวลาฉันหงุดหงิดอยู่ตลอดเวลาโดยต้องรักษาสคีมาใน MySQL / SQLite ในขณะที่ฉันยังไม่ได้ทำ CouchDB มากเกินไปฉันชอบความเรียบง่ายในการพัฒนาสคีมาในระหว่างกระบวนการ RAD
กรณีที่คุณอาจไม่ต้องการใช้ฐานข้อมูลที่ไม่เกี่ยวข้องคือเมื่อคุณมีความสัมพันธ์แบบกลุ่มต่อกลุ่มจำนวนมาก ฉันยังไม่เข้าใจวิธีการสร้างฟังก์ชั่น MapReduce ที่ดีเกี่ยวกับความสัมพันธ์ประเภทนี้โดยเฉพาะถ้าคุณจำเป็นต้องมีเมทาดาทาในความสัมพันธ์ที่เข้าร่วม ฉันไม่แน่ใจ แต่ฉันไม่คิดว่าฟังก์ชั่นแผนที่ CouchDB สามารถเรียกคิวรีของตนเองบนฐานข้อมูลเนื่องจากอาจทำให้ลูปไม่สิ้นสุด
ใช้ฐานข้อมูลตามเอกสารเมื่อคุณไม่ต้องการจัดเก็บข้อมูลในตารางที่มีเขตข้อมูลขนาดสม่ำเสมอสำหรับแต่ละระเบียน คุณจำเป็นต้องจัดเก็บแต่ละระเบียนเป็นเอกสารที่มีคุณสมบัติบางอย่างแทน สามารถเพิ่มฟิลด์จำนวนเท่าใดก็ได้ที่มีความยาวใด ๆ ลงในเอกสารได้ตลอดเวลาโดยไม่จำเป็นต้อง "แก้ไขตาราง" ก่อน เขตข้อมูลในเอกสารยังสามารถมีข้อมูลได้หลายชิ้น
เพื่ออธิบายอย่างละเอียดเกี่ยวกับ smdelfin: ความยืดหยุ่น คุณสามารถจัดเก็บข้อมูลในโครงสร้างใด ๆ (ไม่มีโครงสร้างและทั้งหมด) และเอกสารทั้งหมดอาจแตกต่างกันโดยสิ้นเชิง CouchDB โดยเฉพาะมีประโยชน์เพราะด้วยดัชนี "มุมมอง" คุณสามารถกรองเอกสารเฉพาะและแบบสอบถามเฉพาะมุมมองนั้นเมื่อคุณต้องการชุดย่อยของฐานข้อมูลของคุณ
จุดฐานข้อมูลเอกสารที่ชนะเลิศที่สุดของฉันที่เก็บข้อมูลในรูปแบบ JSON: นี่เป็นรูปแบบดั้งเดิมสำหรับ JavaScript ดังนั้นเว็บแอปพลิเคชัน JavaScript ทำงานได้ดีอย่างเหลือเชื่อกับ CouchDB เมื่อเร็ว ๆ นี้ฉันได้สร้างแอปพลิเคชันเว็บที่ใช้ CouchDB และเป็นจรวดที่รวดเร็วในขณะที่ยังสามารถจัดการโครงสร้างข้อมูลที่เปลี่ยนแปลงตลอดเวลา
ฐานข้อมูลที่ใช้เอกสารมีข้อได้เปรียบใหญ่กว่าฐานข้อมูลเชิงสัมพันธ์เนื่องจากไม่จำเป็นต้องกำหนดสคีมาล่วงหน้าก่อนที่จะสามารถป้อนข้อมูลใด ๆ ได้
นอกจากนี้คุณควรใช้ฐานข้อมูลเอกสารหากข้อมูลของคุณไม่สัมพันธ์และไม่สามารถเก็บไว้ในตารางได้ แต่ควรเป็นชุดภาพหรือบทความในหนังสือพิมพ์
ข้อดีอีกประการคือความง่ายในการใช้ฐานข้อมูลที่เป็นเอกสารในการพัฒนาเว็บ สำหรับโมเดลฐานข้อมูล NoSQL เชิงลึกเพิ่มเติมโปรดตรวจสอบแหล่งที่มานี้: https://arxiv.org/ftp/arxiv/papers/1509/1509.015035.pdf