Elassandra adalah distribusi Apache Cassandra yang mencakup mesin pencari Elasticsearch. Elassandra adalah database multi-cloud dan mesin pencari multi-master dengan dukungan untuk replikasi di beberapa pusat data dalam mode aktif/aktif.
Kode Elasticsearch tertanam di node Cassanda yang menyediakan fitur pencarian lanjutan pada tabel Cassandra dan Cassandra berfungsi sebagai penyimpanan data dan konfigurasi Elasticsearch.
Elassandra mendukung vnode Cassandra dan menskalakan secara horizontal dengan menambahkan lebih banyak node tanpa perlu menyusun ulang indeks.
Dokumentasi proyek tersedia di doc.elassandra.io.
Bagi pengguna Cassandra, elassandra menyediakan fitur Elasticsearch :
Untuk pengguna Elasticsearch, elassandra menyediakan fitur berguna :
Panduan Mulai Cepat untuk menjalankan cluster Elassandra node tunggal di buruh pelabuhan.
Terapkan Elassandra dengan meluncurkan Google Kubernetes Engine:
<<<<<<< HEAD Sejak versi 6.8.4.2, status aplikasi gosip X1 dapat dikompresi menggunakan properti sistem. Mengaktifkan pengaturan ini memungkinkan pembuatan banyak indeks virtual. Sebelum mengaktifkan pengaturan ini, tingkatkan semua node 6.8.4.x ke 6.8.4.2 (atau lebih tinggi). Setelah semua node berada di 6.8.4.2, mereka dapat mendekompresi status aplikasi meskipun pengaturannya belum dikonfigurasi secara lokal.
Elassandra menggunakan protokol Cassandra GOSSIP untuk mengelola tabel perutean Elasticsearch dan Elassandra 6.8.4.2+ menambahkan dukungan untuk kompresi status aplikasi X1 untuk meningkatkan jumlah maksimum indeks Elasticsearch. Untuk kompatibilitas mundur, kompresi dinonaktifkan secara default, tetapi setelah semua node Anda ditingkatkan ke versi 6.8.4.2+, Anda harus mengaktifkan kompresi X1 dengan menambahkan -Des.compress_x1=true di conf/jvm.options Anda dan mulai ulang semua node. Node yang menjalankan versi 6.8.4.2+ dapat membaca X1 terkompresi dan tidak terkompresi.
Sebelum versi 6.2.3.21, faktor replikasi Cassandra untuk keyspace elasic_admin (dan elastic_admin_[datacenter.group]) secara otomatis disesuaikan dengan jumlah node pusat data. Sejak versi 6.2.3.21 dan karena memiliki dampak kinerja pada klaster besar, kini terserah kepada administrator Elassandra Anda untuk menyesuaikan dengan benar faktor replikasi untuk keyspace ini. Perlu diingat bahwa pembaruan pemetaan Elasticsearch bergantung pada transaksi PAXOS yang memerlukan node QUORUM agar berhasil, sehingga faktor replikasi harus minimal 3 pada setiap pusat data.
Versi metadata Elassandra 6.2.3.19 kini mengandalkan tabel Cassandra elastic_admin.metadata_log (yaitu elastic_admin.metadata dari 6.2.3.8 hingga 6.2.3.18) untuk menyimpan riwayat pembaruan pemetaan elasticsearch dan secara otomatis memulihkan dari kemungkinan masalah batas waktu penulisan PAXOS.
Saat memutakhirkan node pertama klaster, Elassandra secara otomatis menyalin metadata.version saat ini ke dalam tabel elastic_admin.metadata_log yang baru. Untuk menghindari inkonsistensi pemetaan Elasticsearch, Anda harus menghindari pembaruan pemetaan saat peningkatan berkelanjutan sedang berlangsung. Setelah semua node ditingkatkan, elastic_admin.metadata tidak lagi digunakan dan dapat dihapus. Kemudian, Anda bisa mendapatkan riwayat pembaruan pemetaan dari elastic_admin.metadata_log baru dan mengetahui node mana yang telah memperbarui pemetaan, kapan dan untuk alasan apa.
Elassandra 6.2.3.8+ sekarang sepenuhnya mengelola pemetaan elasticsearch dalam skema CQL melalui penggunaan ekstensi skema CQL (lihat system_schema.tables , ekstensi kolom). Ekstensi tabel ini dan pembaruan skema CQL yang dihasilkan dari pembuatan/modifikasi indeks elasticsearch diperbarui dalam pembaruan skema atom batch untuk memastikan konsistensi ketika pembaruan bersamaan terjadi. Selain itu, ekstensi ini disimpan dalam biner dan mendukung pembaruan parsial agar lebih efisien. Akibatnya pemetaan elasticsearch tidak lagi tersimpan di tabel elastic_admin.metadata .
PERINGATAN: Selama peningkatan berkelanjutan, perubahan pemetaan elasticserach tidak disebarkan antara node yang menjalankan versi baru dan versi lama, jadi jangan ubah pemetaan Anda saat Anda melakukan peningkatan. Setelah semua node Anda ditingkatkan ke 6.2.3.8+ dan divalidasi, terapkan pernyataan CQL berikut untuk menghapus metadata elasticsearch yang tidak berguna:
ALTER TABLE elastic_admin.metadata DROP metadata ;
ALTER TABLE elastic_admin.metadata WITH comment = ' ' ;
PERINGATAN: Karena ekstensi tabel CQL yang digunakan oleh Elassandra, beberapa versi lama cqlsh mungkin menyebabkan pesan kesalahan berikut "objek 'modul' tidak memiliki atribut 'viewkeys'." . Ini berasal dari driver python cassandra lama yang tertanam di Cassandra dan telah dilaporkan di CASSANDRA-14942. Solusi yang mungkin:
docker run -it --rm strapdata/cqlsh:0.1 node.example.com
Pastikan Java 8 terinstal dan JAVA_HOME
menunjuk ke lokasi yang benar.
export CASSANDRA_HOME=<extracted_directory>
bin/cassandra -e
bin/nodetool status
curl -XGET localhost:9200/_cluster/state
Cobalah mengindeks dokumen pada indeks yang tidak ada:
curl -XPUT ' http://localhost:9200/twitter/_doc/1?pretty ' -H ' Content-Type: application/json ' -d ' {
"user": "Poulpy",
"post_date": "2017-10-04T13:12:00Z",
"message": "Elassandra adds dynamic mapping to Cassandra"
} '
Kemudian cari di Cassandra:
bin/cqlsh -e " SELECT * from twitter. " _doc " "
Di balik layar, Elassandra telah membuat twitter
dan tabel Keyspace baru _doc
.
admin@cqlsh > DESC KEYSPACE twitter;
CREATE KEYSPACE twitter WITH replication = { ' class ' : ' NetworkTopologyStrategy ' , ' DC1 ' : ' 1 ' } AND durable_writes = true;
CREATE TABLE twitter . " _doc " (
" _id " text PRIMARY KEY ,
message list < text > ,
post_date list < timestamp > ,
user list < text >
) WITH bloom_filter_fp_chance = 0 . 01
AND caching = { ' keys ' : ' ALL ' , ' rows_per_partition ' : ' NONE ' }
AND comment = ' '
AND compaction = { ' class ' : ' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ' , ' max_threshold ' : ' 32 ' , ' min_threshold ' : ' 4 ' }
AND compression = { ' chunk_length_in_kb ' : ' 64 ' , ' class ' : ' org.apache.cassandra.io.compress.LZ4Compressor ' }
AND crc_check_chance = 1 . 0
AND dclocal_read_repair_chance = 0 . 1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0 . 0
AND speculative_retry = ' 99PERCENTILE ' ;
CREATE CUSTOM INDEX elastic__doc_idx ON twitter. " _doc " () USING ' org.elassandra.index.ExtendedElasticSecondaryIndex ' ;
Secara default, bidang Elasticsearch multi-nilai dipetakan ke daftar Cassandra. Sekarang, masukkan baris dengan CQL :
INSERT INTO twitter. " _doc " ( " _id " , user, post_date, message)
VALUES ( ' 2 ' , [ ' Jimmy ' ], [dateof(now())], [ ' New data is indexed automatically ' ]);
SELECT * FROM twitter. " _doc " ;
_id | message | post_date | user
-- ---+--------------------------------------------------+-------------------------------------+------------
2 | [ ' New data is indexed automatically ' ] | [ ' 2019-07-04 06:00:21.893000+0000 ' ] | [ ' Jimmy ' ]
1 | [ ' Elassandra adds dynamic mapping to Cassandra ' ] | [ ' 2017-10-04 13:12:00.000000+0000 ' ] | [ ' Poulpy ' ]
( 2 rows)
Kemudian cari dengan Elasticsearch API:
curl " localhost:9200/twitter/_search?q=user:Jimmy&pretty "
Dan berikut ini contoh tanggapannya:
{
"took" : 3 ,
"timed_out" : false ,
"_shards" : {
"total" : 1 ,
"successful" : 1 ,
"skipped" : 0 ,
"failed" : 0
},
"hits" : {
"total" : 1 ,
"max_score" : 0.6931472 ,
"hits" : [
{
"_index" : " twitter " ,
"_type" : " _doc " ,
"_id" : " 2 " ,
"_score" : 0.6931472 ,
"_source" : {
"post_date" : " 2019-07-04T06:00:21.893Z " ,
"message" : " New data is indexed automatically " ,
"user" : " Jimmy "
}
}
]
}
}
This software is licensed under the Apache License, version 2 ("ALv2"), quoted below.
Copyright 2015-2018, Strapdata ([email protected]).
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.