Elassandra は、Elasticsearch 検索エンジンを含む Apache Cassandra ディストリビューションです。 Elassandra は、アクティブ/アクティブ モードでの複数のデータセンター間のレプリケーションをサポートする、マルチマスター マルチクラウド データベースおよび検索エンジンです。
Elasticsearch コードは Cassandra ノードに埋め込まれており、Cassandra テーブルで高度な検索機能を提供し、Cassandra は Elasticsearch データおよび構成ストアとして機能します。
Elassandra は Cassandra vnode をサポートしており、インデックスを再シャーディングすることなくノードを追加することで水平方向にスケーリングします。
プロジェクトのドキュメントは doc.elassandra.io で入手できます。
Cassandra ユーザー向けに、elassandra は Elasticsearch 機能を提供します。
Elasticsearch ユーザー向けに、elassandra は便利な機能を提供します。
Docker で単一ノードの Elassandra クラスターを実行するためのクイック スタート ガイド。
Google Kubernetes Engine を起動して Elassandra をデプロイします。
<<<<<<< HEAD バージョン 6.8.4.2 以降、システム プロパティを使用してゴシップ 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 以降にアップグレードされたら、 conf/jvm.optionsに-Des.compress_x1=trueを追加し、すべてをローリング再起動することで X1 圧縮を有効にする必要があります。ノード。バージョン 6.8.4.2 以降を実行しているノードは、圧縮 X1 と非圧縮 X1 を読み取ることができます。
バージョン 6.2.3.21 より前のバージョンでは、 elasic_adminキースペース (および elastic_admin_[datacenter.group]) の Cassandra レプリケーション係数は、データセンターのノード数に合わせて自動的に調整されました。バージョン 6.2.3.21 以降、大規模クラスターのパフォーマンスに影響を与えるため、このキースペースのレプリケーション係数を適切に調整するのは Elassandra 管理者の責任になります。 Elasticsearch マッピングの更新は、成功するために QUORUM ノードを必要とする PAXOS トランザクションに依存しているため、各データセンターのレプリケーション係数は少なくとも 3 である必要があることに注意してください。
Elassandra 6.2.3.19 メタデータ バージョンは、Cassandra テーブルelastic_admin.metadata_log (6.2.3.8 から 6.2.3.18 までのelastic_admin.metadata ) に依存して、elasticsearch マッピングの更新履歴を保持し、起こり得る PAXOS 書き込みタイムアウトの問題から自動的に回復するようになりました。
クラスターの最初のノードをアップグレードするとき、Elassandra は現在のmetadata.version を新しいelastic_admin.metadata_logテーブルに自動的にコピーします。 Elasticsearch のマッピングの不一致を回避するには、ローリング アップグレードの進行中はマッピングの更新を避ける必要があります。すべてのノードがアップグレードされると、 elastic_admin.metadataは使用されなくなり、削除できます。その後、新しいelastic_admin.metadata_logからマッピング更新履歴を取得し、どのノードがいつ、どのような理由でマッピングを更新したかを知ることができます。
Elassandra 6.2.3.8+ では、CQL スキーマ拡張機能を使用して、CQL スキーマ内の elasticsearch マッピングを完全に管理できるようになりました ( system_schema.tables 、 columns extensions を参照)。これらのテーブル拡張と、elasticsearch インデックスの作成/変更の結果として生じる CQL スキーマの更新は、バッチ化されたアトミック スキーマの更新で更新され、同時更新が発生した場合の一貫性が確保されます。さらに、これらの拡張機能はバイナリで保存され、より効率的に行うための部分的な更新をサポートしています。その結果、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 = ' ' ;
警告: Elassandra によって使用される CQL テーブル拡張機能により、一部の古いバージョンのcqlshでは、「'module' オブジェクトには属性 'viewkeys' がありません。」というエラー メッセージが表示される場合があります。 。これは、Cassandra に埋め込まれた古い Python 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"
} '
次に、Cassandra で検索します。
bin/cqlsh -e " SELECT * from twitter. " _doc " "
Elassandra は舞台裏で新しい Keyspace twitter
とテーブル_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 API を使用して検索します。
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.