Cassandra-quick-guide
Cassandra-はじめに
Apache Cassandraは、多くのコモディティサーバーで大量のデータを処理するように設計された、非常にスケーラブルで高性能な分散データベースであり、単一障害点のない高可用性を提供します。 これは、NoSQLデータベースの一種です。 まず、NoSQLデータベースの機能を理解しましょう。
NoSQLDatabase
NoSQLデータベース(Not Only SQLと呼ばれることもあります)は、リレーショナルデータベースで使用される表形式の関係以外のデータを格納および取得するメカニズムを提供するデータベースです。 これらのデータベースはスキーマフリーで、簡単なレプリケーションをサポートし、シンプルなAPIを持ち、最終的に一貫性があり、大量のデータを処理できます。
NoSQLデータベースの主な目的は
- 設計のシンプルさ、
- 水平スケーリング、および
- 可用性をより細かく制御します。
NoSqlデータベースは、リレーショナルデータベースとは異なるデータ構造を使用します。 NoSQLの一部の操作を高速化します。 特定のNoSQLデータベースの適合性は、解決しなければならない問題によって異なります。
NoSQLと リレーショナルデータベース
次の表に、リレーショナルデータベースとNoSQLデータベースを区別するポイントを示します。
Relational Database | NoSql Database |
---|---|
Supports powerful query language. | Supports very simple query language. |
It has a fixed schema. | No fixed schema. |
Follows ACID (Atomicity, Consistency, Isolation, and Durability). | It is only “eventually consistent”. |
Supports transactions. | Does not support transactions. |
Cassandraのほかに、非常に人気のある次のNoSQLデータベースがあります-
- Apache HBase -HBaseは、GoogleのBigTableをモデルにしたJavaで記述されたオープンソースの非リレーショナル分散データベースです。 Apache Hadoopプロジェクトの一部として開発され、HDFS上で実行され、HadoopにBigTableのような機能を提供します。
- MongoDB -MongoDBはクロスプラットフォームのドキュメント指向データベースシステムであり、従来のテーブルベースのリレーショナルデータベース構造を使用することを避け、動的スキーマを持つJSONのようなドキュメントを優先して、特定のタイプのアプリケーションでのデータの統合をより簡単かつ高速にします。
Apache Cassandraとは何ですか?
Apache Cassandraは、世界中に分散している大量の構造化データを管理するための、オープンソースの分散および分散/分散ストレージシステム(データベース)です。 単一障害点のない高可用性サービスを提供します。
以下は、Apache Cassandraの注目すべき点の一部です-
- スケーラブルで、フォールトトレラントで、一貫性があります。
- これは、列指向のデータベースです。
- その配信設計は、AmazonのDynamoとGoogleのBigtableのデータモデルに基づいています。
- Facebookで作成され、リレーショナルデータベース管理システムとは大きく異なります。
- Cassandraは、単一障害点のないDynamoスタイルのレプリケーションモデルを実装しますが、より強力な「カラムファミリ」データモデルを追加します。
- Cassandraは、Facebook、Twitter、Cisco、Rackspace、ebay、Twitter、Netflixなどの大企業で使用されています。
Cassandraの機能
Cassandraは、その優れた技術的特徴のために非常に人気があります。 Cassandraの機能の一部を以下に示します。
- 弾性のスケーラビリティ-Cassandraは非常にスケーラブルです。より多くの顧客とより多くのデータに対応するためにハードウェアを追加することができます 要求。
- 常にアーキテクチャ-Cassandraには単一障害点がなく、障害を許容できないビジネスクリティカルなアプリケーションで継続的に利用できます。
- 高速線形スケールパフォーマンス-Cassandraは線形にスケーラブルです。つまり、クラスター内のノード数を増やすとスループットが向上します。 したがって、迅速な応答時間を維持します。
- 柔軟なデータストレージ-Cassandraは、構造化、半構造化、非構造化など、可能なすべてのデータ形式に対応しています。 必要に応じて、データ構造の変更に動的に対応できます。
- 簡単なデータ配布-Cassandraは、複数のデータセンターにデータを複製することにより、必要な場所にデータを柔軟に配布できます。
- トランザクションサポート-Cassandraは、原子性、一貫性、分離、および耐久性(ACID)などのプロパティをサポートします。
- 高速書き込み-Cassandraは、安価な汎用ハードウェアで実行するように設計されています。 非常に高速な書き込みを実行し、読み取り効率を犠牲にすることなく、数百テラバイトのデータを保存できます。
カサンドラの歴史
- Cassandraは、受信トレイ検索用にFacebookで開発されました。
- 2008年7月にFacebookによってオープンソース化されました。
- Cassandraは2009年3月にApache Incubatorに承認されました。
- 2010年2月からApacheトップレベルプロジェクトになりました。
Cassandra-アーキテクチャ
Cassandraの設計目標は、単一障害点なしで複数のノードにわたるビッグデータのワークロードを処理することです。 Cassandraには、ノード間でピアツーピア分散システムがあり、データはクラスター内のすべてのノードに分散されます。
- クラスター内のすべてのノードは同じ役割を果たします。 各ノードは独立しており、同時に他のノードに相互接続されています。
- クラスター内の各ノードは、データがクラスター内の実際の場所に関係なく、読み取りおよび書き込み要求を受け入れることができます。
- ノードがダウンすると、ネットワーク内の他のノードから読み取り/書き込み要求を処理できます。
Cassandraでのデータ複製
Cassandraでは、クラスター内の1つ以上のノードが特定のデータのレプリカとして機能します。 一部のノードが古い値で応答したことが検出された場合、Cassandraはクライアントに最新の値を返します。 最新の値を返した後、Cassandraはバックグラウンドで read repair を実行し、古い値を更新します。
次の図は、Cassandraがクラスター内のノード間でデータ複製を使用して、単一障害点がないことを確認する方法の概略図を示しています。
注意-Cassandraは、バックグラウンドで Gossip Protocol を使用して、ノードが相互に通信し、クラスター内の障害のあるノードを検出できるようにします。
Cassandraのコンポーネント
Cassandraの主要なコンポーネントは次のとおりです-
- ノード-データが保存される場所です。
- データセンター-関連ノードのコレクションです。
- クラスター-クラスターは、1つ以上のデータセンターを含むコンポーネントです。
- コミットログ-コミットログはCassandraのクラッシュリカバリメカニズムです。 書き込み操作はすべてコミットログに書き込まれます。
- Mem-table -mem-tableはメモリ常駐データ構造です。 コミットログの後、データはmem-tableに書き込まれます。 単一列のファミリの場合、複数のmem-tableが存在する場合があります。
- SSTable -内容がしきい値に達すると、データがmem-tableからフラッシュされるディスクファイルです。
- ブルームフィルター-これらは、要素がセットのメンバーであるかどうかをテストするための、迅速で非決定的なアルゴリズムにすぎません。 これは特別な種類のキャッシュです。 ブルームフィルターは、クエリごとにアクセスされます。
Cassandraクエリ言語
ユーザーは、Cassandra Query Language(CQL)を使用して、ノードを介してCassandraにアクセスできます。 CQLは、データベース*(Keyspace)をテーブルのコンテナとして扱います。 プログラマは、 cqlsh:*プロンプトを使用して、CQLまたは個別のアプリケーション言語ドライバーを操作します。
クライアントは、読み取り/書き込み操作のためにいずれかのノードにアプローチします。 そのノード(コーディネーター)は、クライアントとデータを保持するノードの間でプロキシを再生します。
書き込み操作
ノードのすべての書き込みアクティビティは、ノードに書き込まれた*コミットログ*によってキャプチャされます。 その後、データはキャプチャされ、 mem-table に保存されます。mem-tableがいっぱいになると、データは SStable データファイルに書き込まれます。 すべての書き込みは自動的に分割され、クラスター全体に複製されます。 Cassandraは定期的にSSTableを統合し、不要なデータを破棄します。
読み取り操作
読み取り操作中、Cassandraはmem-tableから値を取得し、ブルームフィルターをチェックして、必要なデータを保持する適切なSSTableを見つけます。
Cassandra-データモデル
Cassandraのデータモデルは、RDBMSで通常見られるものとは大きく異なります。 この章では、Cassandraがデータを保存する方法の概要を示します。
クラスタ
Cassandraデータベースは、一緒に動作する複数のマシンに分散されています。 最も外側のコンテナは、クラスタとして知られています。 障害処理のために、すべてのノードにレプリカが含まれており、障害が発生した場合はレプリカが担当します。 Cassandraは、クラスター内のノードをリング形式で配置し、データを割り当てます。
キースペース
キースペースは、Cassandraのデータの最も外側のコンテナーです。 Cassandraのキースペースの基本的な属性は次のとおりです-
- 複製係数-同じデータのコピーを受信するクラスター内のマシンの数です。
- レプリカ配置戦略-リングにレプリカを配置する戦略に他なりません。 単純な戦略(ラック対応戦略)、古いネットワークトポロジ戦略(ラック対応戦略)、ネットワークトポロジ戦略(データセンター共有戦略)などの戦略があります。
- 列ファミリ-キースペースは、1つ以上の列ファミリのリストのコンテナです。 列ファミリは、行のコレクションのコンテナです。 各行には順序付けられた列が含まれます。 列ファミリは、データの構造を表します。 各キースペースには、少なくとも1つ、多くの場合、多くの列ファミリがあります。
キースペースを作成する構文は次のとおりです-
次の図は、キースペースの概略図を示しています。
列ファミリー
列ファミリは、順序付けされた行のコレクションのコンテナです。 各行は、順番に列の順序付けられたコレクションです。 次の表は、列ファミリをリレーショナルデータベースのテーブルと区別するポイントを示しています。
Relational Table | Cassandra column Family |
---|---|
A schema in a relational model is fixed. Once we define certain columns for a table, while inserting data, in every row all the columns must be filled at least with a null value. | In Cassandra, although the column families are defined, the columns are not. You can freely add any column to any column family at any time. |
Relational tables define only columns and the user fills in the table with values. | In Cassandra, a table contains columns, or can be defined as a super column family. |
Cassandra列ファミリーには、次の属性があります-
- keys_cached -SSTableごとにキャッシュを保持する場所の数を表します。
- rows_cached -コンテンツ全体がメモリにキャッシュされる行の数を表します。
- preload_row_cache -行キャッシュに事前入力するかどうかを指定します。
- 注意-*列ファミリのスキーマが固定されていないリレーショナルテーブルとは異なり、Cassandraは個々の行にすべての列を強制しません。
次の図は、Cassandra列ファミリーの例を示しています。
カラム
列は、キーまたは列の名前、値、タイムスタンプの3つの値を持つCassandraの基本的なデータ構造です。 以下に列の構造を示します。
スーパーコラム
スーパー列は特別な列であるため、キーと値のペアでもあります。 ただし、スーパー列にはサブ列のマップが格納されます。
通常、列ファミリはディスク上の個々のファイルに保存されます。 そのため、パフォーマンスを最適化するには、同じ列ファミリで一緒にクエリを実行する可能性のある列を保持することが重要であり、ここではスーパー列が役立ちます。スーパー列の構造を次に示します。
CassandraおよびRDBMSのデータモデル
次の表に、CassandraのデータモデルとRDBMSのデータモデルを区別するポイントを示します。
RDBMS | Cassandra |
---|---|
RDBMS deals with structured data. | Cassandra deals with unstructured data. |
It has a fixed schema. | Cassandra has a flexible schema. |
In RDBMS, a table is an array of arrays. (ROW x COLUMN) | In Cassandra, a table is a list of “nested key-value pairs”. (ROW x COLUMN key x COLUMN value) |
Database is the outermost container that contains data corresponding to an application. | Keyspace is the outermost container that contains data corresponding to an application. |
Tables are the entities of a database. | Tables or column families are the entity of a keyspace. |
Row is an individual record in RDBMS. | Row is a unit of replication in Cassandra. |
Column represents the attributes of a relation. | Column is a unit of storage in Cassandra. |
RDBMS supports the concepts of foreign keys, joins. | Relationships are represented using collections. |
Cassandra-インストール
Cassandraは、cqlshとさまざまな言語のドライバーを使用してアクセスできます。 この章では、Cassandraで動作するようにcqlshとjava環境の両方を設定する方法について説明します。
インストール前のセットアップ
Linux環境にCassandraをインストールする前に、 ssh (Secure Shell)を使用してLinuxをセットアップする必要があります。 Linux環境をセットアップするには、以下の手順に従ってください。
ユーザーを作成する
最初は、Hadoopの別のユーザーを作成して、HadoopファイルシステムをUnixファイルシステムから分離することをお勧めします。 以下の手順に従ってユーザーを作成します。
Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。
SSHセットアップとキー生成
SSHのセットアップは、デーモンシェル操作の開始、停止、分散など、クラスターでさまざまな操作を実行するために必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。
次のコマンドは、SSHを使用してキーと値のペアを生成するために使用されます-
- id_rsa.pubの公開鍵をauthorized_keysにコピーし、
- 所有者を提供し、
- それぞれauthorized_keysファイルの読み取りおよび書き込み権限。
- sshを確認します。
Javaのインストール
JavaはCassandraの主要な前提条件です。 まず第一に、次のコマンドを使用してシステム内のJavaの存在を確認する必要があります-
すべてが正常に機能する場合、次の出力が得られます。
システムにJavaがない場合は、Javaをインストールするための以下の手順に従ってください。
ステップ1
次のhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-%0A1880260l[link:]からjava(JDK <最新バージョン>-X64.tar.gz)をダウンロードします
その後、jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
ステップ3
Javaをすべてのユーザーが使用できるようにするには、Javaをロケーション「/usr/local/」に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップ4
すべての変更を現在実行中のシステムに適用します。
ステップ5
次のコマンドを使用して、Javaの代替を構成します。
上記で説明したように、ターミナルから java -version コマンドを使用します。
パスを設定する
以下に示すように、Cassandraパスのパスを「/.bashrc」に設定します。
ダウンロードCassandra
Apache Cassandraは、http://cassandra.apache.org/download/で入手できます。[ダウンロードリンク] Cassandraは、次のコマンドを使用して入手できます。
以下に示すように、コマンド zxvf を使用してCassandraを解凍します。
以下に示すように、cassandraという名前の新しいディレクトリを作成し、ダウンロードしたファイルの内容をそこに移動します。
Cassandraを構成する
- cassandra.yaml:ファイルを開きます。このファイルは、Cassandraの *bin ディレクトリにあります。
注意-debまたはrpmパッケージからCassandraをインストールした場合、設定ファイルはCassandraの /etc/cassandra ディレクトリにあります。
上記のコマンドは cassandra.yaml ファイルを開きます。 次の構成を確認します。 デフォルトでは、これらの値は指定されたディレクトリに設定されます。
以下に示すように、これらのディレクトリが存在し、書き込み可能であることを確認してください。
ディレクトリを作成する
スーパーユーザーとして、Cassandraがデータを書き込む /var/lib/cassandra および /var。/log/cassandra の2つのディレクトリを作成します。
フォルダーにアクセス許可を与える
以下に示すように、新しく作成されたフォルダーに読み取り/書き込み権限を付与します。
Cassandraを起動します
Cassandraを起動するには、ターミナルウィンドウを開き、Cassandraを解凍したCassandraのホームディレクトリ/ホームに移動し、次のコマンドを実行してCassandraサーバーを起動します。
–fオプションを使用すると、Cassandraはバックグラウンドプロセスとして実行するのではなく、フォアグラウンドにとどまります。 すべてがうまくいけば、Cassandraサーバーが起動していることがわかります。
プログラミング環境
プログラムでCassandraを設定するには、次のjarファイルをダウンロードします-
- slf4j-api-1.7.5.jar
- cassandra-driver-core-2.0.2.jar
- guava-16.0.1.jar
- metrics-core-3.0.2.jar
- netty-3.9.0.Final.jar
それらを別のフォルダーに配置します。 たとえば、これらのjarを*“ Cassandra_jars” *という名前のフォルダーにダウンロードしています。
以下に示すように、このフォルダーのクラスパスを“。bashrc”ファイルに設定します。
Eclipse環境
Eclipseを開き、Cassandra _Examplesという新しいプロジェクトを作成します。
プロジェクトを右クリックして、以下に示すように[*ビルドパス]→[ビルドパスの構成]を選択します。
プロパティウィンドウが開きます。 [ライブラリ]タブで、[外部JARを追加]を選択します。 jarファイルを保存したディレクトリに移動します。 5つのjarファイルをすべて選択し、以下に示すように[OK]をクリックします。
参照ライブラリでは、以下に示すように追加されたすべての必要なjarを見ることができます-
Mavenの依存関係
以下は、mavenを使用してCassandraプロジェクトを構築するためのpom.xmlです。
Cassandra-参照API
この章では、Cassandraのすべての重要なクラスについて説明します。
クラスタ
このクラスは、ドライバーのメインエントリポイントです。 com.datastax.driver.core パッケージに属します。
方法
S. No. | Methods and Description |
---|---|
*1 *a |
現在のクラスターに新しいセッションを作成し、初期化します。 |
*2 *a |
クラスタインスタンスを閉じるために使用されます。 |
*3 *a |
新しいCluster.Builderインスタンスを作成するために使用されます。 |
Cluster.Builder
このクラスは、 Cluster.Builder クラスをインスタンス化するために使用されます。
方法
S. No | Methods and Description |
---|---|
*1 *a |
このメソッドは、クラスターに接点を追加します。 |
*2 *a |
このメソッドは、指定された接点でクラスターを構築します。 |
セッション
このインターフェースは、Cassandraクラスターへの接続を保持します。 このインターフェイスを使用して、 CQL クエリを実行できます。 com.datastax.driver.core パッケージに属します。
方法
S. No. | Methods and Description |
---|---|
*1 *a |
このメソッドは、現在のセッションインスタンスを閉じるために使用されます。 |
*2 *a |
このメソッドは、クエリを実行するために使用されます。 ステートメントオブジェクトが必要です。 |
*3 *a |
このメソッドは、クエリを実行するために使用されます。 Stringオブジェクトの形式のクエリが必要です。 |
*4 *a |
このメソッドは、提供されたクエリを準備します。 クエリは、ステートメントの形式で提供されます。 |
5*** *a |
このメソッドは、提供されたクエリを準備します。 クエリは文字列の形式で提供されます。 |
カサンドラ-Cqlsh
この章では、Cassandraクエリ言語シェルを紹介し、そのコマンドの使用方法について説明します。
デフォルトでは、Cassandraはユーザーが通信できるプロンプトCassandraクエリ言語シェル*(cqlsh)を提供します。 このシェルを使用して、 Cassandra Query Language(CQL)*を実行できます。
cqlshを使用すると、次のことができます。
- スキーマを定義し、
- データを挿入し、
- クエリを実行します。
cqlshの開始
以下に示すように、コマンド cqlsh を使用してcqlshを起動します。 Cassandra cqlshプロンプトを出力として提供します。
Options | Usage |
---|---|
cqlsh --help | Shows help topics about the options of *cqlsh *commands. |
cqlsh --version | Provides the version of the cqlsh you are using. |
cqlsh --color | Directs the shell to use colored output. |
cqlsh --debug | Shows additional debugging information. |
cqlsh --execute cql_statement |
Directs the shell to accept and execute a CQL command. |
cqlsh --file=* “file name” * | If you use this option, Cassandra executes the command in the given file and exits. |
cqlsh --no-color | Directs Cassandra not to use colored output. |
cqlsh -u* “user name” * | Using this option, you can authenticate a user. The default user name is: cassandra. |
cqlsh-p* “pass word”* | Using this option, you can authenticate a user with a password. The default password is: cassandra. |
Cqlshコマンド
Cqlshには、ユーザーが操作できるコマンドがいくつかあります。 コマンドを以下にリストします。
文書化されたシェルコマンド
以下は、Cqlshで文書化されたシェルコマンドです。 これらは、ヘルプトピックの表示、cqlshの終了、describeなどのタスクを実行するために使用されるコマンドです。
- HELP -すべてのcqlshコマンドのヘルプトピックを表示します。
- CAPTURE -コマンドの出力をキャプチャし、ファイルに追加します。
- CONSISTENCY -現在の一貫性レベルを表示するか、新しい一貫性レベルを設定します。
- COPY -Cassandraとの間でデータをコピーします。
- DESCRIBE -Cassandraとそのオブジェクトの現在のクラスターについて説明します。
- EXPAND -クエリの出力を垂直方向に拡張します。
- EXIT -このコマンドを使用すると、cqlshを終了できます。
- PAGING -クエリページングを有効または無効にします。
- SHOW -Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。
- SOURCE -CQLステートメントを含むファイルを実行します。
- TRACING -要求のトレースを有効または無効にします。
CQLデータ定義コマンド
- キースペースの作成-Cassandraでキースペースを作成します。
- USE -作成されたキースペースに接続します。
- ALTER KEYSPACE -キースペースのプロパティを変更します。
- DROP KEYSPACE -キースペースを削除します
- CREATE TABLE -KeySpaceにテーブルを作成します。
- ALTER TABLE -テーブルの列プロパティを変更します。
- DROP TABLE -テーブルを削除します。
- TRUNCATE -テーブルからすべてのデータを削除します。
- CREATE INDEX -テーブルの単一の列に新しいインデックスを定義します。
- DROP INDEX -名前付きインデックスを削除します。
CQLデータ操作コマンド
- INSERT -テーブルの行に列を追加します。
- UPDATE -行の列を更新します。
- DELETE -テーブルからデータを削除します。
- BATCH -複数のDMLステートメントを一度に実行します。
CQL句
- SELECT -この句はテーブルからデータを読み取ります
- WHERE -特定のデータを読み取るために、where句をselectとともに使用します。
- ORDERBY -orderby節は、特定の順序で特定のデータを読み取るためにselectとともに使用されます。
Cassandra-シェルコマンド
Cassandraは、CQLコマンドに加えて、文書化されたシェルコマンドを提供します。 以下に、Cassandraが文書化したシェルコマンドを示します。
Help
HELPコマンドは、すべてのcqlshコマンドの概要と簡単な説明を表示します。 以下にhelpコマンドの使用法を示します。
キャプチャー
このコマンドは、コマンドの出力をキャプチャし、ファイルに追加します。 たとえば、 Outputfile という名前のファイルへの出力をキャプチャする次のコードを見てください。
ターミナルでコマンドを入力すると、指定されたファイルに出力がキャプチャされます。 以下に、使用されるコマンドと出力ファイルのスナップショットを示します。
次のコマンドを使用して、キャプチャをオフにできます。
一貫性
このコマンドは、現在の一貫性レベルを表示するか、新しい一貫性レベルを設定します。
Copy
このコマンドは、Cassandraとの間でデータをファイルにコピーします。 以下に、 emp という名前のテーブルをファイル myfile にコピーする例を示します。
指定されたファイルを開いて確認すると、以下に示すようにコピーされたデータを見つけることができます。
説明する
このコマンドは、Cassandraとそのオブジェクトの現在のクラスターを記述します。 このコマンドのバリエーションを以下に説明します。
クラスタの説明-このコマンドは、クラスタに関する情報を提供します。
キースペースの説明-このコマンドは、クラスター内のすべてのキースペースを一覧表示します。 以下に、このコマンドの使用法を示します。
テーブルの説明-このコマンドは、キースペース内のすべてのテーブルを一覧表示します。 以下に、このコマンドの使用法を示します。
タイプの説明
このコマンドは、ユーザー定義のデータ型を記述するために使用されます。 以下に、このコマンドの使用法を示します。
タイプの説明
このコマンドは、すべてのユーザー定義データ型をリストします。 以下に、このコマンドの使用法を示します。 card と card_details の2つのユーザー定義データ型があると仮定します。
展開する
このコマンドは、出力を展開するために使用されます。 このコマンドを使用する前に、expandコマンドをオンにする必要があります。 以下に、このコマンドの使用法を示します。
注-次のコマンドを使用して、展開オプションをオフにできます。
Exit
このコマンドは、cqlシェルを終了するために使用されます。
Show
このコマンドは、Cassandraのバージョン、ホスト、データ型の仮定など、現在のcqlshセッションの詳細を表示します。 以下に、このコマンドの使用法を示します。
ソース
このコマンドを使用すると、ファイル内のコマンドを実行できます。 入力ファイルは次のようになっていると仮定します-
次に、以下に示すようにコマンドを含むファイルを実行できます。
Cassandra-キースペースの作成
Cqlshを使用してキースペースを作成する
Cassandraのキースペースは、ノード上のデータ複製を定義する名前空間です。 クラスターには、ノードごとに1つのキースペースが含まれます。 以下に、 CREATE KEYSPACE ステートメントを使用してキースペースを作成するための構文を示します。
構文
i.e.
CREATE KEYSPACEステートメントには、 replication と durable_writes の2つのプロパティがあります。
複製
レプリケーションオプションは、*レプリカ配置戦略*と必要なレプリカの数を指定することです。 次の表に、すべてのレプリカ配置戦略を示します。
Strategy name | Description |
---|---|
Simple Strategy' | Specifies a simple replication factor for the cluster. |
Network Topology Strategy | Using this option, you can set the replication factor for each data-center independently. |
Old Network Topology Strategy | This is a legacy replication strategy. |
このオプションを使用すると、現在のKeySpaceの更新に commitlog を使用するかどうかをCassandraに指示できます。 このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下は、KeySpaceの作成例です。
- ここでは、 finddevguides という名前のKeySpaceを作成しています。
- 最初のレプリカ配置戦略、つまり Simple Strategy を使用しています。
- そして、複製係数を* 1レプリカ*に選択しています。
検証
コマンド Describe を使用して、テーブルが作成されているかどうかを確認できます。 このコマンドをキースペースに対して使用すると、以下に示すように作成されたすべてのキースペースが表示されます。
ここで、新しく作成されたKeySpace finddevguides を確認できます。
Durable_writes
デフォルトでは、テーブルのpersistent_writesプロパティは true に設定されますが、falseに設定することもできます。 このプロパティを* simplex strategy。*に設定することはできません。
例
以下は、永続的な書き込みプロパティの使用方法を示す例です。
検証
System Keyspaceを照会することにより、テストKeySpaceのpersistent_writesプロパティがfalseに設定されているかどうかを確認できます。 このクエリは、すべてのキースペースとそのプロパティを提供します。
ここで、KeySpaceがfalseに設定されているテストのpersistent_writesプロパティを確認できます。
キースペースを使用する
キーワード USE を使用して、作成されたKeySpaceを使用できます。 その構文は次のとおりです-
例
次の例では、KeySpace * finddevguides。*を使用しています。
Java APIを使用してキースペースを作成する
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードでクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、 Cluster クラスの* connect()メソッドを使用して、 *Session オブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
ステップ3:クエリを実行する
この例では、* tp。*という名前のKeySpaceを作成しています。最初のレプリカ配置戦略、つまりSimple Strategyを使用しており、1つのレプリカに対する複製係数を選択しています。
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
ステップ4:キースペースを使用する
以下に示すように、execute()メソッドを使用して、作成されたKeySpaceを使用できます。
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力が生成されます-
Cassandra-キースペースの変更
キースペースの変更
ALTER KEYSPACEを使用して、レプリカの数やKeySpaceのpermanent_writesなどのプロパティを変更できます。 以下に、このコマンドの構文を示します。
構文
i.e.
複製
複製オプションは、レプリカ配置戦略と必要なレプリカの数を指定します。
Durable_writes
このオプションを使用すると、現在のKeySpaceの更新にcommitlogを使用するかどうかをCassandraに指示できます。 このオプションは必須ではなく、デフォルトではtrueに設定されています。
例
以下は、KeySpaceを変更する例です。
- ここでは、 finddevguides という名前のKeySpaceを変更しています。
- 複製係数を1から3に変更しています。
Durable_writesの変更
KeySpaceのpermanent_writesプロパティを変更することもできます。 以下に示すのは、 test KeySpaceのpermanent_writesプロパティです。
ここでも、KeySpacesのプロパティを確認すると、次の出力が生成されます。
Java APIを使用してキースペースを変更する
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、* Cluster クラスの connect()メソッドを使用して、 *Session オブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、または Statement クラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、
- tp という名前のキースペースを変更しています。 レプリケーションオプションを単純戦略からネットワークトポロジ戦略に変更しています。
- durable_writes をfalseに変更しています
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力が生成されます-
Cassandra-キースペースをドロップ
キースペースの削除
コマンド DROP KEYSPACE を使用してキースペースをドロップできます。 以下は、KeySpaceをドロップするための構文です。
構文
i.e.
例
次のコードは、キースペース finddevguides を削除します。
検証
コマンド Describe を使用してキースペースを確認し、以下に示すようにテーブルが削除されているかどうかを確認します。
キースペースfinddevguidesを削除したため、キースペースリストに表示されません。
Java APIを使用してキースペースを削除する
Sessionクラスのexecute()メソッドを使用してキースペースを作成できます。 Java APIを使用してキースペースを削除するには、以下の手順に従ってください。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 文字列形式でこのメソッドに渡すものはすべて、cqlshで実行されます。
次の例では、 tp という名前のキースペースを削除しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-テーブルの作成
テーブルを作成する
コマンド CREATE TABLE を使用してテーブルを作成できます。 以下に、テーブルを作成するための構文を示します。
構文
列の定義
以下に示すように列を定義できます。
主キー
主キーは、行を一意に識別するために使用される列です。 したがって、テーブルの作成中は主キーの定義が必須です。 主キーは、テーブルの1つ以上の列で構成されます。 以下に示すように、テーブルの主キーを定義できます。
or
例
以下は、cqlshを使用してCassandraでテーブルを作成する例です。 ここにいる-
- キースペースfinddevguidesの使用
- emp という名前のテーブルを作成する
従業員の名前、ID、市、給与、電話番号などの詳細が含まれます。 従業員IDは主キーです。
検証
selectステートメントは、スキーマを提供します。 次に示すように、selectステートメントを使用してテーブルを確認します。
ここで、指定された列で作成されたテーブルを観察できます。 キースペースfinddevguidesを削除したため、キースペースリストに表示されません。
Java APIを使用したテーブルの作成
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。 以下の手順に従って、Java APIを使用してテーブルを作成します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、 Cluster クラスの* connect()*メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、以下に示すように、キースペース名を文字列形式でこのメソッドに渡すことにより、既存のキースペースに設定できます。
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 文字列形式でこのメソッドに渡すものはすべて、cqlshで実行されます。
次の例では、* emp。*という名前のテーブルを作成しています。以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraでキースペースを作成および使用するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-変更テーブル
テーブルの変更
コマンド ALTER TABLE を使用して、テーブルを変更できます。 以下に、テーブルを作成するための構文を示します。
構文
ALTERコマンドを使用して、次の操作を実行できます-
- 列を追加する
- 列をドロップする
列を追加する
ALTERコマンドを使用して、テーブルに列を追加できます。 列を追加する際、列名が既存の列名と競合しないようにし、コンパクトストレージオプションでテーブルが定義されないように注意する必要があります。 以下は、テーブルに列を追加する構文です。
例
以下は、既存のテーブルに列を追加する例です。 ここでは、テキストデータ型の emp_email という列を emp という名前のテーブルに追加しています。
- 検証 *
SELECTステートメントを使用して、列が追加されているかどうかを確認します。 ここで、新しく追加された列emp_emailを確認できます。
列のドロップ
ALTERコマンドを使用して、テーブルから列を削除できます。 テーブルから列を削除する前に、テーブルがコンパクトストレージオプションで定義されていないことを確認してください。 以下に、ALTERコマンドを使用してテーブルから列を削除する構文を示します。
例
以下は、テーブルから列を削除する例です。 ここでは、 emp_email という名前の列を削除しています。
検証
以下に示すように、 select ステートメントを使用して、列が削除されているかどうかを確認します。
Java APIを使用してテーブルを変更する
Sessionクラスのexecute()メソッドを使用してテーブルを作成できます。 以下の手順に従って、Java APIを使用してテーブルを変更します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、tpという名前のKeySpaceを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、* emp。*という名前のテーブルに列を追加しています。これを行うには、以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、既存のテーブルに列を追加するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
列を削除する
以下は、既存のテーブルから列を削除する完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-ドロップテーブル
テーブルを削除する
コマンド Drop Table を使用して、テーブルをドロップできます。 その構文は次のとおりです-
構文
例
次のコードは、KeySpaceから既存のテーブルを削除します。
検証
Describeコマンドを使用して、テーブルが削除されているかどうかを確認します。 empテーブルは削除されているため、列ファミリリストにはありません。
Java APIを使用したテーブルの削除
Sessionクラスのexecute()メソッドを使用して、テーブルを削除できます。 以下の手順に従って、Java APIを使用してテーブルを削除します。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します-
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp という名前のテーブルを削除しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraにテーブルをドロップする完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-テーブルの切り捨て
テーブルの切り捨て
TRUNCATEコマンドを使用して、テーブルを切り捨てることができます。 テーブルを切り捨てると、テーブルのすべての行が完全に削除されます。 以下に、このコマンドの構文を示します。
構文
例
次のデータを持つ student というテーブルがあると仮定しましょう。
s_id | s_name | s_branch | s_aggregate |
---|---|---|---|
1 | ram | IT | 70 |
2 | rahman | EEE | 75 |
3 | robbin | Mech | 72 |
select文を実行してテーブル student を取得すると、次の出力が得られます。
ここで、TRUNCATEコマンドを使用してテーブルを切り捨てます。
検証
Java APIを使用したテーブルの切り捨て
Sessionクラスのexecute()メソッドを使用して、テーブルを切り捨てることができます。 以下の手順に従って、テーブルを切り捨てます。
ステップ1:クラスターオブジェクトを作成する
まず、以下に示すように com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトの作成
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、tpという名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp という名前のテーブルを切り捨てています。 以下に示すように、クエリを文字列変数に保存し、* execute()*メソッドに渡す必要があります。
Java APIを使用してCassandraのテーブルを切り捨てる完全なプログラムを以下に示します。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-バッチステートメント
バッチステートメントの使用
- BATCHを使用すると、複数の変更ステートメント(挿入、更新、削除)を同時に実行できます。 その構文は次のとおりです-
例
次のデータを持つempと呼ばれるCassandraのテーブルがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Delhi | 9848022339 | 50000 |
3 | rahman | Chennai | 9848022330 | 45000 |
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID 3の従業員の給与を50000に更新します。 *行ID 2の従業員の都市を削除します。
上記の操作を一度に実行するには、次のBATCHコマンドを使用します-
検証
変更後、SELECTステートメントを使用してテーブルを確認します。 それは次の出力を生成する必要があります-
ここでは、データが変更されたテーブルを観察できます。
Java APIを使用したバッチステートメント
Sessionクラスのexecute()メソッドを使用して、バッチステートメントをプログラムでテーブルに書き込むことができます。 Java APIの助けを借りて、バッチステートメントを使用して複数のステートメントを実行するには、以下の手順に従います。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスタオブジェクトを作成します-
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、次の操作を実行します-
- 次の詳細(4、rajeev、pune、9848022331、30000)を含む新しい行を挿入します。
- 行ID 3の従業員の給与を50000に更新します。
- 行ID 2の従業員の都市を削除します。
以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraのテーブルで複数のステートメントを同時に実行する完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-データの作成
テーブルにデータを作成する
コマンド INSERT を使用して、テーブルの行の列にデータを挿入できます。 以下に、テーブルにデータを作成するための構文を示します。
例
列(emp_id、emp_name、emp_city、emp_phone、emp_sal)を持つ emp というテーブルがあり、 emp テーブルに次のデータを挿入する必要があると仮定します。
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
以下のコマンドを使用して、テーブルに必要なデータを入力します。
検証
データを挿入した後、SELECTステートメントを使用して、データが挿入されたかどうかを確認します。 SELECTステートメントを使用してempテーブルを検証すると、次の出力が得られます。
ここで、挿入したデータがテーブルに取り込まれていることがわかります。
Java APIを使用したデータの作成
Sessionクラスのexecute()メソッドを使用して、テーブルにデータを作成できます。 以下の手順に従って、Java APIを使用してテーブルにデータを作成します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードは、クラスターオブジェクトを作成する方法を示しています。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、または Statement クラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、 emp というテーブルにデータを挿入しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してCassandraのテーブルにデータを挿入する完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-データの更新
テーブルのデータを更新する
- Where -この句は、更新する行を選択するために使用されます。
- 設定-このキーワードを使用して値を設定します。
- 必須-主キーを構成するすべての列が含まれます。
行の更新中に、特定の行が使用できない場合、UPDATEは新しい行を作成します。 以下にUPDATEコマンドの構文があります-
例
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
ロビンのemp_cityをデリーに、彼の給与を50000に更新しましょう。 以下に、必要な更新を実行するクエリを示します。
検証
SELECTステートメントを使用して、データが更新されたかどうかを確認します。 SELECTステートメントを使用してempテーブルを検証すると、次の出力が生成されます。
ここで、テーブルデータが更新されたことを確認できます。
Java APIを使用したデータの更新
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを更新できます。 以下の手順に従って、Java APIを使用してテーブル内のデータを更新します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp という名前のキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、empテーブルを更新しています。 以下に示すように、クエリを文字列変数に保存し、execute()メソッドに渡す必要があります。
以下は、Java APIを使用してテーブル内のデータを更新するための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-データの読み取り
Select句を使用したデータの読み取り
SELECT句は、Cassandraのテーブルからデータを読み取るために使用されます。 この句を使用すると、テーブル全体、単一の列、または特定のセルを読み取ることができます。 SELECT句の構文は次のとおりです。
例
次の詳細を持つ emp という名前のキースペースにテーブルがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | null | 9848022339 | 50000 |
3 | rahman | Chennai | 9848022330 | 50000 |
4 | rajeev | Pune | 9848022331 | 30000 |
次の例は、SELECT句を使用してテーブル全体を読み取る方法を示しています。 ここでは、 emp というテーブルを読み込んでいます。
必要な列の読み取り
次の例は、テーブル内の特定の列を読み取る方法を示しています。
Where句
WHERE句を使用して、必要な列に制約を設定できます。 その構文は次のとおりです-
注-WHERE句は、主キーの一部である列、またはそれらにセカンダリインデックスがある列でのみ使用できます。
次の例では、給与が50000の従業員の詳細を読み取ります。 まず、セカンダリインデックスを列emp_salに設定します。
Java APIを使用したデータの読み取り
Sessionクラスのexecute()メソッドを使用して、テーブルからデータを読み取ることができます。 Java APIの助けを借りて、バッチステートメントを使用して複数のステートメントを実行するには、以下の手順に従います。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用してCQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
この例では、 emp テーブルからデータを取得しています。 以下に示すように、クエリを文字列に保存し、セッションクラスのexecute()メソッドに渡します。
Sessionクラスのexecute()メソッドを使用してクエリを実行します。
ステップ4:ResultSetオブジェクトを取得する
選択クエリは結果を ResultSet オブジェクトの形式で返すため、以下に示すように結果を RESULTSET クラスのオブジェクトに保存します。
以下は、テーブルからデータを読み取るための完全なプログラムです。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-データの削除
テーブルからデータを削除する
コマンド DELETE を使用して、テーブルからデータを削除できます。 その構文は次のとおりです-
例
Cassandraに emp というテーブルがあり、次のデータがあると仮定します-
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Hyderabad | 9848022339 | 40000 |
3 | rahman | Chennai | 9848022330 | 45000 |
次のステートメントは、最後の行のemp_sal列を削除します-
検証
SELECTステートメントを使用して、データが削除されたかどうかを確認します。 SELECTを使用してempテーブルを検証すると、次の出力が生成されます-
ラーマンの給与を削除したため、給与の代わりにヌル値が表示されます。
行全体を削除する
次のコマンドは、テーブルから行全体を削除します。
検証
SELECTステートメントを使用して、データが削除されたかどうかを確認します。 SELECTを使用してempテーブルを検証すると、次の出力が生成されます-
最後の行を削除したため、テーブルには2行しか残っていません。
Java APIを使用したデータの削除
Sessionクラスのexecute()メソッドを使用して、テーブル内のデータを削除できます。 以下の手順に従って、Java APIを使用してテーブルからデータを削除します。
ステップ1:クラスターオブジェクトを作成する
以下に示すように、 com.datastax.driver.core パッケージの Cluster.builder クラスのインスタンスを作成します。
新しいビルダーオブジェクトを使用して、クラスターオブジェクトを作成します。 そのためには、 Cluster.Builder クラスに* build()*というメソッドがあります。 次のコードを使用して、クラスターオブジェクトを作成します。
以下に示すように、1行のコードを使用してクラスターオブジェクトを構築できます。
ステップ2:セッションオブジェクトを作成する
以下に示すように、Clusterクラスのconnect()メソッドを使用してSessionオブジェクトのインスタンスを作成します。
このメソッドは、新しいセッションを作成して初期化します。 キースペースがすでにある場合は、次に示すように、キースペース名を文字列形式でこのメソッドに渡すことで、既存のキースペースに設定できます。
ここでは、 tp というキースペースを使用しています。 したがって、次のようにセッションオブジェクトを作成します。
ステップ3:クエリを実行する
Sessionクラスのexecute()メソッドを使用して、CQLクエリを実行できます。 クエリを文字列形式で、またはStatementクラスオブジェクトとしてexecute()メソッドに渡します。 このメソッドに文字列形式で渡すものはすべて、 cqlsh で実行されます。
次の例では、* emp。という名前のテーブルからデータを削除しています。以下に示すように、クエリを文字列変数に保存し、 execute()*メソッドに渡す必要があります。
Java APIを使用してCassandraのテーブルからデータを削除する完全なプログラムを以下に示します。
クラス名の後に.javaを付けて上記のプログラムを保存し、保存されている場所を参照します。 以下に示すように、プログラムをコンパイルして実行します。
通常の状態では、次の出力を生成する必要があります-
Cassandra-CQLデータタイプ
CQLは、コレクション型を含む豊富な組み込みデータ型セットを提供します。 これらのデータ型に加えて、ユーザーは独自のカスタムデータ型を作成することもできます。 次の表に、CQLで使用可能な組み込みデータ型のリストを示します。
Data Type | Constants | Description |
---|---|---|
ascii | strings | Represents ASCII character string |
bigint | bigint | Represents 64-bit signed long |
blob | blobs | Represents arbitrary bytes |
Boolean | booleans | Represents true or false |
counter | integers | Represents counter column |
decimal | integers, floats | Represents variable-precision decimal |
double | integers | Represents 64-bit IEEE-754 floating point |
float | integers, floats | Represents 32-bit IEEE-754 floating point |
inet | strings | Represents an IP address, IPv4 or IPv6 |
int | integers | Represents 32-bit signed int |
text | strings | Represents UTF8 encoded string |
timestamp | integers, strings | Represents a timestamp |
timeuuid | uuids | Represents type 1 UUID |
uuid | uuids | Represents type 1 or type 4 |
UUID | ||
varchar | strings | Represents uTF8 encoded string |
varint | integers | Represents arbitrary-precision integer |
コレクションの種類
Cassandra Query Languageは、コレクションのデータ型も提供します。 次の表に、CQLで使用可能なコレクションのリストを示します。
Collection | Description |
---|---|
list | A list is a collection of one or more ordered elements. |
map | A map is a collection of key-value pairs. |
set | A set is a collection of one or more elements. |
ユーザー定義のデータ型
Cqlshは、ユーザーに独自のデータ型を作成する機能を提供します。 以下は、ユーザー定義のデータ型を扱う際に使用されるコマンドです。
- CREATE TYPE -ユーザー定義のデータ型を作成します。
- ALTER TYPE -ユーザー定義のデータ型を変更します。
- DROP TYPE -ユーザー定義のデータ型を削除します。
- DESCRIBE TYPE -ユーザー定義のデータ型について説明します。
- DESCRIBE TYPES -ユーザー定義のデータ型について説明します。
Cassandra-CQLコレクション
CQLは、Collectionデータ型を使用する機能を提供します。 これらのコレクションタイプを使用すると、1つの変数に複数の値を保存できます。 この章では、Cassandraでコレクションを使用する方法について説明します。
List
リストは次の場合に使用されます
- 要素の順序が維持されること、および
- 値は複数回保存されます。
リスト内の要素のインデックスを使用して、リストデータ型の値を取得できます。
リスト付きのテーブルを作成する
以下に、名前とメールという2つの列を持つサンプルテーブルを作成する例を示します。 複数のメールを保存するために、リストを使用しています。
リストへのデータの挿入
リスト内の要素にデータを挿入するときに、下に示すように、すべての値を角カッコ[]内にコンマで区切って入力します。
リストを更新する
以下に示すのは、 data というテーブルのリストデータ型を更新する例です。 ここで、リストに別のメールを追加しています。
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
SET
Setは、要素のグループを格納するために使用されるデータ型です。 セットの要素は、ソートされた順序で返されます。
セット付きのテーブルの作成
次の例では、nameとphoneという2つの列を持つサンプルテーブルを作成します。 複数の電話番号を保存するために、setを使用しています。
セットへのデータの挿入
セット内の要素にデータを挿入するときに、以下に示すように、中括弧\ {}内にすべての値をコンマで区切って入力します。
セットの更新
次のコードは、data2という名前のテーブルのセットを更新する方法を示しています。 ここでは、セットに別の電話番号を追加しています。
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
MAP
マップは、要素のキーと値のペアを格納するために使用されるデータ型です。
マップ付きのテーブルの作成
次の例は、名前と住所の2つの列を持つサンプルテーブルを作成する方法を示しています。 複数のアドレス値を保存するために、マップを使用しています。
マップへのデータの挿入
マップの要素にデータを挿入するときに、以下に示すように、すべての key:value ペアを中括弧\ {}内にコンマで区切って入力します。
セットの更新
次のコードは、data3という名前のテーブルのマップデータタイプを更新する方法を示しています。 ここでは、キーオフィスの値を変更しています。つまり、robinという名前の人のオフィスの住所を変更しています。
検証
SELECTステートメントを使用してテーブルを検証すると、次の結果が得られます-
Cassandra-CQLユーザー定義データ型
CQLは、ユーザー定義のデータ型を作成および使用する機能を提供します。 複数のフィールドを処理するデータ型を作成できます。 この章では、ユーザー定義のデータ型を作成、変更、削除する方法について説明します。
ユーザー定義データ型の作成
コマンド CREATE TYPE は、ユーザー定義のデータ型を作成するために使用されます。 その構文は次のとおりです-
例
以下に、ユーザー定義のデータ型を作成する例を示します。 この例では、次の詳細を含む card_details データ型を作成しています。
Field | Field name | Data type |
---|---|---|
credit card no | num | int |
credit card pin | pin | int |
name on credit card | name | text |
cvv | cvv | int |
Contact details of card holder | phone | set |
注意-ユーザー定義のデータ型に使用される名前は、予約されている型名と一致してはなりません。
検証
ユーザー定義のデータ型の変更
型にフィールドを追加する
次の構文を使用して、既存のユーザー定義データ型に新しいフィールドを追加します。
次のコードは、 Card_details データ型に新しいフィールドを追加します。 ここでは、emailという新しいフィールドを追加しています。
検証
型のフィールドの名前を変更する
次の構文を使用して、既存のユーザー定義データ型の名前を変更します。
次のコードは、型のフィールドの名前を変更します。 ここでは、フィールドメールの名前をメールに変更しています。
検証
ユーザー定義データ型の削除
例
削除する前に、以下に示すように DESCRIBE_TYPES コマンドを使用して、すべてのユーザー定義データ型のリストを確認します。
2つのタイプから、以下に示すように card という名前のタイプを削除します。
Cassandra-便利なリソース
以下のリソースには、Cassandraに関する追加情報が含まれています。 このトピックに関する詳細な知識を得るためにそれらを使用してください。
Cassandraの便利なリンク
- Cassandra-Cassandraの公式サイト。
- Cassandra Wikipedia-CassandraのWikipediaリファレンス
Cassandraに関する有用な本
このページにサイトを登録するには、 contact @ finddevguides.com にメールを送信してください。