Elasticsearch vs Cassandra กับ Elasticsearch กับ Cassandra


111

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

  • ฉันต้องการจัดเก็บข้อมูลในอัตราที่เร็วขึ้นและอ่านข้อมูล
  • ปลอดภัยอย่างสมบูรณ์และปรับขนาดได้ง่าย
  • สามารถค้นหาข้อมูลสำหรับ Analytics

ฉันลงเอยด้วยรายการสั้น ๆ ของ: Cassandra and Elasticsearch

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

แม้ว่าElastic Searchจะดีที่สุดในการจัดทำดัชนี (สนับสนุนโดย Lucene) และสามารถค้นหาข้อมูลแบบสุ่มโดยการส่งข้อความแบบสุ่ม แต่มันใช้งานได้เหมือนกันแม้ว่าฉันต้องการดึงข้อมูลfrom_date to to_date(ฉันคาดว่ามันอาจจะเป็น) แต่คำถามที่แท้จริงคือ Search Engine หรือที่เก็บข้อมูล NoSQL ที่สมบูรณ์แบบเช่น Cassandra หรือไม่? ถ้าใช่ทำไมเราถึงยังต้องการ Cassandra?

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


2
คุณควรพิจารณา DSE Search = Cassandra + solr integrated = ดีที่สุดของทั้งสองโลก: ฐานข้อมูลที่ปรับขนาดได้สำหรับหน่วยเก็บข้อมูลที่ขับเคลื่อนโดยพลังการค้นหาของ Solr
Bereng

1
@ เบเรงฉันเดาว่า DSE เป็นเชิงพาณิชย์และเราไม่ได้ดูแลซอฟต์แวร์เชิงพาณิชย์
Reddy

3
หากคุณเป็นสตาร์ทอัพที่มีรายได้สุทธิ <2 ล้านดอลลาร์ (สหรัฐฯ) พวกเขาจะให้คุณใช้ DSE โดยไม่เสียค่าใช้จ่าย (อย่างน้อยหนึ่งหรือสองปี)
Aaron

คำตอบ:


150

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

เราได้ถามคำถามเดียวกันนั้น (ของตัวเราเอง) ... "ทำไมเราไม่ได้รับทุกอย่างจาก ElastsicSearch?"

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

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

สำหรับการวิเคราะห์ฉันประสบความสำเร็จในการใช้ตัวเชื่อมต่อ Cassandra Spark เพื่อตอบสนองการสืบค้น OLAP ที่ซับซ้อนมากขึ้น หวังว่าจะช่วยได้

แก้ไข 20200421

ฉันได้เขียนคำตอบที่ใหม่กว่าสำหรับคำถามที่คล้ายกัน:

ElasticSearch กับ ElasticSearch + Cassandra


24
ใครสามารถอธิบายความแตกต่างระหว่างการสืบค้นและการค้นหาข้อมูลได้หรือไม่
Dror

21
@dror ตัวอย่างเช่นถ้าคุณรู้ id (s) ของข้อมูลของคุณคุณก็ขอมัน (คาสซานดรา) และถ้าคุณไม่ทราบ id (s) ของข้อมูลของคุณคุณจะค้นหามัน / พวกเขา (การค้นหาแบบยืดหยุ่น)
arsenik

2
@ ดีใจทุกอย่างขึ้นอยู่กับขนาดของข้อมูลและความซับซ้อนของข้อความค้นหาของคุณ ในทางทฤษฎียางยืดทำได้ทั้งหมด อย่างไรก็ตามฉันเชื่อว่า Cassandra จะทำงานได้ดีกว่าในการปรับขนาดเพื่อรองรับชุดข้อมูลขนาดใหญ่ (สำหรับการสืบค้น) มากกว่า Elastic โดยเฉพาะอย่างยิ่งหากคุณรองรับหลายภูมิภาค / DC
Aaron

1
@Aaron ... การปรับขนาดเพื่อรองรับชุดข้อมูลขนาดใหญ่คือสิ่งที่เครื่องยนต์ทั้งสองนี้ทำได้ดี องค์กรของเราใช้การค้นหาแบบยืดหยุ่นเป็นฐานข้อมูลหลักเครื่องมือแจ้งเตือนเครื่องมือวิเคราะห์และตอนนี้ xpack รองรับการเรียนรู้ของเครื่อง นอกจากนี้ยังให้ข้อมูลสถิติทางธุรกิจเกี่ยวกับ IOT ที่ทันสมัย
AnthonyJClink

1
@Dror ถามจริง!
Mike Ezzati

32

Cassandra + Lucene เป็นตัวเลือกที่ยอดเยี่ยม มีการริเริ่มที่แตกต่างกันสำหรับปัญหานี้ตัวอย่างเช่น:

  • ดัชนี Cassandra Lucene ของ Stratio - มาจาก Stratio Cassandra เป็นปลั๊กอินสำหรับ Apache Cassandra ที่ขยายฟังก์ชันดัชนี ( https://github.com/Stratio/cassandra-lucene-index )
  • Stratio Cassandra เป็นการรวมพื้นเมืองกับ Apache Lucene มันน่าสนใจมาก ( https://github.com/Stratio/stratio-cassandra ) - โครงการนี้ได้รับการยกเลิกเนื่องจากดัชนี Cassandra Lucene ของ Stratio
  • Tuplejump Calliope เหมือนกับ Stratio Cassandra แต่มันใช้งานน้อยกว่า ( https://github.com/tuplejump/stargate-core )
  • DSE Search โดย Datastax อนุญาตให้ใช้ Cassandra กับ Apache Solr แต่เป็นตัวเลือกที่เป็นกรรมสิทธิ์ ( http://www.datastax.com/what-we-offer/products-services/datastax-enterprise )

สิ่งหนึ่งที่ควรทราบคือใน 2.1 คุณสามารถ "วาง" ตัวสร้างดัชนีที่กำหนดเองได้แล้ว ... ตัวอย่างเช่นคุณสามารถเลียนแบบสิ่งที่ Statio กำลังทำด้วยส้อมของ C * แต่ไม่อยู่ใน mainline C * ฉันไม่ทราบถึงความพยายามอย่างกว้างขวางในการทำสิ่งนี้ แต่ฉันวางแผนที่จะลดดัชนี Lucene ลงใน C * ด้วยตัวเอง สำหรับข้อมูลเพิ่มเติม: issue.apache.org/jira/browse/CASSANDRA-8717
evanv

8

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

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

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


4

การจัดเก็บข้อมูลด้วยการผสมผสานระหว่าง Cassandra และ ElasticSearch ทำให้คุณมีฟังก์ชันการทำงานสูงสุด ช่วยให้คุณค้นหาตารางคีย์ - ค่าและยังช่วยให้คุณค้นหาข้อมูลในดัชนี

การผสมผสานนี้ช่วยให้คุณมีความยืดหยุ่นมากเหมาะสำหรับการใช้งานของคุณ


4

Elassandraเป็นโซลูชันรวมของ Cassandra + Elastic search โดยใช้การค้นหาแบบยืดหยุ่นเพื่อจัดทำดัชนีข้อมูลและ Cassandra เป็นที่จัดเก็บข้อมูลฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพ แต่ตามบทความนี้ประสิทธิภาพดี
หากแอปพลิเคชันของคุณต้องการคุณสมบัติการค้นหา Elassandra เป็นตัวเลือกโอเพ่นซอร์สที่ดีที่สุด มีการค้นหา DSE แต่มีราคาแพง


1

เราได้พัฒนาแอปพลิเคชันที่เราใช้ Elasticsearch และ Cassandra ข้อมูลที่คล้ายกันถูกเก็บไว้ใน Cassandra และจัดทำดัชนีไว้ใน Elasticsearch

UI ของแอปพลิเคชันของเรามีคุณสมบัติเช่นการค้นหาการรวบรวมการส่งออกข้อมูล ฯลฯ ไมโครเซอร์วิสส่วนหลังได้รับข้อมูลจำนวนมากอย่างต่อเนื่อง (ในหัวข้อ Kafka) และจัดเก็บไว้ใน Cassandra เมื่อข้อมูลถูกเก็บไว้ใน Cassandra บริการจะตรวจสอบให้แน่ใจว่าข้อมูลถูกจัดทำดัชนีไว้ใน Elasticsearch

Cassandra ทำหน้าที่เป็น "Source of truth" สำหรับ Elasticsearch ในกรณีที่จำเป็นต้องทำดัชนี ES ซ้ำเราสอบถาม Cassandra และจัดทำดัชนีข้อมูลใหม่เป็น ES

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


0
  • เนื่องจาก elasticsearch สร้างขึ้นจากดัชนี Lucene และหากคุณต้องการจัดเก็บการจัดทำดัชนีใน elasticsearch จะมีประสิทธิภาพดีที่สุดเมื่อเทียบกับการจัดทำดัชนีใน Cassandra เองเพื่อดึงข้อมูล
  • หากความต้องการของคุณไม่เกี่ยวข้องกับการดึงข้อมูลแบบเรียลไทม์คุณสามารถใช้ elasticsearch เป็นฐานข้อมูล NoSQL ได้เช่นกันมีความคิดที่ว่า ElasticSearch สูญเสียการเขียนและการเปลี่ยนแปลง Schema ทำได้ยาก แต่ถ้าปริมาณข้อมูลของคุณไม่ใหญ่เกินไป คุณสามารถบรรลุ elasticsearch เป็นเครื่องมือค้นหาด้วยการจัดทำดัชนีที่ดีที่สุดพร้อมกับ elasticsearch เป็นฐานข้อมูล aNoSQL มีหลายวิธีที่คุณสามารถป้องกันได้ ฉันได้ดำเนินการเกี่ยวกับการเปลี่ยนแปลงสคีมาใน elasticsearch แล้วหากโครงสร้างข้อมูลของคุณสอดคล้องกันก็จะสร้างปัญหาใด ๆ
  • เป็นผู้สนับสนุน ElasticSearch หรือ SOlr ฉันได้ทำงานกับทั้งเครื่องมือค้นหาและฉันพบว่าทั้งสองเครื่องมือค้นหาสามารถใช้งานได้อย่างคล่องแคล่วหากคุณกำหนดค่าอย่างถูกต้อง
  • มีข้อเสียเพียงอย่างเดียวที่ฉันคิดได้หากคุณกำหนดเป้าหมายผลลัพธ์แบบเรียลไทม์และไม่สามารถตอบสนองความล่าช้าในการประมวลผลของคุณได้ในมิลลิวินาที ถ้าอย่างนั้นจะเป็นการดีกว่าที่จะรับความช่วยเหลือจากฐานข้อมูล NoSQL อื่น ๆ เช่น Cassandra หรือ couchbase
  • Cassandra กับ solr ทำงานได้ดีกว่า Cassandra ด้วย elasticSearch

0

Cassandra สามารถดึงข้อมูลด้วย IDได้อย่างยอดเยี่ยม ฉันไม่รู้มากเกี่ยวกับประสิทธิภาพของดัชนีรอง แต่ฉันสงสัยว่ามันเร็วพอ ๆ กับ Elasticsearch แน่นอนElasticSearch ชนะเมื่อมันมาถึงฟังก์ชั่นการค้นหาข้อความเต็ม ( การวิเคราะห์ข้อความ , ความเกี่ยวข้องการให้คะแนนฯลฯ )

Cassandra ได้รับรางวัลจากประสิทธิภาพการอัปเดตเช่นกัน Elasticsearch รองรับการอัปเดต แต่การอัปเดตเป็น reindex + soft delete ในการทำงานของอะตอม

Cassandra มีรูปแบบการจำลองที่ดีมาก (หากคุณต้องการความปลอดภัยเป็นพิเศษ) Elasticsearch ก็โอเคเช่นกันฉันไม่ได้อยู่ในค่ายที่ระบุว่า ES ไม่น่าเชื่อถือโดยเฉพาะ (บางครั้งก็มีปัญหาเช่นเดียวกับซอฟต์แวร์ทั้งหมด)

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

หากความต้องการของคุณเป็นที่พอใจของหนึ่งในนั้น (เช่นที่นี่ดูเหมือนว่า ES จะทำงานได้ดี) ฉันจะใช้เพียงอย่างเดียว หากคุณมีข้อกำหนดจากทั้งสองโลกคุณสามารถ:

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