เหตุใดฉันจึงควรใช้ฐานข้อมูลตามเอกสารแทนฐานข้อมูลเชิงสัมพันธ์


188

เหตุใดฉันจึงควรใช้ฐานข้อมูลตามเอกสารเช่น CouchDB แทนที่จะใช้ฐานข้อมูลเชิงสัมพันธ์ มีแอพพลิเคชั่นหรือโดเมนแบบทั่วไปที่ฐานข้อมูลเอกสารนั้นเหมาะสมกว่าฐานข้อมูลเชิงสัมพันธ์หรือไม่?


บางทีฐานข้อมูลเชิงเอกสารอาจคล้ายกันในบางวิธีกับฐานข้อมูล "entity-attribute-value" (EAV)
ChrisW

คำตอบ:


167

อาจเป็นไปได้ว่าคุณไม่ควร :-)

คำตอบที่ชัดเจนที่สุดอันดับสองคือคุณควรใช้ถ้าข้อมูลของคุณไม่สัมพันธ์ สิ่งนี้มักแสดงให้เห็นว่าไม่มีวิธีง่ายๆในการอธิบายข้อมูลของคุณเป็นชุดของคอลัมน์ ตัวอย่างที่ดีคือฐานข้อมูลที่คุณเก็บเอกสารกระดาษจริง ๆ เช่นการสแกนจดหมายสำนักงาน ข้อมูลเป็น PDF ที่สแกนและคุณมีข้อมูลเมตาบางส่วนที่มีอยู่เสมอ (สแกนที่สแกนตามประเภทของเอกสาร) และฟิลด์เมทาดาทาที่เป็นไปได้จำนวนมากซึ่งบางครั้ง (หมายเลขลูกค้าหมายเลขซัพพลายเออร์หมายเลขคำสั่งซื้อเก็บไว้จนถึง OCR แบบเต็มข้อความ ฯลฯ ) โดยปกติแล้วคุณไม่ทราบล่วงหน้าว่าจะเพิ่มเขตข้อมูลเมตาใดภายในสองปีถัดไป สิ่งต่างๆเช่น CouchDB ทำงานได้ดีกว่าสำหรับข้อมูลประเภทนั้นมากกว่าฐานข้อมูลเชิงสัมพันธ์

ฉันเองก็ชอบความจริงที่ว่าฉันไม่ต้องการไคลเอนต์ไลบรารีสำหรับ CouchDB ยกเว้นไคลเอนต์ HTTP ซึ่งปัจจุบันรวมอยู่ในเกือบทุกภาษาโปรแกรม

คำตอบที่ชัดเจนอย่างน้อยน่าจะ: ถ้าคุณรู้สึกว่าไม่มีความเจ็บปวดโดยใช้ RDBMS อยู่กับมัน หากคุณต้องหลีกเลี่ยง RDBMS ของคุณเพื่อให้งานของคุณเสร็จสิ้นฐานข้อมูลที่มุ่งเน้นเอกสารอาจคุ้มค่ากับการดู

สำหรับรายการที่ซับซ้อนมากขึ้นตรวจสอบการโพสต์ของ Richard Jonesนี้


1
ฉันไม่เคยเห็นสกีมาฐานข้อมูลใด ๆ ในเวลาสองปีที่ผ่านมาคล้ายกับสคีมาดั้งเดิมที่เราเริ่มต้นด้วย ... ดังนั้นทุกอย่างเท่าเทียมกัน (ซึ่งไม่ใช่ ... ) คุณควรใช้ฐานข้อมูล schemaless = เอกสารที่มุ่งเน้น; ซึ่งฉันคิดว่าเป็นชื่อที่ทำให้เข้าใจผิดค่อนข้าง ...
ᆺᆼ

3
@ int3 หากคุณไม่สามารถอธิบายข้อมูลของคุณเป็นชุดของคอลัมน์คุณจะเขียนเคียวรีอัจฉริยะในข้อมูลดังกล่าวได้อย่างไร
Clay Smith

46

CouchDB (จากเว็บไซต์ของพวกเขา)

  • เซิร์ฟเวอร์ฐานข้อมูลเอกสารเข้าถึงได้ผ่าน RESTful JSON API โดยทั่วไปฐานข้อมูลเชิงสัมพันธ์นั้นไม่ได้เข้าถึงผ่านบริการ REST แต่ต้องการ SQL API ที่ซับซ้อนกว่านี้มาก บ่อยครั้งที่ API (JDBC, ODBC ฯลฯ ) เหล่านี้ค่อนข้างซับซ้อน ส่วนที่เหลือค่อนข้างง่าย

  • Ad-hoc และ schema-free ด้วยพื้นที่ที่อยู่แบบแฟลต ฐานข้อมูลเชิงสัมพันธ์มีสคีมาที่ซับซ้อนและคงที่ คุณกำหนดตารางคอลัมน์ดัชนีลำดับมุมมองและสิ่งอื่น ๆ โซฟาไม่จำเป็นต้องมีการวางแผนขั้นสูงที่ซับซ้อนราคาแพงและเปราะบาง

  • กระจายการจำลองแบบที่แข็งแกร่งและเพิ่มขึ้นด้วยการตรวจจับและจัดการความขัดแย้งแบบสองทิศทาง ผลิตภัณฑ์เชิงพาณิชย์ของ SQL บางตัวเสนอสิ่งนี้ เนื่องจาก SQL API และสคีมาคงที่นี่จึงซับซ้อนยากและมีราคาแพง สำหรับที่นอนมันดูเรียบง่ายและราคาไม่แพง

  • สามารถสืบค้นและสร้างดัชนีได้ซึ่งมีเอ็นจิ้นการรายงานที่เน้นตารางซึ่งใช้ Javascript เป็นภาษาของแบบสอบถาม ดังนั้น SQL และฐานข้อมูลเชิงสัมพันธ์ ไม่มีอะไรใหม่ที่นี่

ดังนั้น. ทำไมต้อง CouchDB

  • REST นั้นง่ายกว่า JDBC หรือ ODBC
  • ไม่มี Schema นั้นง่ายกว่า Schema
  • กระจายในลักษณะที่ดูเรียบง่ายและราคาไม่แพง

12
ในขณะที่ฉันเป็นแฟนตัวยงของฐานข้อมูล NoSQL การอ้างสิทธิ์ครั้งแรก (REST นั้นง่ายกว่า JDBC) เป็นเรื่องที่น่าสงสัยมาก
ᆼᆺᆼ

2
โปรโตคอล REST นั้นค่อนข้างง่ายสำหรับฉันเนื่องจากเป็นเพียง HTTP: ไร้สัญชาติวิธีการเล็กน้อย ฯลฯ เป็นต้นบางที JDBC นั้นง่าย (อยู่ใต้ฝากระโปรง) ง่าย ดูเหมือนจะไม่ง่ายกว่านี้
S.Lott

5
@ S.Lott คำตอบไม่ควรเป็น "สามัญ" มากกว่ามุ่งสู่ CouchDb เท่านั้นใช่หรือไม่
Pacerier

"การวางแผนขั้นสูงที่เปราะบาง" กับอะไร จากประสบการณ์ของฉันทางเลือกคือไม่มีการวางแผนซึ่งนำไปสู่สปาเก็ตตี้โครงสร้างข้อมูลที่ปรับเปลี่ยนได้อย่างรวดเร็ว
Tejay Cardon

26

สำหรับการจัดเก็บและให้บริการเซิร์ฟเวอร์ - ข้อมูลอย่างโง่เขลา

ในสองสามสัปดาห์ที่ผ่านมาฉันเล่นกับแอพ lifestream ที่โพลฟีดของฉัน (อร่อย, flickr, github, twitter ... ) และเก็บไว้ใน couchdb ความสวยงามของ couchdb คือมันช่วยให้ฉันเก็บข้อมูลดั้งเดิมไว้ในโครงสร้างดั้งเดิมโดยไม่มีค่าใช้จ่าย ฉันเพิ่มฟิลด์ 'คลาส' ลงในเอกสารแต่ละฉบับจัดเก็บเซิร์ฟเวอร์ต้นทางและเขียนคลาสการแสดงผลจาวาสคริปต์สำหรับแต่ละแหล่งที่มา

โดยทั่วไปเมื่อใดก็ตามที่เซิร์ฟเวอร์ของคุณสื่อสารกับเซิร์ฟเวอร์อื่นพื้นที่เก็บข้อมูลแบบ Schema-less จะดีที่สุดเนื่องจากคุณไม่สามารถควบคุมสคีมาได้ เป็นโบนัส couchdb ใช้โปรโตคอลดั้งเดิมของเซิร์ฟเวอร์และไคลเอนต์ - JSON สำหรับการเป็นตัวแทนและ HTTP REST สำหรับการขนส่ง


ทำไมไม่เพียงเก็บไว้ในไฟล์หรือไฟล์ต่อฟีด
j_random_hacker

6
เพราะ couchdb ยังให้คุณสร้างมุมมองที่น่าสนใจโดยใช้แผนที่ / ลด ตัวอย่างเช่นฉันสามารถสร้างมุมมองตามแหล่งข้อมูลหรือฉันสามารถคำนวณผลรวมสำหรับแต่ละแหล่งที่มา
daonb

4
นั่นเป็นจุดที่ยอดเยี่ยม ... หากคุณกำลังใช้ข้อมูลและไม่สามารถควบคุมโครงสร้างข้อมูลขาเข้า - ใช้ที่เก็บเอกสาร
Joshua Robinson

1
นี่คืออาร์กิวเมนต์แรกเชื่อจริงๆผมเคยได้ยินสำหรับมูลค่าของฐานข้อมูล NoSQL
คาเลบ McNevin

20

การพัฒนาแอปพลิเคชั่นอย่างรวดเร็วเป็นสิ่งสำคัญ

เมื่อฉันพัฒนาสคีมาของฉันอยู่ตลอดเวลาฉันหงุดหงิดอยู่ตลอดเวลาโดยต้องรักษาสคีมาใน MySQL / SQLite ในขณะที่ฉันยังไม่ได้ทำ CouchDB มากเกินไปฉันชอบความเรียบง่ายในการพัฒนาสคีมาในระหว่างกระบวนการ RAD

กรณีที่คุณอาจไม่ต้องการใช้ฐานข้อมูลที่ไม่เกี่ยวข้องคือเมื่อคุณมีความสัมพันธ์แบบกลุ่มต่อกลุ่มจำนวนมาก ฉันยังไม่เข้าใจวิธีการสร้างฟังก์ชั่น MapReduce ที่ดีเกี่ยวกับความสัมพันธ์ประเภทนี้โดยเฉพาะถ้าคุณจำเป็นต้องมีเมทาดาทาในความสัมพันธ์ที่เข้าร่วม ฉันไม่แน่ใจ แต่ฉันไม่คิดว่าฟังก์ชั่นแผนที่ CouchDB สามารถเรียกคิวรีของตนเองบนฐานข้อมูลเนื่องจากอาจทำให้ลูปไม่สิ้นสุด


1
จุดที่ดีเยี่ยม Document (และ schemaless อื่น ๆ ) datastores นั้นยอดเยี่ยมสำหรับการพัฒนาระยะแรกอย่างรวดเร็ว อย่างไรก็ตามด้วยเหตุผลเดียวกันพวกเขายอดเยี่ยมสำหรับการสร้างต้นแบบขั้นต้นพวกเขามีปัญหาสำหรับการใช้งานการผลิตที่แข็งแกร่ง
Tejay Cardon

6

ใช้ฐานข้อมูลตามเอกสารเมื่อคุณไม่ต้องการจัดเก็บข้อมูลในตารางที่มีเขตข้อมูลขนาดสม่ำเสมอสำหรับแต่ละระเบียน คุณจำเป็นต้องจัดเก็บแต่ละระเบียนเป็นเอกสารที่มีคุณสมบัติบางอย่างแทน สามารถเพิ่มฟิลด์จำนวนเท่าใดก็ได้ที่มีความยาวใด ๆ ลงในเอกสารได้ตลอดเวลาโดยไม่จำเป็นต้อง "แก้ไขตาราง" ก่อน เขตข้อมูลในเอกสารยังสามารถมีข้อมูลได้หลายชิ้น


1

เพื่ออธิบายอย่างละเอียดเกี่ยวกับ smdelfin: ความยืดหยุ่น คุณสามารถจัดเก็บข้อมูลในโครงสร้างใด ๆ (ไม่มีโครงสร้างและทั้งหมด) และเอกสารทั้งหมดอาจแตกต่างกันโดยสิ้นเชิง CouchDB โดยเฉพาะมีประโยชน์เพราะด้วยดัชนี "มุมมอง" คุณสามารถกรองเอกสารเฉพาะและแบบสอบถามเฉพาะมุมมองนั้นเมื่อคุณต้องการชุดย่อยของฐานข้อมูลของคุณ

จุดฐานข้อมูลเอกสารที่ชนะเลิศที่สุดของฉันที่เก็บข้อมูลในรูปแบบ JSON: นี่เป็นรูปแบบดั้งเดิมสำหรับ JavaScript ดังนั้นเว็บแอปพลิเคชัน JavaScript ทำงานได้ดีอย่างเหลือเชื่อกับ CouchDB เมื่อเร็ว ๆ นี้ฉันได้สร้างแอปพลิเคชันเว็บที่ใช้ CouchDB และเป็นจรวดที่รวดเร็วในขณะที่ยังสามารถจัดการโครงสร้างข้อมูลที่เปลี่ยนแปลงตลอดเวลา


0

ฐานข้อมูลที่ใช้เอกสารมีข้อได้เปรียบใหญ่กว่าฐานข้อมูลเชิงสัมพันธ์เนื่องจากไม่จำเป็นต้องกำหนดสคีมาล่วงหน้าก่อนที่จะสามารถป้อนข้อมูลใด ๆ ได้

นอกจากนี้คุณควรใช้ฐานข้อมูลเอกสารหากข้อมูลของคุณไม่สัมพันธ์และไม่สามารถเก็บไว้ในตารางได้ แต่ควรเป็นชุดภาพหรือบทความในหนังสือพิมพ์

ข้อดีอีกประการคือความง่ายในการใช้ฐานข้อมูลที่เป็นเอกสารในการพัฒนาเว็บ สำหรับโมเดลฐานข้อมูล NoSQL เชิงลึกเพิ่มเติมโปรดตรวจสอบแหล่งที่มานี้: https://arxiv.org/ftp/arxiv/papers/1509/1509.015035.pdf

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.