NoSQL (MongoDB) vs Lucene (หรือ Solr) เป็นฐานข้อมูลของคุณ


280

ด้วยความเคลื่อนไหว NoSQL ที่เพิ่มขึ้นตามฐานข้อมูลที่ใช้เอกสารฉันได้ดู MongoDB เมื่อเร็ว ๆ นี้ ฉันได้สังเกตเห็นความคล้ายคลึงกันที่น่าทึ่งกับวิธีการปฏิบัติต่อรายการเป็น "เอกสาร" เช่นเดียวกับ Lucene (และผู้ใช้ของ Solr)

ดังนั้นคำถาม: ทำไมคุณต้องการใช้ NoSQL (MongoDB, Cassandra, CouchDB ฯลฯ ) เหนือ Lucene (หรือ Solr) เป็น "ฐานข้อมูล" ของคุณ?

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

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

คุณสามารถเปรียบเทียบผู้ให้บริการแคชนอกเช่น Velocity หรือ MemCached เมื่อพูดถึงการจัดเก็บข้อมูลที่คล้ายกันและความยืดหยุ่นของ MongoDB

ข้อ จำกัด ของ MongoDB ทำให้ฉันนึกถึงการใช้ MemCached แต่ฉันสามารถใช้ Velocity ของ Microsoft และมีการจัดกลุ่มและการรวบรวมรายชื่อมากกว่า MongoDB (ฉันคิดว่า) ไม่สามารถรับได้เร็วขึ้นหรือปรับขนาดได้กว่าการแคชข้อมูลในหน่วยความจำ แม้แต่ Lucene ก็มีผู้ให้บริการหน่วยความจำ

MongoDB (และอื่น ๆ ) มีข้อดีเช่นความสะดวกในการใช้ API สร้างเอกสารใหม่สร้าง ID และเก็บไว้ เสร็จสิ้น ดีและง่าย



4
ขอบคุณ แต่นั่นไม่ได้ตอบคำถามของฉัน: ซึ่งคือทำไมฉันจะใช้ MongoDB แทน Lucene สำหรับฐานข้อมูลของฉัน ทั้งคู่จัดการเอกสาร แต่ Lucene มีตัวเลือกการค้นหาที่ทรงพลังมาก +1 แม้ว่าการค้นหาคำถามที่เกี่ยวข้องจริง ๆ ฉันค้นหาหลายครั้งใน Stackoverflow และไม่ได้มาพร้อมกับการเปรียบเทียบ
eduncan911

คุณใช้ Lucene อย่างไรในการทำงานคล้ายกับ MongoDB คุณกำลังผูกมันไว้กับฐานข้อมูลเชิงสัมพันธ์เพื่อจัดเก็บหรือไม่?
Philip Tinney

1
@ ฟิลิป: มันเป็นคำถามสมมุติ ทำไมไม่ใช้ Lucene เป็นที่เก็บเอกสารของคุณ? คุณจะได้รับพลังการค้นหาและความสามารถในการปรับขนาดได้มากขึ้น (เมื่อผสมกับ Solr ทำให้ Lucene ใช้งานง่ายยิ่งขึ้น)
eduncan911

คำตอบ:


250

นี่เป็นคำถามที่ยอดเยี่ยมสิ่งที่ฉันได้ไตร่ตรองมาบ้าง ฉันจะสรุปบทเรียนที่ได้เรียนรู้:

  1. คุณสามารถใช้ Lucene / Solr แทน MongoDB ได้อย่างง่ายดายสำหรับทุกสถานการณ์ แต่ไม่ใช่ในทางกลับกัน โพสต์ของ Grant Ingersoll สรุปได้ที่นี่

  2. MongoDB เป็นต้นดูเหมือนจะให้บริการตามวัตถุประสงค์ที่ไม่ต้องการการค้นหาและ / หรือการเผชิญ มันดูเหมือนจะเป็นการเปลี่ยนที่ง่ายขึ้นและง่ายขึ้นสำหรับโปรแกรมเมอร์ในการล้างสารพิษจากโลก RDBMS Lucene & Solr นอกจากจะคุ้นเคยกับมันแล้ว

  3. มีไม่มากตัวอย่างของการใช้ Lucene / Solr เป็น Datastore แต่การ์เดียนได้ทำให้ความคืบหน้าบางและสรุปนี้ในการที่ดีเยี่ยมสไลด์ดาดฟ้าแต่พวกเขาก็มีความไม่ผูกมัดบนทั้งหมดกระโดดบน bandwagon Solr และ "การตรวจสอบ" การรวม Solr ด้วย CouchDB

  4. ในที่สุดฉันจะนำเสนอประสบการณ์ของเรา แต่น่าเสียดายที่ไม่สามารถเปิดเผยได้มากเกี่ยวกับกรณีธุรกิจ เราทำงานบนมาตราส่วนของข้อมูลจำนวนหลาย TB ซึ่งเป็นแอปพลิเคชันใกล้เวลาจริง หลังจากตรวจสอบชุดค่าผสมต่าง ๆ ตัดสินใจติดกับ Solr ไม่มีความเสียใจในตอนนี้ (6 เดือน & การนับ) และไม่เห็นเหตุผลที่จะเปลี่ยนไปใช้สิ่งอื่น

สรุป: หากคุณไม่มีข้อกำหนดการค้นหา Mongo เสนอวิธีการที่ง่ายและมีประสิทธิภาพ อย่างไรก็ตามหากการค้นหาเป็นกุญแจสำคัญในข้อเสนอของคุณคุณน่าจะติดเทคโนโลยีเดียว (Solr / Lucene) และปรับการใช้ประโยชน์จากมัน - ชิ้นส่วนที่เคลื่อนไหวน้อยลง

2 เซนต์ของฉันหวังว่าจะช่วย


10
Solr ไม่มีฟังก์ชั่นลดแผนที่ ดังนั้นการรายงานสถิติการคำนวณคะแนน ฯลฯ จึงเป็นไปไม่ได้! ใช้ Solr เฉพาะเมื่อคุณมี / สามารถคุกคามข้อมูลของคุณเป็นข้อมูลตัวอักษร
Roland Kofler

8
Solr ไม่มี built-in ที่ลดแผนที่ แต่คุณสามารถรวมกับ Hadoop architects.dzone.com/articles/solr-hadoop-big-data-love
Mikos

6
แผนที่ลดเลขที่ แต่มันมีความสามารถในการเรียกใช้แบบสอบถามในแบบคู่ขนานกับเซิร์ฟเวอร์หลาย solr และรวมผลลัพธ์เหล่านั้น ดังนั้นในขณะที่มันไม่มีแผนที่ทั่วไปลด - มันได้เขียนสิ่งที่คุณจะเขียนด้วยแผนที่ลดซึ่งเป็นคำค้นหาแบบขนาน
chubbsondubs

@Roo: มันจะเป็นตัวเลือกในการใช้ Lucene เป็นฐานข้อมูลหลักและสร้างดัชนีรวมกับ MongoDB หรือไม่? หรือว่าไม่เหมาะสม? และ Mikos: คำตอบที่ดีและ +1 สำหรับการกล่าวถึงประสบการณ์จริง
หน้าตาบูดบึ้งของ Despair

2
จาก solr6 รองรับการลดฟังก์ชั่นแผนที่ด้วยการแสดงออกคู่ขนาน
Divyang Shah

36

คุณไม่สามารถปรับปรุงเอกสารบางส่วนใน solr คุณต้องโพสต์ฟิลด์ทั้งหมดอีกครั้งเพื่ออัปเดตเอกสาร

และเรื่องประสิทธิภาพ หากคุณไม่ยอมรับการเปลี่ยนแปลง solr ของคุณจะไม่มีผลถ้าคุณส่งมอบทุกครั้งประสิทธิภาพจะลดลง

ไม่มีธุรกรรมใน solr

เนื่องจาก solr มีข้อเสียเหล่านี้บางครั้ง nosql จึงเป็นทางเลือกที่ดีกว่า


13
MongoDB ไม่มีธุรกรรมเช่นกัน
user183037

1
Solr หรือ Lucene มีการค้นหาแบบเรียลไทม์ดังนั้นการกระทำจึงไม่ใช่ปัญหา
mihaicc

1
@ user183037 ใน MongoDB อัพเดทใด ๆ ภายในเอกสารคือ Atomic และ FYI, Lucene ก็ไม่มีธุรกรรม (ในแง่ของคุณ)
Aravind Yarram

48
คำตอบนี้ไม่ถูกต้อง Solr 4+ รองรับการอัพเดทบางส่วนและซอฟต์คอมมิต / ใกล้เวลาจริงจะจัดการกับปัญหาส่วนใหญ่ของ Solr "แบบเก่า"
Mauricio Scheffer

1
พวกเขาเพิ่มการสนับสนุนการทำธุรกรรมใน MongoDB 4
Jonas

26

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

[... ] อย่างไรก็ตามเราสังเกตว่าประสิทธิภาพการค้นหาของ Solr ลดลงเมื่อขนาดดัชนีเพิ่มขึ้น เราตระหนักว่าทางออกที่ดีที่สุดคือการใช้ทั้ง Solr และ Mongo DB ด้วยกัน จากนั้นเรารวม Solr กับ MongoDB โดยจัดเก็บเนื้อหาลงใน MongoDB และสร้างดัชนีโดยใช้ Solr สำหรับการค้นหาข้อความแบบเต็ม เราเก็บ id เฉพาะสำหรับแต่ละเอกสารในดัชนี Solr และดึงเนื้อหาจริงจาก MongoDB หลังจากค้นหา Solr การรับเอกสารจาก MongoDB นั้นเร็วกว่า Solr เพราะไม่มีการวิเคราะห์การให้คะแนน ฯลฯ [... ]


3
โพสต์บล็อกที่ดี ใช่นี่คือวิธีที่ฉันเคยใช้ Lucene ในอดีตกับที่เก็บ SQL และ MySql รุ่นเก่า (เก็บ ID ใน Lucene และดึงประเภทที่ซับซ้อนจากที่เก็บข้อมูล) แม้ว่าในทางเทคนิคแล้วคำถามนี้ก็คือการสำรวจความแตกต่างระหว่างทั้งสองไม่ใช่วิธีการใช้ "ดีที่สุดของทั้งสองโลก" +1 สำหรับการใช้วิธีการนี้เนื่องจากเป็นวิธีการใช้ข้อมูลจำนวนมหาศาลอย่างแท้จริง
eduncan911

ขอบคุณสำหรับคำตอบของคุณ ฉันรู้ว่าคำถามนั้นเกี่ยวกับการเลือก Nosql เหนือ Lucene แต่ที่นี่ฉันต้องการแสดงให้เห็นว่าแทนที่จะเลือกอย่างใดอย่างหนึ่งการใช้พวกมันในแบบไฮบริดจะให้ผลลัพธ์ที่ดีกว่า
Parvin Gasimzade

2
คุณจำได้ไหม (ตอนนี้ 1.5 ปีต่อมา) ขนาดของฐานข้อมูล Solr คร่าวๆเมื่อประสิทธิภาพการสืบค้นลดลงมากคุณจึงเริ่มคิดที่จะเพิ่ม MongoDB? (เป็น 10,000 เอกสารหรือ 10,000,000 เอกสาร)
KajMagnus

มีประโยชน์มาก ฉันทำงานในระบบสารสนเทศภูมิศาสตร์และเพื่อให้สามารถรวมข้อความแบบเต็มกับการค้นหาเชิงพื้นที่ด้วยวิธีนี้เป็นสิ่งที่น่าสนใจมาก เราใช้ MongoDB และ Postgres แล้วและฉันก็คิดถึง Solr มาระยะหนึ่งแล้ว
John Powell

2
@ParvinGasimzade ลิงก์โพสต์บล็อกไม่ทำงาน คุณช่วยจัดหาลิงค์หรือแหล่งอื่นได้ไหม
การให้อภัย

24

นอกจากนี้โปรดทราบว่าบางคนได้รวม Solr / Lucene เข้ากับ Mongo โดยการจัดทำดัชนีทั้งหมดจะถูกเก็บไว้ใน Solr และตรวจสอบการทำงานของ oplog และลดการปรับปรุงที่เกี่ยวข้องลงใน Solr

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

มันค่อนข้างเทคนิคในการเซ็ตอัพ แต่มี oplog tailers มากมายที่สามารถรวมเข้ากับ solr ได้ ตรวจสอบสิ่งที่ rangespan ทำในบทความนี้

http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html


ถ้าฉันเข้าใจคุณอย่างถูกต้องเหตุผลที่คุณใช้ MongoDB (นอกเหนือจาก Solr) นั่นคือ MongoDB มีการเพิ่มความเร็วในการอ่านและอ่านเร็วกว่าหรือไม่? คุณระบุด้วยว่า MongoDB มีที่เก็บข้อมูลที่เชื่อถือได้มากกว่าหรือไม่? (หรือคุณหมายถึง Solr) - คุณเริ่มต้นด้วยอะไรในตอนแรก เฉพาะ MongoDB เฉพาะ Solr หรือทั้งสอง Mongo + Solr
KajMagnus

12

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

และที่นี่ที่ Lucene / Solr ได้รับชัยชนะครั้งใหญ่โดยเฉพาะอย่างยิ่งกับการแคช FilterQuery ประสิทธิภาพนั้นยอดเยี่ยม


10

เนื่องจากไม่มีใครพูดถึงมันขอให้ฉันเพิ่ม MongoDB ที่เป็น schema-less ในขณะที่ Solr บังคับให้ schema ดังนั้นหากฟิลด์เอกสารของคุณมีแนวโน้มที่จะเปลี่ยนแปลงนั่นเป็นเหตุผลหนึ่งที่เลือก MongoDB ผ่าน Solr


6
IMHO นั้นไม่เป็นความจริง Solr มีสคีมาตามที่กำหนดไว้schema.xmlแต่มันก็มี 'ไดนามิกฟิลด์' เช่นฟิลด์ที่ประเภทถูกกำหนดผ่านไวด์การ์ดเพื่อให้คุณสามารถจับคู่ทุกฟิลด์พูด*_iสร้างดัชนีเป็นฟิลด์จำนวนเต็ม เมื่อมีการเพิ่มเอกสารแล้วคุณสามารถมีเอกสาร conaining สาขาเช่นcount_i, foo_i, bar_iที่มีความเข้าใจทั้งหมดเป็นเขตจำนวนเต็มโดยไม่ปรากฏในschema.xmlตัวอักษร สวย schema- น้อยฉันพูด ดูyoutube.com/watch?v=WYVM6Wz-XTwสำหรับข้อมูลเพิ่มเติม
ไหล

ฉันต้องกลับมาชนกับ +1 เพราะนั่นเป็นเรื่องจริง - การเปลี่ยนแปลงแบบแผนใน Solr นั้นอยู่ใน PITA เสมอเพื่อซิงค์กับที่เก็บข้อมูลอื่น ๆ
eduncan911

4
Solr มีคุณสมบัติที่รองรับสคีมาหรือไม่สคีมา!
Krunal

5

@ mauricio-scheffer พูดถึง Solr 4 - สำหรับผู้ที่สนใจ LucidWorks อธิบาย Solr 4 เป็น "เซิร์ฟเวอร์ค้นหา NoSQL" และมีวิดีโอที่http://www.lucidworks.com/webinar-solr-4-the-nosql - การค้นหาเซิร์ฟเวอร์ /ที่พวกเขาเข้าไปดูรายละเอียดเกี่ยวกับคุณสมบัติ NoSQL (ish) (-ish นั้นมีไว้สำหรับสกีมาเวอร์ชันจริงของพวกเขาเป็นสกีมาแบบไดนามิก)


1

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


1

โซลูชันของ บริษัท อื่นเช่นหาง mongo op-log น่าสนใจ ความคิดหรือคำถามบางส่วนยังคงเกี่ยวกับการแก้ปัญหาที่สามารถบูรณาการอย่างแน่นหนาสมมติว่ามุมมองการพัฒนา / สถาปัตยกรรม ฉันไม่ได้คาดหวังว่าจะเห็นโซลูชันที่ผสานรวมอย่างแน่นหนาสำหรับคุณสมบัติเหล่านี้ด้วยเหตุผลบางประการ (ค่อนข้างเป็นการเก็งกำไรและอาจมีการชี้แจงและไม่ได้รับการปรับปรุงด้วยความพยายาม):

  • Mongo คือ c ++, lucene / solr คือ java
  • lucene รองรับรูปแบบเอกสารต่างๆ
    • mongo มุ่งเน้นไปที่ JSON (BSON)
  • lucene ใช้เอกสารที่ไม่เปลี่ยนรูป
    • การอัปเดตฟิลด์เดียวเป็นปัญหาถ้ามี
  • ดัชนี Lucene ไม่เปลี่ยนรูปด้วย ops ผสานที่ซับซ้อน
  • คำสั่ง mongo คือ javascript
  • mongo ไม่มีข้อความวิเคราะห์ / tokenizers (AFAIK)
  • Mongo doc มีขนาด จำกัด ซึ่งอาจเทียบกับเกรนสำหรับลูซีน
  • การรวมตัวกันของ mongo อาจไม่มีตำแหน่งใน lucene
    • lucene มีตัวเลือกในการจัดเก็บเขตข้อมูลข้ามเอกสาร แต่นั่นไม่ใช่สิ่งเดียวกัน
    • อย่างใด solr ให้การรวม / สถิติและแบบสอบถาม SQL / กราฟ

0

MongoDB Atlas จะมีเสิร์ชเอ็นจิ้นที่ใช้สารลูซีนในไม่ช้า การประกาศครั้งใหญ่ได้เกิดขึ้นในการประชุม MongoDB World 2019 ในสัปดาห์นี้ นี่เป็นวิธีที่ยอดเยี่ยมในการสนับสนุนการใช้งานผลิตภัณฑ์ MongoDB Atlas ที่มีรายได้สูง

ฉันหวังว่าจะเห็นมันม้วนเข้าสู่ MongoDB Enterprise เวอร์ชัน 4.2 แต่ไม่มีข่าวว่าจะนำไปสู่สายผลิตภัณฑ์ของพวกเขาในช่วงต้น

ข้อมูลเพิ่มเติมที่นี่: https://www.mongodb.com/atlas/full-text-search

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