ทำไมฉันถึงต้องใช้ ElasticSearch ถ้าฉันใช้ฐานข้อมูลกราฟอยู่แล้ว?


15

ฉันไม่พบคำอธิบายเชิงลึกใด ๆ บนเว็บเกี่ยวกับการเปรียบเทียบระหว่างElasticSearchกับฐานข้อมูลกราฟ

ทั้งสองได้รับการปรับให้เหมาะกับข้อมูลการสำรวจ
ดูเหมือนว่า ElasticSearch จะได้รับการปรับให้เหมาะกับการวิเคราะห์
อย่างไรก็ตาม Neo4j ยังใช้ Lucene ในการจัดการดัชนีและคุณสมบัติ fulltext

ทำไมฉันถึงต้องใช้ ElasticSearch ถ้าฉันใช้ฐานข้อมูลกราฟอยู่แล้ว?

ในกรณีของฉันฉันใช้Neo4jเพื่อสร้างเครือข่ายสังคม
ElasticSearch อาจนำประโยชน์อะไรมาให้จริง

อัพเดท ----------

ฉันเพิ่งพบย่อหน้านี้:

มีหลายกรณีที่ elasticsearch เป็นประโยชน์ กรณีการใช้งานบางอย่างเรียกร้องให้ชัดเจนกว่ากรณีอื่น ๆ รายการด้านล่างนี้เป็นงานบางส่วนที่ใช้งานการค้นหาด้วยยาง

  • ค้นหาคำอธิบายผลิตภัณฑ์จำนวนมากเพื่อหาคู่ที่ดีที่สุดสำหรับวลีที่เฉพาะเจาะจง (พูดว่า "มีดเชฟ") และส่งคืนผลลัพธ์ที่ดีที่สุด
  • จากตัวอย่างก่อนหน้านี้ทำลายแผนกต่างๆที่มี“ มีดเชฟ” ปรากฏขึ้น (ดูการเผชิญหน้าในภายหลังในหนังสือเล่มนี้)
  • ค้นหาข้อความสำหรับคำที่ดูเหมือน "ฤดู"
  • เติมคำในช่องค้นหาโดยอัตโนมัติตามคำที่พิมพ์บางส่วนโดยอ้างอิงจากการค้นหาที่ออกมาก่อนหน้าในขณะที่คิดคำสะกดผิด
  • การจัดเก็บข้อมูล semi-Structured (JSON) จำนวนมากในรูปแบบที่กระจายด้วยระดับความซ้ำซ้อนที่ระบุในคลัสเตอร์ของเครื่องจักร

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

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

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


คำตอบ:


17

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

ฉันเห็นที่ที่คุณสามารถทำให้พวกเขาสับสน จริง ๆ แล้วพวกเขาสามารถตอบสนองความต้องการเดียวกัน แต่ไม่เสมอไป ElasticSearch ทำการค้นหาทุกอย่างตามที่เห็น ฐานข้อมูลกราฟไม่ได้ระบุความสัมพันธ์หรือดัชนีโดยที่ ElasticSearch ทำ ดังนั้นพื้นฐานพวกเขาทำงานค่อนข้างแตกต่างกัน ElasticSearch วิเคราะห์เอกสารด้วยเช่นโปรแกรมวิเคราะห์ภาษาอังกฤษ สิ่งนี้จะใช้คำและวิเคราะห์รูปแบบที่แตกต่างกันของคำนั้นหรือแม้กระทั่งคำพ้องความหมาย ยกตัวอย่างเช่นdigจะได้รับการ anaylzed dig,digs,dug,digging,digger ...เป็น เมื่อคุณเรียกใช้แบบสอบถามบน ElasticSearch แบบสอบถามของคุณยังสามารถวิเคราะห์คำเหล่านั้นจะถูกสอบถามและสามารถทำคะแนนโดยความเกี่ยวข้อง

ElasticSearch เป็นเครื่องมือที่ยอดเยี่ยมเพราะมีความยืดหยุ่น คุณสามารถค้นหาเนื้อหาที่เกี่ยวข้องหลากหลายหรือคุณสามารถหาเข็มในกองหญ้าแห้งและค่อนข้างง่าย

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

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


3

ฐานข้อมูลทั้งสองนี้มีความต้องการเฉพาะเพื่อแก้ปัญหาเฉพาะในระดับที่ต้องการของแอปพลิเคชัน แม้ว่าเราจะไม่ได้ใช้ฐานข้อมูลกราฟ แต่เราใช้ elasticsearch กับ MySQL ในหนึ่งในโครงการของเราจาก 5 ปีที่ผ่านมา โครงการนั้นมีข้อมูลจำนวนมากที่ต้องค้นหาผ่านเอกสารขนาด 6 ม. และมีความสัมพันธ์ขนาดใหญ่ระหว่างหน่วยงานเหล่านั้น (เอกสารความสัมพันธ์ 10 ม.)

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

Elasticsearch ทำงานได้อย่างยอดเยี่ยมสำหรับการค้นหาทดสอบเต็มรูปแบบในเอกสารต่างๆ ทำรายการเอกสาร (เอนทิตี) ที่เป็นแฟนของฉันและเรียงตามจำนวนแฟน ๆ แต่สิ่งเหล่านี้ลึกลงไปหนึ่งระดับและเมื่อมันมาถึงการค้นหาที่ลึกกว่า Elasticsearch ไม่ดีพอ

เพื่อให้เข้าใจถึงความต้องการของคุณแล้วไปที่ฐานข้อมูล คุณอาจต้องมีทั้งคู่

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