มีที่เก็บข้อมูล NoSQL ใดที่สอดคล้องกับมาตรฐานกรด?


156

มีที่เก็บข้อมูลNoSQLใดที่สอดคล้องกับACIDหรือไม่


2
จริงๆแล้วมี FoundationDB ซึ่งสอดคล้องกับกรด ตอนนี้ Apple คว้ามันไว้
ผู้ใช้ที่ไม่มีหมวก

คำตอบ:


110

ฉันจะโพสต์สิ่งนี้เป็นคำตอบเพื่อสนับสนุนการสนทนาอย่างแท้จริง - Tim Mahy , nawrothและCraigTPได้แนะนำฐานข้อมูลที่ใช้การได้ CouchDBจะเป็นที่ต้องการของฉันเนื่องจากการใช้Erlangแต่มีคนอื่นออกมี

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

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

ACIDจัดเตรียมหลักการที่ควบคุมวิธีการเปลี่ยนแปลงที่ใช้กับฐานข้อมูล ในวิธีที่ง่ายมากก็ระบุ (รุ่นของฉันเอง):

  • (A) เมื่อคุณทำบางสิ่งเพื่อเปลี่ยนฐานข้อมูลการเปลี่ยนแปลงควรทำงานหรือล้มเหลวโดยรวม
  • (C) ฐานข้อมูลควรคงที่ (นี่เป็นหัวข้อที่ค่อนข้างกว้าง)
  • (I) หากมีสิ่งอื่นเกิดขึ้นในเวลาเดียวกันพวกเขาไม่ควรเห็นสิ่งที่กำลังอัพเดทอยู่
  • (D) หากระบบเกิดการระเบิด (ฮาร์ดแวร์หรือซอฟต์แวร์) ฐานข้อมูลจะต้องสามารถเลือกสำรองได้ และถ้ามันบอกว่ามันเสร็จสิ้นการใช้การปรับปรุงก็ต้องมีความมั่นใจ

ได้รับการสนทนาเล็ก ๆ น้อย ๆ ได้ง่ายมากขึ้นเมื่อมันมาถึงความคิดของการขยายพันธุ์และข้อ จำกัด เอ็นจิน RDBMS บางตัวจัดเตรียมความสามารถในการบังคับใช้ข้อ จำกัด (เช่นคีย์ต่างประเทศ) ซึ่งอาจมีองค์ประกอบการแพร่กระจาย (a la cascade ) ในแง่ที่ง่ายกว่า "สิ่ง" หนึ่งอาจมีความสัมพันธ์กับอีกสิ่ง "" ในฐานข้อมูลและถ้าคุณเปลี่ยนคุณลักษณะหนึ่งมันอาจต้องเปลี่ยนอีก (ปรับปรุงลบ ... ตัวเลือกมากมาย) ฐานข้อมูลNoSQLซึ่งส่วนใหญ่มุ่งเน้นไปที่ปริมาณข้อมูลที่สูงและปริมาณการใช้ข้อมูลสูงดูเหมือนว่าจะมีการจัดการกับแนวคิดของการอัพเดทแบบกระจายซึ่งเกิดขึ้นภายในกรอบเวลาที่กำหนดเอง นี่เป็นรูปแบบเฉพาะของการจำลองแบบที่จัดการผ่านทรานแซคชัน - ดังนั้นฉันจะบอกว่าถ้าฐานข้อมูลแบบกระจายสามารถรองรับกรดได้ดังนั้นฐานข้อมูล NoSQL ก็สามารถทำได้

ทรัพยากรบางอย่างสำหรับการอ่านเพิ่มเติม:


15
คำตอบที่ดี. คุณสามารถมีได้ทั้ง NoSQL + ACID และ non-ACID-RDBMS (คิดว่า MySQL + MyISAM) ฉันมักจะพิจารณา NoSQL ว่า "ในที่สุดสอดคล้อง" ฉันจะโยนทฤษฎีบท CAP ด้วย ... :-)
gbn

+1 @gbn สำหรับการกล่าวถึงทฤษฎีบท CAP การคุ้นเคยกับ "nosql" db มากขึ้นกว่าตอนนี้ที่ฉันได้เสริมเพียงการแยกแนวคิด นอกจากนี้ฐานข้อมูลคีย์ - ค่า vs doc เนื่องจากมีความแตกต่างทางสถาปัตยกรรม
AJ

-1 สำหรับการกล่าวถึงทฤษฎีบท CAP เราควรเผามัน โปรดอ่านhttps://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
Dinei

36

UPDATE (27 กรกฎาคม 2555): ลิงก์ไปยังบทความ Wikipedia ได้รับการปรับปรุงเพื่อให้สอดคล้องกับรุ่นของบทความที่เป็นปัจจุบันเมื่อคำตอบนี้ถูกโพสต์ โปรดทราบว่าบทความ Wikipedia ปัจจุบันได้รับการแก้ไขอย่างกว้างขวาง!

ตามบทความ Wikipedia ในเวอร์ชันเก่าบน NoSQL :

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

และนอกจากนี้ยังมี:

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

และ

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

ดังนั้นโดยสังเขปฉันจะบอกว่าหนึ่งในประโยชน์หลักของการเก็บข้อมูล "NoSQL" คือการขาดคุณสมบัติของกรด ยิ่งไปกว่านั้น IMHO ยิ่งพยายามใช้และบังคับใช้คุณสมบัติACIDยิ่งห่างไกลจาก "วิญญาณ" ของแหล่งข้อมูล "NoSQL" ที่คุณได้รับและยิ่งใกล้กับRDBMS "จริง" ที่คุณได้รับ )

อย่างไรก็ตามทั้งหมดที่กล่าวว่า "NoSQL" เป็นคำที่คลุมเครือมากและเปิดให้มีการตีความส่วนบุคคลและขึ้นอยู่กับว่าคุณมีมุมมองที่พิถีพิถันมากเพียงใด ยกตัวอย่างเช่นวันที่ทันสมัยที่สุด RDBMS ระบบไม่จริงที่จะปฏิบัติตามทั้งหมดของเอ็ดการ์เอฟ Codd 's 12 กฎของรูปแบบความสัมพันธ์ !

เมื่อใช้แนวทางปฏิบัติมันจะปรากฏว่าCouchDBของ Apache มาใกล้เคียงกับการรวบรวมทั้งความสอดคล้องของกรดในขณะที่ยังคงรักษาความคิด "NoSQL" ที่ไม่สัมพันธ์กัน


1
+1 ฉันไม่แน่ใจว่าฉันเห็นด้วยกับการขาดกรดที่เป็นลักษณะสำคัญของ "NoSQL" แต่ฉันชื่นชมการเขียนของคุณจริงๆ ในที่สุดมันควรจะเป็นทางออกที่เหมาะสม
AJ

2
ฉันแก้ไข (รอการตรวจสอบ) เพื่อพยายามทำให้ชัดเจนยิ่งขึ้น ไม่มีอะไรเกี่ยวกับ NoSQL datamodels ที่บ่งบอกถึงการทำธุรกรรมกรดเป็นไปไม่ได้ ระบบกระจาย NoSQL บางระบบไม่มี บางอันทำโดยไม่มี "มิดเดิลแวร์เลเยอร์"
Eric Bloch

2
สิ่งนี้ไม่ถูกต้องและสูญเสียแหล่งที่มา ควรลบทิ้งจริงๆ
Lennart Regebro

2
ดีที่สุดโจ๋งครึ่มนี้: "สั้น ๆ ฉันจะบอกว่าหนึ่งในประโยชน์หลักของการจัดเก็บข้อมูล" NoSQL "คือการขาดคุณสมบัติของกรด คุณหมายถึงว่า NoSQL และ ACID เป็นเอกสิทธิ์เฉพาะบุคคลซึ่งไม่ถูกต้องแน่นอน นี่เป็นตัวอย่างที่ดีว่าเมื่อใดที่คนที่ไม่รู้จำนวนมากขึ้นโหวตคำตอบที่ไม่ถูกต้องเพราะฟังดูสมเหตุสมผล ฐานข้อมูล NoSQL ส่วนใหญ่นั้นไม่ได้เป็นไปตามมาตรฐานของกรดเป็นส่วนใหญ่เพราะคนใช้มันไม่ทราบว่ามันคืออะไร / ทำไมมันถึงมีความสำคัญ / ไม่สนใจ
Lennart Regebro

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

20

โปรดตรวจสอบว่าคุณอ่านการแนะนำมาร์ตินฟาวเลอร์เกี่ยวกับฐานข้อมูล NoSQL และวิดีโอที่เกี่ยวข้อง

ก่อนอื่นเราสามารถแยกแยะความแตกต่างของฐานข้อมูล NoSQL ได้สองประเภท:

  1. ฐานข้อมูลเชิงรวม
  2. ฐานข้อมูลแบบกราฟ (เช่น Neo4J)

จากการออกแบบฐานข้อมูลกราฟส่วนใหญ่เป็นกรด !

แล้วประเภทอื่น ๆ ล่ะ?

ในฐานข้อมูลเชิงรวมเราสามารถวางประเภทย่อยสามประเภท:

  • ฐานข้อมูล NoSQL บนพื้นฐานของเอกสาร (เช่น MongoDB, CouchDB)
  • ฐานข้อมูลคีย์ / ค่า NoSQL (เช่น Redis);
  • คอลัมน์ตระกูลฐานข้อมูล NoSQL (เช่น Hibase, Cassandra)

สิ่งที่เราเรียกว่าการรวมที่นี่คือสิ่งที่ Eric Evans กำหนดไว้ในการออกแบบโดเมนที่ขับเคลื่อนด้วยตนเองในรูปแบบของหน่วยงานและวัตถุที่คุ้มค่าในบริบทที่กำหนด

ดังนั้นการรวมเป็นชุดของข้อมูลที่เราโต้ตอบด้วยเป็นหน่วย การรวมแบบฟอร์มขอบเขตสำหรับการดำเนินการ ACID กับฐานข้อมูล (Martin Fowler)

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

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

บางปรับปรุง 2019: เริ่มต้นในรุ่น 4.0 สำหรับสถานการณ์ที่ต้อง atomicity สำหรับการปรับปรุงเอกสารหลายหรือสอดคล้องระหว่างอ่านเอกสารหลาย MongoDB ให้การทำธุรกรรมเอกสารหลายชุดแบบจำลอง



มีหลายกรณีที่มีกระบวนการ / ซะงะขนาดใหญ่ที่จัดการกับมวลรวมจำนวนมาก มีหลายกรณีที่คำสั่งที่ส่งไปยังการรวมอาจทำให้เกิดเหตุการณ์บางอย่างที่เปลี่ยนการรวมอื่น ๆ ในกรณีเหล่านี้คุณต้องมีที่เก็บข้อมูลที่สอดคล้องกับ ACID
ทิวดอร์

1
@TudorTudor แต่ในกรณีนี้คุณกำลังทำลายหนึ่งในหลักการ nosql เนื่องจากคุณใช้เป็น rdbms คุณเพียงแค่ต้องการมวลรวมที่มากขึ้นหรือการกำหนดเวอร์ชันของเอกสาร (เช่นใน couchdb) Nosql db-oriented document เป็นกรดที่ขอบเขตของเอกสาร / การรวม
Arnaud Bouchez

ไม่มีรายการที่คุณเป็นกรด Mongo เพิ่งเป็นเจ้าของไม่เข้ากับกรด CouchDB ทำท่าว่ามันเป็นไปตามข้อกำหนดของกรดตราบใดที่คุณไม่ได้อัพเดตเอกสารสองฉบับ Redis มี "การสนับสนุนบางส่วนสำหรับธุรกรรม" เท่านั้น HBase ตั้งตรงไม่ใช่กรด (จาก devs)ไม่เป็น Cassandra คำตอบนี้จริงแล้วผิด ฐานข้อมูลเหล่านี้ไม่รองรับกรดและส่วนใหญ่เป็นเจ้าของอย่างเปิดเผยด้วยการค้นหา google อย่างง่าย
Evan Carroll

@EvanCarroll ฉันไม่เคยเขียนว่า MongoDB เป็นไปตามข้อกำหนดของกรดในความหมายเดียวกันกับธุรกรรม ACID RDBMS ไม่มีธุรกรรม สิ่งที่ผมเขียนก็คือว่าฐานข้อมูล NoSQL มากที่สุดอาจจะเป็นที่ปลอดภัยกรด RDBMS มีการตั้งค่าที่เหมาะสม ตัวอย่างเช่นตรวจสอบตัวดำเนินการ$ isolated MongoDBเพื่อหา DB โดยไม่มีคลัสเตอร์ที่แบ่งใช้ใด ๆ ฉันจะไม่ใช้ MongoDB สำหรับกระบวนการทางการเงิน แต่ฉันสามารถเชื่อถือขั้นตอนการเขียนเพื่อเพิ่มการดำเนินงานที่คล้ายกับ ACID หาก A สำหรับ Atomicity เพียงพอ ขออภัยถ้าคำตอบของฉันสับสน
Arnaud Bouchez

18

FoundationDB เป็นไปตามข้อกำหนดของกรด:

http://www.foundationdb.com/

มีธุรกรรมที่เหมาะสมดังนั้นคุณสามารถอัปเดตรายการข้อมูลที่หลากหลายในรูปแบบกรด สิ่งนี้ใช้เป็นรากฐานสำหรับการบำรุงรักษาดัชนีในระดับที่สูงขึ้น


6
น่าเสียดายที่มันไม่ใช่โอเพ่นซอร์ส แต่มันดูเหมือนฐานข้อมูลที่ดีมาก
Kevin Cox

หากต้องการเพิ่มคำตอบ @ Ken-Tindell มากขึ้น djondb ยังเป็น NoSQL และดำเนินธุรกรรมและเป็นไปตามข้อกำหนดของ ACID djondb.com ฉันยอมรับว่า NoSQL เป็นเพียงคำศัพท์เพื่อรวบรวมฐานข้อมูลทั้งหมดที่ไม่เป็นไปตามกฎดั้งเดิมของ RDBMS ไม่ได้หมายความว่า "กำจัดระบบ TX" หรือลืมความสัมพันธ์
ข้าม

3
คำตอบของฉันถูกทำให้ปมโดยการเข้าซื้อกิจการของมูลนิธิฐาน
Ken Tindell

1
foundationdb ขณะนี้เปิดแหล่งที่มาโดย Apple
RBanerjee

17

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

คุณลักษณะนี้เป็นสิ่งที่ฉันคิดถึงมากที่สุดใน MongoDB


โอเพ่นซอร์สส่วนใหญ่เป็นgithub.com/orientechnologies/orientdbแต่ได้ปิดฟีเจอร์ของโอเพนซอร์ส
basarat

14

กรดและ NoSQL นั้นมีมุมฉากสมบูรณ์ หนึ่งไม่ได้หมายความถึงอื่น ๆ

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

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

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


3
เป็นคนที่กระตือรือร้น แต่มักจะหมายถึง 'ไม่ใช่แค่ SQL' :-)
shmish111

4
@ shmish111 ไม่ได้จริงๆ มันหมายถึง "ไม่มี SQL" เมื่อคำแรกถูกประกาศเกียรติคุณ "o" มีขนาดเล็กไม่ใช่ทุนหลังจากทั้งหมด มีความพยายามที่จะเรียกคำซ้ำในภายหลังว่า "ไม่เฉพาะ SQL" เมื่อบางส่วนของผลิตภัณฑ์ (ผลิตภัณฑ์ NoSQL) เริ่มเพิ่มอินเทอร์เฟซภาษาแบบสอบถามแบบ SQL
ypercubeᵀᴹ

11

"NoSQL" ไม่ใช่คำที่กำหนดไว้อย่างดี มันเป็นแนวคิดที่คลุมเครือมาก ดังนั้นจึงไม่สามารถแม้แต่จะบอกได้ว่าอะไรคืออะไรและไม่ใช่ผลิตภัณฑ์ "NoSQL" ผลิตภัณฑ์เกือบทั้งหมดที่มีแบรนด์ที่มีฉลากติดกันเป็นร้านค้าคีย์ - ค่า


3
คำตอบที่ดีที่สุด เมื่อใดก็ตามที่สงคราม Flame เกิดขึ้นฉันต้องการถามอีกฝ่ายว่าการกำหนดคุณสมบัติที่พวกเขาต้องการจากฐานข้อมูล NoSQL อย่างชัดเจนและมักจะทับซ้อนกับคุณสมบัติที่พวกเขาสามารถพบได้ใน RDBMS - ไม่ใช่เพราะหนึ่งหรือ RDBMS เหมาะกับธีม NoSQL แต่เพราะ คุณสมบัติ 'ข้อกำหนด' นั้นคลุมเครือจนไม่สามารถลบล้างได้อย่างสมบูรณ์คุณลักษณะที่พบใน RDMBS (ไม่จำเป็นต้องทั้งหมด) +1 สำหรับคู่ความคิดเห็นของคุณ!
StartupGuy

8

ใช่ MarkLogic Server เป็นโซลูชัน NoSQL (ฐานข้อมูลเอกสารที่ฉันต้องการเรียก) ที่ทำงานกับธุรกรรม ACID


1
MarkLogic มีธุรกรรม ACID ธุรกรรมหลายเอกสารธุรกรรมหลายงบและสนับสนุน XA - ทั้งหมดทั่วคลัสเตอร์ / กระจาย
Eric Bloch

8

ปู่ของ NoSQL: ZODB เป็นไปตามข้อกำหนดของกรด http://www.zodb.org/

อย่างไรก็ตามมันเป็น Python เท่านั้น


1
สำหรับผู้ที่ต้องการเปลี่ยนจากห้องสมุด "shelve" ของ python ฉันพบว่า ZODB นั้นดูเหมือนจะไร้สาระ ฉันไม่จำเป็นต้องเขียนฟังก์ชั่นทั้งหมดอีกครั้ง - เพียงแค่เข้าถึง ZODB ในฐานะพจนานุกรมเช่นเดียวกับที่วางไว้ แต่มันเป็นลำดับความสำคัญเร็วกว่า
Michael Galaxy

8

ในฐานะหนึ่งในผู้เริ่มต้นของ NoSQL (ฉันเป็นผู้สนับสนุนต้นให้กับ Apache CouchDB และเป็นวิทยากรในงานแรกของ NoSQL ที่จัดขึ้นที่ CBS Interactive / CNET ในปี 2009) ฉันรู้สึกตื่นเต้นที่ได้เห็นอัลกอริธึมใหม่ ๆ . โปรโตคอล Calvinเสนอวิธีใหม่ในการคิดถึงข้อ จำกัด ทางกายภาพเช่น CAP และPACELC PACELC

แทน / การจำลองแบบ async ใช้งานเรื่อย ๆ หรืองาน / การใช้งานการจำลองแบบซิงโคร, Calvin เก็บรักษาความถูกต้องและความพร้อมในระหว่างการขาดหายไปของแบบจำลองโดยใช้แพเหมือนโปรโตคอลที่จะรักษาบันทึกการทำธุรกรรม นอกจากนี้การทำธุรกรรมจะถูกดำเนินการอย่างแน่นอนในแต่ละแบบจำลองการลบศักยภาพสำหรับการหยุดชะงักดังนั้นข้อตกลงจะประสบความสำเร็จด้วยความเห็นพ้องเพียงรอบเดียว สิ่งนี้ทำให้รวดเร็วแม้ในการปรับใช้หลายคลาวด์ทั่วโลก

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



4

NewSQL

ผู้มีส่วนร่วมในแนวคิดนี้Wikipediaกำหนดเป็น:

[... ] คลาสของระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่ทันสมัยที่พยายามจัดหาประสิทธิภาพการทำงานที่ปรับขนาดได้ของระบบ NoSQL สำหรับการประมวลผลการอ่านธุรกรรมออนไลน์ (OLTP) ในขณะที่ยังคงรับประกัน ACID ของระบบฐานข้อมูลแบบดั้งเดิม[1][2][3]

อ้างอิง

[1]Nancy Lynch และ Seth Gilbert, "การคาดคะเนของ Brewer และความเป็นไปได้ในการให้บริการเว็บที่มีความต่อเนื่อง, พร้อมใช้งาน, รองรับพาร์ติชัน" , ACM SIGACT News, เล่มที่ 33 ฉบับที่ 2 (2002), pg 51-59

[2] "Brewer's CAP Theorem" , julianbrowne.com, สืบค้น 02-Mar-2010

[3] "Brewers CAP ทฤษฎีบทในระบบกระจาย" , royans.net


4

MongoDB ประกาศว่าเวอร์ชั่น 4.0 จะเป็นไปตามข้อกำหนดของ ACID สำหรับการทำธุรกรรมหลายเอกสาร

เวอร์ชั่น 4.2 ควรที่จะสนับสนุนภายใต้การตั้งค่าที่หักออก

https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb


ใช่ธุรกรรม ACID หลายเอกสารได้รับการสนับสนุนใน MongoDB แล้ว ดูmongodb.com/transactionsสำหรับข้อมูลเพิ่มเติมและวิดีโอการดำน้ำลึกเกี่ยวกับวิธีการใช้งาน
Grigori Melnik



3

เพื่อเพิ่มรายชื่อของทางเลือกอีกอย่างเต็มที่กรดฐานข้อมูล NoSQL สอดคล้องเป็นGT.M



2

db4o

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

http://www.db4o.com/about/productinformation/db4o/


2

Tarantool เป็นฐานข้อมูล NoSQL ACID อย่างสมบูรณ์ คุณสามารถออก CRUD การดำเนินงานหรือขั้นตอนการจัดเก็บทุกอย่างจะทำงานอย่างเคร่งครัดตามคุณสมบัติกรด คุณสามารถอ่านเกี่ยวกับสิ่งนี้ได้ที่นี่: http://stable.tarantool.org/doc/mpage/data-and-persistence.html


2

MarkLogic ยังเป็นไปตามข้อกำหนดกรด ฉันคิดว่าเป็นหนึ่งในผู้เล่นที่ยิ่งใหญ่ที่สุดในตอนนี้


1

รอหมดแล้ว

NoSQL DB เป็นไปตามข้อกำหนดของกรดออกมา ----------- ดูที่citrusleaf


Aerospike รองรับธุรกรรม ACID หลายคีย์หรือไม่ AKAIK จำกัด การทำธุรกรรมด้วยคีย์เดียว
eonil

1

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

ในความคิดของฉันฐานข้อมูลยังคงมีประสิทธิภาพสูง แต่ไม่ไว้ใจฉันฉันสร้างซอฟต์แวร์ ลองด้วยตัวเองแทน


1

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

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

  1. ถ้าคุณต้องการระดับแยก Serializable แล้วคุณสามารถทำตามขั้นตอนวิธีการเดียวกันที่ Google ใช้สำหรับกรองระบบหรือแมลงสาบ Labs สำหรับCockroachDB ฉัน blogged เกี่ยวกับเรื่องนี้และสร้างการสร้างภาพเป็นขั้นตอนฉันหวังว่ามันจะช่วยให้คุณเข้าใจแนวคิดหลักที่อยู่เบื้องหลังอัลกอริทึม

  2. หากคุณคาดว่าจะมีการแข่งขันสูง แต่ก็เป็นเรื่องดีที่คุณจะได้อ่านระดับการแยกแบบมุ่งมั่นแล้วโปรดดูธุรกรรม RAMPของ Peter Bailis

  3. วิธีที่สามคือการใช้การชดเชยการทำธุรกรรมที่รู้จักกันว่ารูปแบบการผจญภัย มันถูกอธิบายในช่วงปลายยุค 80 ในกระดาษSagasแต่กลายเป็นเรื่องจริงมากขึ้นด้วยการเพิ่มระบบกระจาย โปรดดูการพูดคุยเรื่องการปรับใช้ Saga Patternเพื่อหาแรงบันดาลใจ

รายชื่อร้านค้าข้อมูลที่เหมาะสมสำหรับการทำธุรกรรมด้านลูกค้ารวมถึง Cassandra กับการทำธุรกรรมที่มีน้ำหนักเบา Riak พร้อมที่เก็บข้อมูลที่สอดคล้องกัน RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB และอื่น ๆ



0

VoltDBเป็นผู้เข้าร่วมซึ่งอ้างว่าเป็นไปตามข้อกำหนดของ ACID และในขณะที่มันยังใช้ SQL อยู่เป้าหมายก็เหมือนกันในแง่ของความยืดหยุ่น


2
ผู้สร้าง VoltDB กล่าวว่าพวกเขาไม่ติดป้ายชื่อตัวเองเป็น NoSql แต่เหมือน NewSql (ยังคงใช้ Sql แต่มีการใช้งานที่ดีกว่า RDBMs ที่สร้างขึ้นในยุคแปด)
Matt W

0

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





-1

ไม่เพียง NoSQL ไม่ได้เป็นไปตามข้อกำหนดของการออกแบบ การเคลื่อนไหว NoSQL ยอมรับ BASE (โดยทั่วไป, สถานะซอฟท์, ความสอดคล้องในที่สุด) อ้างว่าตรงกันข้ามกับ ACID ฐานข้อมูล NoSQL มักจะถูกเรียกว่าฐานข้อมูลที่สอดคล้องกันในที่สุด เพื่อทำความเข้าใจความแตกต่างคุณควรเจาะลึกลงไปในทฤษฎีบท CAP (ทฤษฎีบทของ Brewer's)

เยี่ยมชมhttp://www.julianbrowne.com/article/viewer/brewers-cap-theorem


ฉันคิดว่าตัวชี้ไปยังทฤษฎีบท CAP มีความเกี่ยวข้องมากสำหรับคำถามนี้!
mxro

2
ฐานข้อมูล NoSQL บางตัวมีธุรกรรม ACID
Eric Bloch

1
บางคนก็อ้าง NoSQL จะเป็นกรดที่สอดคล้อง แต่เมื่อ u เจาะลึกลงไปภายในให้คุณค้นพบว่าเฉพาะในกรณีเฉพาะบางอย่างที่พวกเขากำลังให้กรด IMHO เป็นไม่มี 'ในที่สุดกรด' พวกเขามีความไม่แน่นอนกรด
Ste

1
คุณกำลังใช้ CAP ผิดที่เดิม CAP และ ACID นั้นมีความสัมพันธ์กันอย่างดีที่สุด แต่ CAP ไม่ได้ป้องกันระบบที่ถูกแจกจ่ายจากการเข้ากันได้กับ ACID CAP อธิบายถึงการแลกเปลี่ยนที่จำเป็นของระบบกระจาย - ระบบ NoSQL ที่มีความสอดคล้องกันอย่างมากอาจไม่สามารถใช้งานได้ในระหว่างพาร์ติชั่น
Jeff Jirsa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.