Cassandraの紹介と使用


紹介する
Apache Cassandraはオープンソース分散型NoSQLデータベースシステムです.当初はFacebookが開発し、受信ボックスなどの簡単なフォーマットのデータを格納し、Google BigTableのデータモデルとAmazon Dynamoの完全な分散アーキテクチャを一体化した.Facebookは2008年にCassandraをオープンソースし、その後、Cassandraの良好な拡張性のため、Digg、Twitterなどの有名なWeb 2.0サイトに採用され、流行の分散構造化データストレージ案となった.オープンソース、分散型、センターレス、水平拡張対応、高可用性のKEY-VALUEタイプのNOSQLデータベースです.公式サイトhttp://cassandra.apache.org/doc/latest/
バージョン#バージョン#
Apache Cassandra、現在最新版3.0.13 DataStax Community Edition(Apache Cassandraに基づいて推奨)-yum、rpmの迅速なインストールをサポート-yumインストールのアップグレードが便利-ディレクトリ環境の自動構成-OpsCenterとCQL開発ツール-DevCenter運営メンテナンスツール-OpsCenter DataStaxはCassandraを商業化して運営する会社です.
システムアーキテクチャ
アマゾンのDynamoとGoogleのBigTableの2つの部分から構成されています.
コンシステンシ
データベースの一貫性とは?読み取り操作は必ず最新の書き込みの結果を返します.Cassandraは最終的なコンシステンシ(弱いコンシステンシ):書き込みに成功した後、読み込まれたのは必ずしも最新のデータではありませんが、時間(ミリ秒レベルでは、機械室をまたぐ時間が長くなります)が経過すると、すべてのコピーが一致します.Cassandraは最終的な一貫性の原因である:書き込み性能を最適化し、ONE、Qurum、ALLなどをサポートする.Cassandraは致性調整をサポートしている:ノード数がコピー数と一致することが要求される場合、すなわちALLである場合、強い一致性であると考えられる.
CAP理論
CAP理論は1つの分布式システムの中で、あなたはその中の2つの方面を強化するしかないことを指摘します-Consistent:一致性、毎回読むのはすべて最新のデータです-Available:可用性、クライアントはいつもデータを読み書きすることができます-Partition Tolerant:パーティション耐性、データベースは複数の機械に分散して、ある機械が故障しても、サービスを提供することができます
プログラミングドライバ
DataStax Java Driver for Apache CassandraはApache CassandraのJavaドライバです.Cassandra Query Language version 3(CQL 3)とCassandraのバイナリプロトコルをサポートします.主に次のモジュールが含まれています.-driver-core:コア層-driver-mapping:オブジェクトマッピング-driver-extras:JAVAドライバのオプションプロパティ-driver-examples-driver-testsドライバドキュメントアドレスhttp://docs.datastax.com/en/developer/java-driver/3.0/
リレーショナル・データベースの比較
Cassandra
リレーショナル・データベース
水平方向の拡張
Yes
高可用性
Yes
クエリー方式
CQL(SQL類似)、API
コンシステンシ
調整可能な整合性
トランザクションのサポート
1.Xは行レベルのトランザクションをサポートし、2.Xは軽量レベルの取引メカニズムをサポートする
Cassandraの概要とデータモデル設計https://wenku.baidu.com/view/8eaabe6987c24028915fc386.html
DB-Engineデータベースランキングhttps://db-engines.com/en/rankingHBAseは15名です.
データ型
クエリー言語(CQL)
コマンドに不慣れな場合は、cqlshコマンドラインモードを行った後、helpを入力してサポートを表示するコマンドです.
データ型
CQLはSQLのようなクエリー言語で、以下のように豊富なデータ型をサポートしています.cql_type ::= native_type | collection_type | user_defined_type | tuple_type | custom_type
native_type
native_type ::=  ASCII
                 | BIGINT
                 | BLOB
                 | BOOLEAN
                 | COUNTER
                 | DATE
                 | DECIMAL
                 | DOUBLE
                 | DURATION
                 | FLOAT
                 | INET
                 | INT
                 | SMALLINT
                 | TEXT
                 | TIME
                 | TIMESTAMP
                 | TIMEUUID
                 | TINYINT
                 | UUID
                 | VARCHAR
                 | VARINT

データベースデータ型とJAVAデータ型のマッピング関係.
CQL3 data type
Getter name
Java type
ascii
getString
java.lang.String
bigint
getLong
long
blob
getBytes
java.nio.ByteBuffer
boolean
getBool
boolean
counter
getLong
long
date
getDate
LocalDate
decimal
getDecimal
java.math.BigDecimal
double
getDouble
double
float
getFloat
float
inet
getInet
java.net.InetAddress
int
getInt
int
list
getList
java.util.List
map
getMap
java.util.Map
set
getSet
java.util.Set
smallint
getShort
short
text
getString
java.lang.String
time
getTime
long
timestamp
getTimestamp
java.util.Date
timeuuid
getUUID
java.util.UUID
tinyint
getByte
byte
tuple
getTupleValue
TupleValue
user-define types
getUDTValue
UDTValue
uuid
getUUID
java.util.UUID
varchar
getString
java.lang.String
varint
getVarint
java.math.BigInteger
keyspaceの作成
Cassandraのストレージ抽象構造はデータベースと同様にkeyspaceはリレーショナルデータベースのdatabaseまたはschemaに対応し,column familyはtableに対応する.例は、CREATE KEYSPACE iotstp WITH replication = {'class': 'SimpleStrategy','replication_factor': 1};の他の動作です.
ALTER KEYSPACE iotstp WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4};
use iotstp;
DROP KEYSPACE iotstp;

コマンドdesc keyspacesを使用しているkeyspaceを確認します.
Tableの作成
作成例は次のとおりです.
CREATE TABLE IF NOT EXISTS iotstp.user (
    id timeuuid,
    tenant_id timeuuid,
    email text,
    additional_info text,
    PRIMARY KEY (id, tenant_id)
);

変更例:
alter_table_statement   ::=  ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=  ADD column_name cql_type ( ',' column_name cql_type )*
                             | DROP column_name ( column_name )*
                             | WITH options
ALTER TABLE iotstp.user ADD address varchar;

ALTER TABLE iotstp.user
       WITH comment = 'A most excellent and useful table'
       AND read_repair_chance = 0.2;

テーブルの削除
drop_table_statement ::=  DROP TABLE [ IF EXISTS ] table_name

テーブルを空にする
truncate_statement ::=  TRUNCATE [ TABLE ] table_name

コマンドdesc tablesが現在使用されているtableを確認します.
データ操作
selectクエリー
select_statement ::=  SELECT [ JSON | DISTINCT ] ( select_clause | '*' )
                      FROM table_name
                      [ WHERE where_clause ]
                      [ GROUP BY group_by_clause ]
                      [ ORDER BY ordering_clause ]
                      [ PER PARTITION LIMIT (integer | bind_marker) ]
                      [ LIMIT (integer | bind_marker) ]
                      [ ALLOW FILTERING ]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | CAST '(' selector AS cql_type ')'
                      | function_name '(' [ selector ( ',' selector )* ] ')'
                      | COUNT '(' '*' ')'
where_clause     ::=  relation ( AND relation )*
relation         ::=  column_name operator term
                      '(' column_name ( ',' column_name )* ')' operator tuple_literal
                      TOKEN '(' column_name ( ',' column_name )* ')' operator term
operator         ::=  '=' | ' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY
group_by_clause  ::=  column_name ( ',' column_name )*
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
SELECT name, occupation FROM users WHERE userid IN (199, 200, 207);
SELECT JSON name, occupation FROM users WHERE userid = 199;
SELECT name AS user_name, occupation AS user_occupation FROM users;

SELECT time, value
FROM events
WHERE event_type = 'myEvent'
  AND time > '2011-02-03'
  AND time <= '2012-01-01'

SELECT COUNT (*) AS user_count FROM users;

インサート挿入
insert_statement ::=  INSERT INTO table_name ( names_values | json_clause )
                      [ IF NOT EXISTS ]
                      [ USING update_parameter ( AND update_parameter )* ]
names_values     ::=  names VALUES tuple_literal
json_clause      ::=  JSON string [ DEFAULT ( NULL | UNSET ) ]
names            ::=  '(' column_name ( ',' column_name )* ')'
INSERT INTO NerdMovies (movie, director, main_actor, year)
                VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005)
      USING TTL 86400;

INSERT INTO NerdMovies JSON '{"movie": "Serenity",
                              "director": "Joss Whedon",
                              "year": 2005}';

更新
update_statement ::=  UPDATE table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      SET assignment ( ',' assignment )*
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]
update_parameter ::=  ( TIMESTAMP | TTL ) ( integer | bind_marker )
assignment       ::=  simple_selection '=' term
                     | column_name '=' column_name ( '+' | '-' ) term
                     | column_name '=' list_literal '+' column_name
simple_selection ::=  column_name
                     | column_name '[' term ']'
                     | column_name '.' `field_name
condition        ::=  simple_selection operator term
UPDATE NerdMovies USING TTL 400
   SET director   = 'Joss Whedon',
       main_actor = 'Nathan Fillion',
       year       = 2005
 WHERE movie = 'Serenity';

UPDATE UserActions
   SET total = total + 2
   WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14
     AND action = 'click';

削除
delete_statement ::=  DELETE [ simple_selection ( ',' simple_selection ) ]
                      FROM table_name
                      [ USING update_parameter ( AND update_parameter )* ]
                      WHERE where_clause
                      [ IF ( EXISTS | condition ( AND condition )*) ]
DELETE FROM NerdMovies USING TIMESTAMP 1240003134
 WHERE movie = 'Serenity';

DELETE phone FROM Users
 WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14);

更新と削除は、whereキーの後ろにプライマリ・キーフィールドを携帯する必要があることを意味するプライマリ・キーでのみサポートされます.
マテリアライズドビュー(Materialized View)
インストール
Datastaxコミュニティ版
Datastaxコミュニティの無料バージョンを使用する場合は、アドレスをダウンロードします.https://academy.datastax.com/planet-cassandra//cassandra/ああ、windows 3.0.9バージョンをダウンロードしました.
コンフィギュレーション
cassandraがインストールされると、プロファイルはインストールディレクトリのconfディレクトリの下に置かれます.たとえば、私のマシンのF:\Program Files\DataStax Community\apache-cassandra\conf、プロファイル名はcassandra.yamlで、主に以下の2つの部分に注目しています.-Main runtime properties(主なcassandraランタイム属性)a)cluster_name:クラスタ名、同じクラスタの複数のノード、クラスタ名を一致させるb)seeds:シードノード、クラスタ内のすべてのマシンのip、c)storage_をカンマで区切るport:Cassandraサーバとサーバとの間に接続されているポート番号は、一般的に変更する必要はありませんが、このポートにファイアウォールd)listen_がないことを保証します.address:Cassandraクラスタ内のサーバとサーバとの間で通信するアドレス.空のままにすると、デフォルトでサーバを使用するマシン名e)native_transport_port:デフォルトのCQLローカルサービスポート、ローカルのcqlクライアントがサーバと対話するポート-Changing the location of directories(関連ファイルディレクトリ)a)data_file_Directories:データファイルが格納されているディレクトリ、1つ以上のb)commitlog_Directory:情報をコミットするログファイル格納ディレクトリc)saved_caches_Directory:キャッシュされたディレクトリ
apache
ダウンロードアドレスhttp://cassandra.apache.org/download/