Elassandra هي توزيعة Apache Cassandra تتضمن محرك بحث Elasticsearch. Elassandra عبارة عن قاعدة بيانات سحابية متعددة الوسائط ومحرك بحث مع دعم للنسخ المتماثل عبر مراكز بيانات متعددة في الوضع النشط/النشط.
يتم تضمين كود Elasticsearch في عقد Cassanda مما يوفر ميزات بحث متقدمة على جداول Cassandra ويعمل Cassandra كمخزن بيانات وتكوينات Elasticsearch.
تدعم Elassandra العقد الافتراضية لـ Cassandra وتقوم بقياسها أفقيًا عن طريق إضافة المزيد من العقد دون الحاجة إلى إعادة تصنيف المؤشرات.
وثائق المشروع متاحة على doc.elassandra.io.
بالنسبة لمستخدمي Cassandra، توفر elassandra ميزات Elasticsearch:
بالنسبة لمستخدمي Elasticsearch، توفر elassandra ميزات مفيدة:
دليل البدء السريع لتشغيل مجموعة Elassandra ذات عقدة واحدة في عامل الإرساء.
انشر Elassandra من خلال إطلاق Google Kubernetes Engine:
<<<<<<< HEAD منذ الإصدار 6.8.4.2، يمكن ضغط حالة تطبيق gossip X1 باستخدام خاصية النظام. يتيح تمكين هذه الإعدادات إنشاء الكثير من المؤشرات الافتراضية. قبل تمكين هذا الإعداد، قم بترقية كافة العقد 6.8.4.x إلى 6.8.4.2 (أو أعلى). بمجرد وصول كافة العقد إلى الإصدار 6.8.4.2، فإنها تكون قادرة على فك ضغط حالة التطبيق حتى إذا لم يتم تكوين الإعدادات محليًا بعد.
تستخدم Elassandra بروتوكول Cassandra GOSSIP لإدارة جدول توجيه Elasticsearch ويضيف Elassandra 6.8.4.2+ دعمًا لضغط حالة تطبيق X1 لزيادة الحد الأقصى لعدد مؤشرات Elasticsearch. للتوافق مع الإصدارات السابقة، يتم تعطيل الضغط افتراضيًا، ولكن بمجرد ترقية جميع العقد إلى الإصدار 6.8.4.2+، يجب عليك تمكين ضغط X1 عن طريق إضافة -Des.compress_x1=true في conf/jvm.options وإعادة تشغيل الكل. العقد. العقد التي تعمل بالإصدار 6.8.4.2+ قادرة على قراءة X1 المضغوطة وغير المضغوطة.
قبل الإصدار 6.2.3.21، تم ضبط عامل النسخ المتماثل Cassandra لمساحة المفاتيح elasic_admin (و elastic_admin_[datacenter.group]) تلقائيًا على عدد عقد مركز البيانات. منذ الإصدار 6.2.3.21 ولأنه له تأثير على الأداء على المجموعات الكبيرة، أصبح الأمر الآن متروكًا لمسؤول Elassandra لديك لضبط عامل النسخ المتماثل لمساحة المفاتيح هذه بشكل صحيح. ضع في اعتبارك أن تحديثات تعيين Elasticsearch تعتمد على معاملة PAXOS التي تتطلب نجاح عقد QUORUM، لذلك يجب أن يكون عامل النسخ المتماثل 3 على الأقل في كل مركز بيانات.
يعتمد إصدار البيانات التعريفية Elassandra 6.2.3.19 الآن على جدول Cassandra elastic_admin.metadata_log (الذي كان elastic_admin.metadata من 6.2.3.8 إلى 6.2.3.18) للاحتفاظ بسجل تحديث تعيين Elasticsearch والتعافي تلقائيًا من مشكلة مهلة الكتابة المحتملة لـ PAXOS.
عند ترقية العقدة الأولى للمجموعة، تقوم Elassandra تلقائيًا بنسخ بيانات التعريف الحالية. الإصدار إلى جدول elastic_admin.metadata_log الجديد. لتجنب عدم تناسق تعيين Elasticsearch، يجب عليك تجنب تحديث التعيين أثناء تقدم الترقية المستمرة. بمجرد ترقية جميع العقد، لن يتم استخدام elastic_admin.metadata بشكل أكبر ويمكن إزالتها. بعد ذلك، يمكنك الحصول على سجل تحديث التعيين من elastic_admin.metadata_log الجديد ومعرفة العقدة التي قامت بتحديث التعيين ومتى ولأي سبب.
يدير Elassandra 6.2.3.8+ الآن بشكل كامل تعيين Elasticsearch في مخطط CQL من خلال استخدام امتدادات مخطط CQL (انظر system_schema.tables ، امتدادات الأعمدة). يتم تحديث ملحقات الجدول وتحديثات مخطط CQL الناتجة عن إنشاء/تعديل فهرس Elasticsearch في تحديثات المخطط الذري المجمعة لضمان الاتساق عند حدوث تحديثات متزامنة. علاوة على ذلك، يتم تخزين هذه الملحقات في شكل ثنائي وتدعم التحديثات الجزئية لتكون أكثر كفاءة. ونتيجة لذلك، لا يتم تخزين تعيين Elasticsearch في جدول elastic_admin.metadata .
تحذير: أثناء الترقية المتدرجة، لا يتم نشر تغييرات تعيين Elasticserach بين العقد التي تعمل بالإصدارين الجديد والقديم، لذا لا تغير تعيينك أثناء الترقية. بمجرد ترقية جميع العقد إلى الإصدار 6.2.3.8+ والتحقق من صحتها، قم بتطبيق عبارات CQL التالية لإزالة بيانات تعريف Elasticsearch عديمة الفائدة:
ALTER TABLE elastic_admin.metadata DROP metadata ;
ALTER TABLE elastic_admin.metadata WITH comment = ' ' ;
تحذير: نظرًا لامتدادات جدول CQL التي تستخدمها Elassandra، قد تؤدي بعض الإصدارات القديمة من cqlsh إلى رسالة الخطأ التالية "لا يحتوي كائن 'الوحدة النمطية' على سمة 'مفاتيح العرض'." . يأتي هذا من برنامج تشغيل python cassandra القديم المضمن في Cassandra وتم الإبلاغ عنه في CASSANDRA-14942. الحلول الممكنة:
docker run -it --rm strapdata/cqlsh:0.1 node.example.com
تأكد من تثبيت Java 8 وأن JAVA_HOME
يشير إلى الموقع الصحيح.
export CASSANDRA_HOME=<extracted_directory>
bin/cassandra -e
bin/nodetool status
curl -XGET localhost:9200/_cluster/state
حاول فهرسة مستند في فهرس غير موجود:
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"
} '
ثم ابحث في كاساندرا:
bin/cqlsh -e " SELECT * from twitter. " _doc " "
خلف الكواليس، قامت Elassandra بإنشاء موقع Keyspace twitter
وtable _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 ' ;
افتراضيًا، يتم تعيين حقول Elasticsearch متعددة القيم إلى قائمة Cassandra. الآن، أدخل صفًا باستخدام 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)
ثم ابحث عنه باستخدام واجهة برمجة تطبيقات Elasticsearch:
curl " localhost:9200/twitter/_search?q=user:Jimmy&pretty "
وهنا نموذج للرد:
{
"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.