ใช้กรณีสำหรับ NoSQL [ปิด]


144

NoSQL ได้รับความสนใจอย่างมากในอุตสาหกรรมของเราเมื่อเร็ว ๆ นี้ ฉันสนใจสิ่งที่ผู้คนคิดว่าดีที่สุดในการใช้งานเคสสำหรับการใช้งานมากกว่าการจัดเก็บฐานข้อมูลเชิงสัมพันธ์ สิ่งที่ควรทริกเกอร์นักพัฒนาให้คิดว่าชุดข้อมูลเฉพาะเหมาะสมกว่าโซลูชัน NoSQL ฉันสนใจเป็นพิเศษกับMongoDBและCouchDBเนื่องจากพวกเขาดูเหมือนจะครอบคลุมมากที่สุดเกี่ยวกับการพัฒนา PHP และนั่นคือสิ่งที่ฉันให้ความสำคัญ


6
คาสซานดราและ MongoDB เป็นผลิตภัณฑ์ที่แตกต่างอย่างสิ้นเชิง - สมบูรณ์แตกต่างประเภท คำถามนี้จะตอบได้ง่ายขึ้นหากมีการถามเกี่ยวกับกรณีการใช้งานสำหรับฐานข้อมูลเฉพาะประเภท (OODB, DODB, DKVS และอื่น ๆ ) "NoSQL" เป็นเพียงคำศัพท์สำหรับ "สิ่งที่ไม่ใช่ SQL" - เช่นเดียวกับบางอย่างเช่น BerkleyDB หรือไฟล์แบน ๆ ที่แชร์บนเครือข่าย
Aaronaught

@Aaraught ฉันขอขอบคุณความแตกต่างฉันเดาว่าฉันอาจจะผิดที่ใช้ร่มกับ nosql
robjmills

คำตอบ:


86

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

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

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

ในฐานะผู้ก่อตั้ง Joomla ฉันลำเอียง :-) แต่มาจากพื้นที่ CMS บางอย่างเช่น MongoDB เป็น bullet เงินเพราะแผนที่เนื้อหาเป็นธรรมชาติกับระบบเอกสาร

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

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


1
spacemonkey กล่าวว่าดีจริง ๆ ฉันอยู่ในตำแหน่งเดียวกันกับ seengee ชัดเจนว่าเราจะต้องคิดในรูปแบบใหม่และควรถามตัวเองว่าฉันจะจัดโครงสร้างข้อมูลแอปพลิเคชันของฉันลงในโครงสร้างเอกสารได้อย่างไร การวิเคราะห์นี้
ทก

49

กรณีการใช้งานที่ยอดเยี่ยม - สำหรับ MongoDB อยู่แล้ว - ถูกกล่าวถึงในเว็บไซต์ MongoDB ตัวอย่างที่ให้มาคือการวิเคราะห์ตามเวลาจริงการบันทึกและการค้นหาข้อความแบบเต็ม บทความเหล่านี้ล้วนแล้วแต่คุ้มค่าที่จะอ่านhttp://www.mongodb.com/use-cases

นอกจากนี้ยังมีการเขียนที่ดีในฐานข้อมูล NoSQL ที่เหมาะสมที่สุดกับประเภทของโครงการ: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis



8

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


1
ฉันจะไม่บอกว่ามันเล็กน้อยแต่เป็นจุดที่ดีเกี่ยวกับฐานข้อมูลที่มุ่งเน้นเอกสาร การย้อนกลับเป็นจริงสำหรับผลิตภัณฑ์ NoSQL อื่น ๆ - DKVSes มีแนวโน้มที่จะแมปได้ยากกว่า SQL / relational DBs
Aaronaught

8

ฉันใช้ NoSQL DB มาระยะหนึ่งแล้วและนี่คือส่วนที่ฉันมีส่วนร่วม:

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

ในสถานการณ์เช่นนั้นฐานข้อมูล NoSQL สามารถเป็นตัวเลือกที่ดี

ลองพิจารณาตัวอย่างเช่นMongoDB :

เมื่อคุณมีข้อมูลของคุณใน JSON (อาจมาจาก API ของบุคคลที่สามหรือส่งออกจากแอปพลิเคชัน sql) ในMongoDBนั้นค่อนข้างแปลกที่จะนำเข้าและอัปเดตข้อมูล JSON ในฐานข้อมูล ตัวอย่างเช่นการใช้mongoimportยูทิลิตีบรรทัดคำสั่ง

ณ จุดนี้ง่ายมากในการสร้างเคียวรีแบบไดนามิกด้วยการกรองและการจัดกลุ่มที่เหมาะสมกับแอปพลิเคชันประเภทนี้

ตัวอย่างเช่นการใช้Aggregation Framework :

$pipeline = [];

//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ]  ]  ];

//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
    $pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];    

//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];

return $collection->aggretate( $pipeline );

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

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

นอกจากนี้กรณีใช้งานนี้เหมาะสมที่สุดเพราะหลีกเลี่ยงข้อ จำกัด หลักทั้งหมดของฐานข้อมูล NoSQL:

  • การขาดธุรกรรม:แอปพลิเคชันไม่ทำการเขียน แต่อ่านเท่านั้นดังนั้นเราจึงไม่จำเป็นต้องทำธุรกรรมเลย

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

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

ฉันเพิ่งจะเขียนสิ่งนี้เพราะถ้าฉันได้อ่านบางอย่างที่ผ่านมามันจะช่วยให้ฉันมีเวลาในการทำวิจัย

หวังว่ามันจะเป็นประโยชน์กับใครบางคน


3

ฉันขอแนะนำให้พูดคุยโดย Martin Fowler นี้:

https://www.youtube.com/watch?v=qI_g07C_Q5I

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

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


เข้าใจจะเก็บไว้ในใจสำหรับอนาคต
user3631881

3

ก่อนอื่นคุณต้องเข้าใจ CAP (ความสอดคล้องความพร้อมใช้งานและการแบ่งพาร์ติชันที่คุณต้องเลือกทฤษฎีสองในสาม) และกรณีการใช้งานทางธุรกิจของเรา MongoDB สอดคล้องกับความสอดคล้องและการแบ่งพาร์ติชันและฐานข้อมูลที่นอนพอใจกับความพร้อมใช้งานและการแบ่งพาร์ติชัน

วิดีโอ Edureka ใน youtube เกี่ยวกับ NoSQL เป็นบทแนะนำวิดีโอที่ดีที่สุด

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

การนำเสนอที่ดีมีอยู่ใน slideshare.net

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-database-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (การนำเสนอนี้รองรับวิดีโอสอนใน youtube)


1

สำหรับการใช้งานบางกรณีที่คุณต้องการโดยเฉพาะอย่างยิ่งสำหรับเคียวรีการวิเคราะห์คุณสามารถรันเคียวรี SQL บน MongoDB ด้วยwrapper นี้จาก Postgres


1

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

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

ฉันอยากจะแนะนำ Couchbase ให้กับทุกคนที่ยังไม่ได้ลอง แต่ไม่ได้อิงตามรุ่นที่แสดงในรายงาน (2.5.1) เพราะมันเกือบ 2 รุ่นที่อยู่ด้านหลังซึ่ง CB Server ในปัจจุบันใกล้รีลีส 4.0 ใน 2H15 .

http://www.couchbase.com/coming-in-couchbase-server-4-0

อีกส่วนหนึ่งเกี่ยวกับ Couchbase ในฐานะผู้จำหน่าย / ผลิตภัณฑ์คือเป็นฐานข้อมูลที่ใช้งานได้หลากหลาย มันสามารถทำหน้าที่เป็นร้าน K / V ล้วนๆฐานข้อมูล Document Oriented ที่มีการปรับขนาดหลายมิติ Memcached แคชกันอย่างต่อเนื่องและสนับสนุน SQL ที่สอดคล้องกับ ANSI 92 ด้วยการเข้าร่วมอัตโนมัติการจำลองแบบกลุ่ม DR ด้วยการกดปุ่มและ แม้จะมีองค์ประกอบมือถือในตัวกับระบบนิเวศ

หากไม่มีสิ่งใดเป็นมูลค่าการตรวจสอบมาตรฐานล่าสุด:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

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