Elasticsearch vs Cassandra vs Elasticsearch dengan Cassandra

110

Saya mempelajari NoSQL dan melihat berbagai opsi untuk salah satu persyaratan klien saya. Saya telah mempelajari berbagai sumber sebelum mengajukan pertanyaan ini (seseorang dengan sedikit pengetahuan tentang NoSQL)

  • Saya perlu menyimpan data dengan kecepatan lebih cepat dan membaca data.
  • Sepenuhnya aman dari kegagalan dan mudah diskalakan.
  • Mampu mencari melalui data untuk Analytics.

Saya berakhir dengan daftar singkat: Cassandra and Elasticsearch

Yang saya mengerti adalah Cassandra adalah solusi penyimpanan NoSQL yang sempurna untuk saya, karena saya dapat menulis data dan membaca data menggunakan indeks. Di mana gagal atau bisa gagal ada di Analytics. Di masa mendatang, jika saya ingin mendapatkan data dari from_date to to_date, atau lebih banyak cara untuk mendapatkan data untuk analitik, jika saya tidak mendesain model Data dengan benar atau mempertahankan pandangan jangka panjang, yang mungkin cukup sulit di dunia yang terus berubah.

Sementara Elastic Searchyang terbaik dalam pengindeksan (didukung oleh Lucene), dan dapat mencari data secara acak dengan melemparkan beberapa teks acak. Tetapi apakah itu berfungsi sama bahkan jika saya ingin mengambil data from_date to to_date(saya harapkan mungkin). Tetapi pertanyaan sebenarnya adalah, apakah ini Mesin Pencari, atau penyimpanan data NoSQL yang sempurna seperti Cassandra? Jika ya, mengapa kita masih membutuhkan Cassandra?

Jika keduanya berada di dunia yang berbeda, jelaskan itu! Bagaimana kita menggabungkannya untuk mendapatkan solusi yang lebih efektif?

Reddy
sumber
2
Anda juga harus mempertimbangkan DSE Search = Cassandra + solr integrated = best of both worlds: db terukur untuk penyimpanan yang didorong oleh kekuatan pencarian Solr.
Bereng
1
@Bereng, saya kira DSE bersifat komersial dan kami tidak memelihara perangkat lunak komersial.
Reddy
3
Jika Anda adalah perusahaan rintisan dengan pendapatan bersih <$ 2 juta (AS), mereka akan mengizinkan Anda menggunakan DSE secara gratis (setidaknya untuk satu atau dua tahun).
Aaron

Jawaban:

150

Salah satu aplikasi kami menggunakan data yang disimpan ke dalam Cassandra dan ElasticSearch. Kami menggunakan Cassandra untuk mengakses rekaman tersebut kapan pun kami bisa, dan menduplikasi data ke dalam tabel kueri yang dirancang untuk mematuhi permintaan sisi aplikasi tertentu. Untuk pencarian yang lebih liberal daripada yang bisa dimungkinkan oleh tabel kueri kami, ElasticSearch melakukan fungsi itu dengan baik.

Kami telah menanyakan pertanyaan yang sama (pada diri kami sendiri) ... "Mengapa kita tidak mendapatkan semuanya dari ElastsicSearch?"

Jawabannya adalah ElasticSearch dirancang untuk menjadi mesin pencari, dan bukan penyimpanan data yang persisten. Terkadang ElasticSearch kehilangan penulisan. Perubahan skema sulit dilakukan di ElasticSearch tanpa menghapus semuanya dan memuat ulang. Untuk tujuan itu, saya telah menulis pekerjaan yang dirancang untuk menjaga ElasticSearch tetap sinkron dengan klaster Cassandra kami. Ada juga diskusi yang cukup baru di Quora tentang topik ini , yang menghasilkan poin serupa.

Karena itu, ElasticSearch berfungsi dengan baik sebagai mesin pencari. Dan Cassandra berfungsi dengan baik sebagai penyimpanan data yang dapat diskalakan dan berkinerja tinggi. Tetapi menanyakan data berbeda dengan pencarian data. Ada kalanya kita membutuhkan satu atau yang lain, dan kombinasi keduanya bekerja dengan baik untuk aplikasi kita. Ini mungkin (atau mungkin tidak) bekerja dengan baik untuk Anda.

Mengenai analitik, saya telah berhasil menggunakan konektor Cassandra Spark, untuk melayani kueri OLAP yang lebih kompleks. Semoga membantu.

Edit 20200421

Saya telah menulis jawaban baru untuk pertanyaan serupa:

ElasticSearch vs. ElasticSearch + Cassandra

Aaron
sumber
24
Bisakah seseorang menjelaskan perbedaan antara membuat kueri dan menelusuri data?
Dror
21
@dror misalnya jika Anda tahu id data Anda, Anda hanya memintanya (cassandra) dan jika Anda tidak tahu id data Anda maka Anda mencarinya / mereka (pencarian elastis).
arsenik
2
@Gladwell semuanya tergantung pada ukuran data Anda dan kompleksitas kueri Anda. Secara teori, Elastis dapat melakukan semuanya. Namun, saya mempercayai Cassandra untuk melakukan pekerjaan penskalaan yang lebih baik untuk mendukung kumpulan data yang besar (untuk kueri) daripada Elastis, terutama jika Anda mendukung multi-region / DC.
Aaron
1
@ Aaron ... penskalaan untuk mendukung kumpulan data besar adalah hal yang dilakukan kedua mesin ini dengan baik. Organisasi kami menggunakan pencarian elastis sebagai database utama, mesin peringatan, alat analitik, dan sekarang xpack mendukung pembelajaran mesin; itu juga memberikan statistik bisnis di sekitar edge IOT kami.
AnthonyJClink
1
@Dror Mengajukan pertanyaan sebenarnya!
Mike Ezzati
32

Cassandra + Lucene adalah pilihan yang bagus. Ada berbagai inisiatif untuk masalah ini, misalnya:

Alvaro Agea
sumber
Satu hal yang perlu diingat, di 2.1 Anda sekarang dapat "memasukkan" pengindeks kustom ... jadi misalnya Anda bisa meniru apa yang dilakukan Statio dengan garpu C * mereka tetapi di luar jalur utama C *. Saya tidak mengetahui adanya upaya luas untuk melakukan ini, tetapi saya berencana untuk memasukkan indeks Lucene ke C * dengan cara ini sendiri. Untuk info lebih lanjut: issues.apache.org/jira/browse/CASSANDRA-8717
evanv
8

Setelah mengerjakan masalah ini sendiri, saya telah menyadari bahwa database NoSQL seperti casandra bagus ketika Anda ingin memastikan Anda mempertahankan skema data Anda dengan operasi penulisan yang andal, dan tidak ingin memanfaatkan operasi pengindeksan yang ditawarkan elasticsearch. Jika Anda ingin mempertahankan beberapa data indeks maka elasticsearch bagus jika Anda mempercayai skema Anda dan hanya akan melakukan lebih banyak pembacaan daripada menulis.

Kasus saya adalah analitik data. Jadi saya mempertahankan banyak Latices saya dalam pencarian elastis karena nanti saya ingin menjelajahi banyak data untuk melihat apa yang seharusnya menjadi langkah saya selanjutnya. Saya akan menggunakan casandra jika saya ingin memiliki banyak perubahan dalam skema data di pileline analitik saya.

Juga ada banyak alat bantu bagus seperti kibana yang dapat Anda gunakan untuk menyajikan data Anda dengan beberapa grafik yang bagus. Mungkin saya malas tapi mereka sangat tampan dan mereka membantu saya.

M.Rez
sumber
4

Menyimpan data dalam kombinasi Cassandra dan ElasticSearch memberi Anda sebagian besar fungsionalitas. Ini memungkinkan Anda untuk mencari tabel nilai kunci, dan juga memungkinkan Anda untuk mencari data dalam indeks.

Kombinasi tersebut memberi Anda banyak fleksibilitas, ideal untuk aplikasi Anda.


sumber
4

Elassandra adalah solusi gabungan dari pencarian Cassandra + Elastis, Ini menggunakan pencarian Elastis untuk mengindeks data dan Cassandra sebagai penyimpanan data, saya tidak yakin tentang kinerjanya tetapi menurut artikel ini , kinerjanya bagus.
Jika aplikasi Anda membutuhkan fitur pencarian, Elassandra adalah opsi open source terbaik. Pencarian DSE tersedia tetapi harganya mahal.

anavaras lamurep
sumber
1

Kami telah mengembangkan aplikasi di mana kami menggunakan Elasticsearch dan Cassandra. Data serupa disimpan ke Cassandra dan diindeks ke Elasticsearch.

UI aplikasi kami memiliki fitur-fitur seperti pencarian, agregasi, ekspor data, dll. Layanan mikro back-end terus-menerus mendapatkan data besar (tentang topik Kafka) dan menyimpannya ke Cassandra. Setelah data disimpan ke Cassandra, layanan akan memastikan data diindeks ke Elasticsearch.

Cassandra bertindak sebagai "Sumber kebenaran" untuk Elasticsearch. Dalam kasus, di mana pengindeksan ulang indeks ES diperlukan, kami menanyakan Cassandra dan mengindeks ulang data ke dalam ES.

Solusi ini membantu kami, karena sangat mudah untuk diskalakan dan penelusuran serta agregasi jauh lebih cepat.

Sumit A
sumber
0
  • Karena elasticsearch dibangun di atas indeks Lucene dan jika Anda ingin menyimpan pengindeksan di elasticsearch, kinerjanya paling baik dibandingkan dengan pengindeksan di Cassandra sendiri untuk mengambil data.
  • Jika kebutuhan Anda tidak terkait dengan pengambilan real-time maka Anda juga dapat menggunakan elasticsearch sebagai database NoSQL, ada pemikiran bahwa ElasticSearch kehilangan penulisan & Perubahan skema sulit, tetapi jika volume data Anda tidak terlalu besar. Anda dapat dengan mudah mencapai elasticsearch sebagai mesin pencari dengan pengindeksan terbaik bersama dengan elasticsearch sebagai database aNoSQL. Ada beberapa cara untuk mencegahnya. Saya telah mengerjakan perubahan skema di elasticsearch, jika struktur data Anda konsisten maka itu akan menimbulkan masalah.
  • Menjadi pendukung ElasticSearch atau SOlr. Saya telah bekerja di kedua mesin pencari dan saya mengalami bahwa kedua mesin pencari dapat digunakan dengan lancar jika Anda mengkonfigurasinya dengan benar.
  • Hanya kekurangan yang bisa saya pikirkan, jika Anda menargetkan hasil waktu nyata dan tidak dapat mengimbangi penundaan milidetik dalam respons Anda. Maka lebih baik mengambil bantuan database NoSQL lain seperti cassandra atau couchbase.
  • Cassandra dengan solr, bekerja lebih baik daripada Cassandra dengan elasticSearch.
vishal yadav
sumber
0

Cassandra pandai mengambil data dengan ID . Saya tidak tahu banyak tentang kinerja indeks sekunder, tapi saya ragu itu secepat Elasticsearch. Tentu Elasticsearch menang dalam hal fungsionalitas pencarian teks lengkap ( analisis teks , penilaian relevansi , dll).

Cassandra juga menang dalam performa pembaruan . Elasticsearch mendukung pembaruan, tetapi pembaruan benar-benar merupakan indeks ulang + hapus lunak dalam operasi atom.

Cassandra memiliki model replikasi yang sangat bagus (jika Anda perlu ekstra-fail-safe). Elasticsearch juga baik-baik saja, saya tidak berada di kamp yang mengatakan ES sangat tidak dapat diandalkan (terkadang ada masalah, seperti semua perangkat lunak).

Elasticsearch juga memiliki agregasi untuk analitik waktu nyata. Dan karena penelusuran sangat cepat, analitik pada subkumpulan data juga akan cepat .

Jika persyaratan Anda dipenuhi dengan cukup baik oleh salah satunya (seperti di sini sepertinya ES akan bekerja dengan baik), saya hanya akan menggunakan satu. Jika Anda memiliki persyaratan dari kedua dunia, Anda dapat:

  • gunakan salah satunya dan atasi sisi negatifnya. Misalnya, Anda mungkin dapat menangani banyak pembaruan dengan Elasticsearch, tetapi dengan lebih banyak pecahan dan lebih banyak perangkat keras
  • gunakan keduanya dan pastikan keduanya sinkron
Radu Gheorghe
sumber