มีอะไรแปลกใหม่เกี่ยวกับ NoSQL หรือไม่? [ปิด]


46

ฉันเป็นคนที่มีฐานข้อมูลเชิงสัมพันธ์ที่แข็งแกร่งมากและเข้าใจทุกอย่างจนถึงรูปแบบที่ 3 ขอขอบคุณรากทฤษฎีเซตเชิงพีชคณิตของ SQL และอาจจะทำให้สัมพันธ์กับหัวใจที่แตกสลาย (หรือไม่ก็ได้)

ฉันไม่ได้คิดโครงสร้างฐานข้อมูลเชิงสัมพันธ์สำหรับคืนวันที่กับภรรยาของฉัน แต่ฉันมีความคิดเกี่ยวกับโครงการฐานข้อมูลเชิงสัมพันธ์ในวันที่คืนกับภรรยาของฉัน ..

ตอนนี้ฉันได้ยินเกี่ยวกับ NoSQL และทำการค้นคว้า การตัดการไล่ล่านั้นมีอะไรบ้างเกี่ยวกับ NoSQL ที่ทำให้เกิดความวุ่นวายทางคณิตศาสตร์หรือ "คุณไม่จำเป็นต้องจัดระเบียบข้อมูลของคุณให้สัมพันธ์กันนี่เป็นวิธีที่ง่ายกว่านี้ไหม"

NoSQL เป็นเหมือน super shell ต่อโครงสร้างข้อมูลหรือไม่? ในใจของฉันในที่สุดข้อมูลจะต้องมีโครงสร้างที่จะดึงและการดึงข้อมูลจะต้องกำหนดในภาษาบางประเภท


2
ฐานข้อมูล NoSQL ประเภทใดไม่มีโครงสร้าง ฐานข้อมูลเอกสารสามารถเป็นแบบลำดับชั้น แต่เก็บข้อมูลได้น้อยที่สุดในเอกสารที่มีข้อมูลในบางรูปแบบ ฐานข้อมูลกราฟและที่เก็บค่าคีย์ค่อนข้างอธิบายตนเอง ฐานข้อมูล NoSQL ใดบ้างที่ไม่มีภาษาที่จะสืบค้น ฐานข้อมูลเอกสารบางอย่างเป็นการค้นหาแบบข้อความหรือ XQuery สำหรับ XML เป็นสองตัวอย่าง SPARQL ใช้สำหรับร้านค้า RDF
โธมัสโอเวนส์

2
อัปเดตสำหรับ "ฉันมีความคิดเกี่ยวกับโครงการฐานข้อมูลเชิงสัมพันธ์ในคืนวันที่กับภรรยาของฉัน .. " :) ฮ่า ๆ เป็นคำถามที่ดีเช่นกัน
Rocklan

2
ฐานข้อมูล NoSQL มีโครงสร้าง แต่โครงสร้างนั้นไม่ใช่เรื่องง่ายที่จะแมปกับพีชคณิตเชิงสัมพันธ์เสมอไป NoSQL ที่แตกต่างกันใช้โครงสร้างที่แตกต่างกันบางอย่างคือ hashmap ของคีย์ - ค่า, ลำดับชั้น, ฐานข้อมูลวัตถุ, ฐานข้อมูลกราฟหรือที่เก็บเอกสารเป็นประเภททั่วไปของ NoSQL ทั้งหมดที่ NoSQL คือการตระหนักว่า SQL ไม่ใช่ยาครอบจักรวาลซึ่งบางโดเมนปัญหาแมปกับพีชคณิต SQL / เชิงสัมพันธ์ไม่ดี
Lie Ryan

7
NoSQL เป็นชื่อที่ทำให้เข้าใจผิด มันหมายถึงกลุ่มที่มีคุณสมบัติในขณะที่ลักษณะทั่วไปเท่านั้นที่ไม่ได้เป็นฐานข้อมูล SQL เชิงสัมพันธ์แบบคลาสสิก มันเป็นชุดเปิด มันเหมือนกับการอธิบายอาหารทุกอย่างที่ไม่ใช่ขนมปังในฐานะ "ครอบครัวที่ไม่ใช่ขนมปัง"
Pieter B

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

คำตอบ:


24

NoSQL นั้นมีวิวัฒนาการมากกว่าการปฏิวัติ "การจัดเก็บฐานข้อมูลภายนอก" กับ "การใช้โครงสร้างข้อมูลที่คุ้นเคยไม่ใช่ตารางเชิงสัมพันธ์"

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

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

นี้ให้สูงขึ้นถึงสองประเภทของฐานข้อมูลวัตถุฐานข้อมูลและNoSQL

ทั้งสองพยายามที่จะแก้ปัญหาที่นำเสนอโดยฐานข้อมูลเชิงสัมพันธ์ในขณะที่ไม่เปิดเผยให้เราเห็นถึงความน่าสะพรึงกลัวที่น่าเหลือเชื่อของฐานข้อมูลแบบลำดับชั้น ข้อมูลยังคงถูกจัดวางในที่เก็บซึ่งมีลักษณะคล้ายกับตาราง แต่ในความเป็นจริงนั้นเหมือนกับการเขียนโปรแกรมโครงสร้างข้อมูลมากกว่าตารางเชิงสัมพันธ์ ในขณะที่ฐานข้อมูลวัตถุเป็นไปตามกฎที่กำหนดไว้เป็นส่วนใหญ่ความเข้าใจของฉันก็คือ NoSQL นั้นค่อนข้างที่จะเป็นกฎ ตัวอย่างเช่นตารางอาจมองเห็นเป็นตารางแฮชหรืออาร์เรย์ ไม่มีวิธีที่ง่ายที่ดีที่กำหนดเพื่อสอบถามพวกเขาใช้คล้ายเครื่องมือที่กำหนดเองOracle SQL DeveloperหรือSQL Server Studio

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

มีภาษาสำหรับการสืบค้น NoSQL อย่างไรก็ตามไม่มีภาษาสากลเช่น SQL สำหรับฐานข้อมูลเชิงสัมพันธ์


แก้ไขล่าช้า:

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

ผู้เขียนระบุว่าฐานข้อมูลเชิงสัมพันธ์ไม่ได้ปรับขนาดได้ดีสำหรับกลุ่มที่สามารถให้บริการข้อมูลที่จำเป็นสำหรับเว็บไซต์เช่น Amazon และ Google: NoSQL ได้รับการพัฒนาเพื่อให้พอดีกับช่องนี้ทำให้การทำงานพร้อมกันและความทนทานใน ACID ลดลง ส่วนใหญ่ใช้ข้อมูลสแตติก (ดังนั้นธุรกรรม ACID ไม่สำคัญเท่า)

นอกจากนี้พวกเขายังยืนยันว่าฐานข้อมูล NoSQL ทำงานโดยไม่มี schema (หน้า 10) ซึ่งช่วยให้ฐานข้อมูล NoSQL สามารถปรับเปลี่ยนโครงสร้างของข้อมูลได้ง่ายขึ้น ฉันไม่แน่ใจว่าการมีหรือไม่มี schema ที่เป็นทางการมีความสำคัญในเรื่องนี้เนื่องจากฐานข้อมูล SQL อนุญาตให้ปรับเปลี่ยนสกีมาได้เช่นกัน ไม่ว่าผู้เขียนที่มีชื่อเสียงทั้งสองคนจะเรียกร้องอย่างไรจึงควรตรวจสอบ

ฉันเชื่อว่าประเด็นหลักทั้งสองนี้ให้บริการเฉพาะเพื่อบังคับใช้ประเด็นหลักของฉันว่า NoSQL นั้นเป็นวิวัฒนาการไม่ใช่การปฏิวัติ พวกเขายังคงเก็บข้อมูลและทำการปรับปรุงที่เพิ่มขึ้นในระดับและการปรับเปลี่ยนได้ พวกเขายังชี้ให้เห็นว่า NoSQL ไม่ได้พยายามที่จะแย่งชิงฐานข้อมูลเชิงสัมพันธ์ในฐานะราชาแห่งการจัดเก็บข้อมูลเพียงเพื่อให้วิธีการทางเลือกของการจัดเก็บข้อมูลสำหรับประเภทของข้อมูลที่จำเป็นต้องปรับขนาดและ morph ในแบบที่พวกเขาเชื่อ ฐานข้อมูลไม่รองรับได้ดีพอ


2
ฐานข้อมูล NoSQL บางตัวมีภาษาคิวรี ฉันเคยใช้ XQuery และ SPARQL มาก่อนหากข้อมูลถูกเก็บไว้ใน XML หรือ RDF ภาษาเหล่านั้นมีแนวโน้มที่จะมีโครงสร้างและสำหรับการสอบถาม แต่แล้วอีกครั้งนั้นครอบคลุมเฉพาะฐานข้อมูล NoSQL ที่มีรูปแบบข้อมูลที่กำหนดไว้อย่างดีและไม่ทำอะไรมากสำหรับคู่ของข้อความหรือคีย์ - ค่า
โธมัสโอเวนส์

@ThomasOwens ฉันได้แก้ไขคำตอบของฉันให้เฉพาะเจาะจงมากขึ้น

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

2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...ฉันรู้สึกว่านี่คือการวางเกวียนก่อนม้าในหลายกรณี สำหรับธุรกิจขนาดใหญ่ที่มีชุดข้อมูลขนาดใหญ่ข้อมูลนั้นมีค่าอย่างไม่น่าเชื่อและจะอยู่ในช่วงเวลาที่ยาวนานและนานกว่าภาษาโปรแกรมเครื่องมือและกระบวนทัศน์ที่ร้อนแรงในปัจจุบัน อาจมีความแม่นยำมากกว่าที่จะกล่าวว่า OOP เป็นอุปสรรคต่อการออกแบบฐานข้อมูลและการพยายามเปลี่ยนการออกแบบฐานข้อมูลให้เหมาะสมกับกระบวนทัศน์การเขียนโปรแกรมอาจไม่ใช่แนวคิดที่ดีที่สุด
Doval

2
ฉันจะชี้ให้เห็นว่าพวกเราทุกคนใช้การใช้ฐานข้อมูลแบบวนหนึ่งซึ่งค่อนข้างหนัก - มันเรียกว่าระบบไฟล์
ไวแอตต์บาร์เน็ตต์

13

ฉันคิดว่าคุณควรที่แน่นอนเช่นการดูที่กระดาษนี้โดยเอริคเมย์เยอร์และกาวิน Bierman หัวข้อ "ขัดกับความเชื่อที่นิยม SQL และ NoSQL จริงๆเพียงแค่สองด้านของเหรียญเดียวกัน" ในระยะสั้นมันอ้างว่าการพูดทางคณิตศาสตร์ทั้งสองวิธีอยู่บนพื้นฐานของทฤษฎีเดียวกัน แต่มีความแตกต่างบางอย่าง

ความแตกต่างที่น่าสนใจสองสามอย่างจากความเห็นของฉันมีดังต่อไปนี้: ทิศทางของการพึ่งพาข้ามประเภท (FK ใน SQL) เป็นสิ่งที่ตรงกันข้ามใน SQL และ NoSQL และประเภทของคอลเลกชันไม่ได้ จำกัด อยู่ที่ NoSQL เท่านั้น อาจใช้ไม่ได้ในโลก NoSQL อีกต่อไป แต่บางคนยังใช้งานได้) อีกจุดที่น่าสนใจจากบทความคือภาษาเคียวรีเดียวที่เสนอสำหรับการสืบค้นทั้งฐานข้อมูล SQL และ NoSQL เรียกว่า LINQ และถ้าคุณคิดว่าคุณอาจเคยได้ยินชื่อนี้มาก่อนคุณถูกต้อง: นั่นเป็นภาษาสอบถามของ Microsoft จาก C #


1
"อีกประเด็นที่น่าสนใจจากบทความนี้คือภาษาคิวรี่เดี่ยวที่เสนอสำหรับการสืบค้นทั้งฐานข้อมูล SQL และ NoSQL เรียกว่า LINQ" ไม่จริงทั้งหมด 'Linq' ไม่ได้แมปกับ SQL ในแบบ 1: 1 ดังนั้นการแปล จะต้องเกิดขึ้นเพื่อให้มันทำงานบน SQL DB ได้ WHich หมายถึงอะไรที่สามารถนำมาใช้ในการสืบค้นทั้งคู่ตราบใดที่มีเลเยอร์การแปลที่ทำให้แน่ใจว่ามันทำงานบนฐานข้อมูลเป้าหมาย
Frans Bouma

6
เราสามารถยืนยันได้ว่า SQL นั้นไม่ได้ดำเนินการโดยตรงกับฐานข้อมูล สิ่งที่ถูกดำเนินการคือแผนการดำเนินการและยังสามารถยืนยันได้ว่า Linq สามารถแปลโดยตรงไปยังแผนปฏิบัติการ ดังนั้นไม่แตกต่างกันมากหลังจากทั้งหมด
Haspemulator

10

คำตอบของ Snowman อธิบายอย่างถูกต้องว่า SQL และ NoSQL แตกต่างกันอย่างไรในโครงสร้างข้อมูลและวิธีการเข้าถึง อย่างไรก็ตามความแตกต่างที่สำคัญยิ่งกว่าก็คือโดเมนปัญหาของพวกเขา

NoSQL ไม่ใช่ผู้สืบทอดของ SQL แต่ที่สาขาต่างๆของ NoSQL เสียสละคุณภาพของ SQL บางอย่างเพื่อที่จะดีกว่าที่อื่น ๆ CAP theoremระบุว่าเป็นไปไม่ได้ที่ระบบฐานข้อมูลแบบกระจายจะตอบสนองคุณสมบัติต่อไปนี้ทั้งหมด:

  • ความมั่นคง
  • ความพร้อมใช้งาน
  • ฉากกั้นห้อง

ดังนั้นตัวแปร NoSQL บางตัวจะทำตามหลักการ BASEแทนซึ่งจะช่วยผ่อนคลายข้อ จำกัด ที่สม่ำเสมอของACIDซึ่งเป็นพื้นฐานสำหรับฐานข้อมูล SQL แบบดั้งเดิม การสูญเสียการรับประกันความสอดคล้องบางประการทำให้พวกเขามีความเป็นไปได้ในการรวมความพร้อมใช้งานสูงและความทนทานต่อการแบ่งพาร์ติชันในระบบที่มีการกระจายอย่างกว้างขวางเช่นสำหรับเว็บไซต์ที่มีข้อมูลจำนวนมากและแบบสอบถามของผู้ใช้ ดังนั้นฐานข้อมูล NoSQL เช่นที่เป็นหัวใจของGoogle , Facebook , และอเมซอน ดังนั้นเพื่อตอบคำถามของคุณ: ใช่ NoSQL นั้นมีความแตกต่างเพราะมันช่วยให้เว็บเซอร์วิสขนาดใหญ่

นี่เป็นเพียงตัวอย่างหนึ่งเช่น NoSQL เป็นเขตที่มีความหลากหลายและตัวแปรของมันครอบคลุมสวยมากทุกชุดของพารามิเตอร์ภายในสามเหลี่ยมหมวก


ฉันไม่รู้จัก ElasticSearch การค้นหา google อย่างรวดเร็วดูเหมือนจะแสดงให้เห็นว่าเป็นการเสียสละความมั่นคง (C) ดังนั้นจึงเป็น AP ไม่ใช่ CAP ซึ่งเป็นไปไม่ได้ในทางทฤษฎี แก้ไข: นี่เป็นการตอบสนองต่อความคิดเห็นที่หายไปในขณะนี้ซึ่งบอกว่า ElasticSearch เป็นไปตามคุณสมบัติ CAP ทั้งหมด
Florian von Stosch

3
โอ้น่ารักแค่ไหนพวกเขาไปกับ BASE เพื่อต่อต้านกรด มีวิธีการระดับกลางเรียกว่า REDOX หรือ SALT หรือไม่?
Patrick M

3

กรณีการใช้งานทั่วไปของ NoSQL นั้นมีการเพิ่มขึ้นอย่างมากเมื่อเทียบกับฐานข้อมูล SQL ทั่วไป มีหลายปัจจัยในเรื่องนี้

หนึ่งคือการดูแลทำความสะอาด NoSQLs ส่วนใหญ่เป็นโอเพ่นซอร์สและสามารถติดตั้งบนเวิร์กสเตชันหรือ VM ด้วยคำสั่งสองสามคำสั่งและทำงานด้วยค่าเริ่มต้นที่เหมาะสมนอกกรอบ จากประสบการณ์ของฉันแม้แต่ Postgres และ MySQL ก็ไม่ใช่แบบนั้น โดยทั่วไปการกำหนดค่าจำเป็นต้องเริ่มต้นแม้กระทั่งบนเวิร์กสเตชันเพื่อการพัฒนา

อีกอย่างคือการพัฒนาที่สะดวกตามคำตอบอื่น ๆ ความสามารถในการจัดทำดัชนี JSON ของ Mongo หรือความหมายหลัก / ค่าของ redis และ Riak อาจเป็น webapps บางอย่างที่จำเป็นต้องใช้เพื่อให้งานสำเร็จและ API นั้นง่าย NoSQLs บางตัวมี RESTful API ของตัวเองในขณะที่ SQL คุณต้องเขียนด้วยตัวเอง

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

นอกจากนี้ที่เกี่ยวข้องกับข้างต้นสำหรับแอปพลิเคชันขนาดเล็ก (เช่นบริการภายใน บริษัท หรือแอพต่อแอพ) ทีมอาจสามารถสร้างฐานข้อมูล NoSQL ที่ใช้งานจริงได้โดยไม่ต้องเกี่ยวข้องกับทีมงาน DBA และไม่มีประสิทธิภาพหรือความสมบูรณ์ ปัญหาเป็นผล Professional DBAs อาจไม่ชอบสิ่งนี้ แต่นักพัฒนาที่มองว่า DBA เป็นแหล่งของสิ่งกีดขวาง (ถูกหรือผิด) บางครั้งก็เห็นว่า NoSQL นั้นเป็นวิธีที่จะหลีกเลี่ยงการรับมือกับมัน ฉันสารภาพกับเรื่องนี้ - ฉันเคยเปลี่ยนแอปพลิเคชั่นขนาดเล็กจาก Postgres เป็น SQLite เพื่อตัด DBA ฝ่ายตรงข้ามออกและฉันเลือกที่จะใช้กับ Mongo มากกว่า Oracle เพื่อหลีกเลี่ยงกระบวนการอนุมัติ DBA และข้อ จำกัด การเข้าถึง โดยไม่มีผลกระทบใด ๆ ในทั้งสองกรณี

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