Python-data-persistence-cassandra-driver
Pythonデータの永続性-Cassandraドライバー
Cassandraは、もう1つの人気のあるNoSQLデータベースです。 高いスケーラビリティ、一貫性、フォールトトレランス-これらは、Cassandraの重要な機能の一部です。 これは*列ストア*データベースです。 データは多くのコモディティサーバーに保存されます。 その結果、データの可用性が高くなります。
Cassandraは、Apache Software Foundationの製品です。 データは複数のノードに分散して保存されます。 各ノードは、キースペースで構成される単一のサーバーです。 Cassandraデータベースの基本的な構成要素は keyspace であり、データベースに類似していると考えることができます。
Cassandraの1つのノードのデータは、ノードのピアツーピアネットワークを介して他のノードに複製されます。 そのため、Cassandraは間違いのないデータベースになります。 ネットワークはデータセンターと呼ばれます。 複数のデータセンターを相互接続してクラスターを形成できます。 レプリケーションの性質は、キースペースの作成時にレプリケーション戦略とレプリケーション係数を設定することによって構成されます。
1つのデータベースに複数のテーブルが含まれているのと同じように、1つのキースペースに複数の列ファミリーがある場合があります。 Cassandraのキースペースには、事前定義されたスキーマがありません。 Cassandraテーブルの各行に、異なる名前と変数番号の列が含まれている可能性があります。
Cassandraソフトウェアには、コミュニティとエンタープライズの2つのバージョンもあります。 Cassandraの最新のエンタープライズバージョンは、https://cassandra.apache.org/download/からダウンロードできます。 コミュニティエディションはhttps://academy.datastax.com/planet-cassandra/cassandraにあります。
Cassandraには、* Cassandra Query Language(CQL)*と呼ばれる独自のクエリ言語があります。 CQLクエリは、MySQLやSQLiteシェルと同様に、CQLASHシェル内から実行できます。 CQL構文は、標準SQLに似ています。
Datastaxコミュニティエディションには、次の図に示すDevelcenter IDEも付属しています-
Cassandraデータベースを操作するためのPythonモジュールは Cassandra Driver と呼ばれます。 また、Apache Foundationによって開発されています。 このモジュールには、ORM APIと、リレーショナルデータベースのDB-APIに本質的に類似したコアAPIが含まれています。
Cassandraドライバーのインストールは、* pipユーティリティ*を使用して簡単に実行できます。
Cassandraデータベースとの対話は、クラスターオブジェクトを介して行われます。 Cassandra.clusterモジュールはClusterクラスを定義します。 最初にClusterオブジェクトを宣言する必要があります。
挿入/更新などのすべてのトランザクションは、キースペースでセッションを開始することによって実行されます。
新しいキースペースを作成するには、セッションオブジェクトの* execute()*メソッドを使用します。 execute()メソッドは、クエリ文字列でなければならない文字列引数を取ります。 CQLには、次のようなCREATE KEYSPACEステートメントがあります。 完全なコードは以下のとおりです-
ここで、 SimpleStrategy は*レプリケーション戦略*の値であり、*レプリケーション係数*は3に設定されています。 前述のように、キースペースには1つ以上のテーブルが含まれています。 各テーブルは、データ型によって特徴付けられます。 Pythonのデータ型は、次の表に従って対応するCQLデータ型で自動的に解析されます-
Python Type | CQL Type |
---|---|
None | NULL |
Bool | Boolean |
Float | float, double |
int, long | int, bigint, varint, smallint, tinyint, counter |
decimal.Decimal | Decimal |
str, Unicode | ascii, varchar, text |
buffer, bytearray | Blob |
Date | Date |
Datetime | Timestamp |
Time | Time |
list, tuple, generator | List |
set, frozenset | Set |
dict, OrderedDict | Map |
uuid.UUID | timeuuid, uuid |
テーブルを作成するには、セッションオブジェクトを使用して、テーブルを作成するためのCQLクエリを実行します。
このように作成されたキースペースは、行を挿入するためにさらに使用できます。 INSERTクエリのCQLバージョンは、SQL挿入ステートメントに似ています。 次のコードは、studentsテーブルに行を挿入します。
ご想像のとおり、SELECTステートメントはCassandraでも使用されます。 SELECTクエリ文字列を含むexecute()メソッドの場合、ループを使用してトラバースできる結果セットオブジェクトを返します。
CassandraのSELECTクエリは、フェッチする結果セットにフィルターを適用するためのWHERE句の使用をサポートしています。 <、> ==などの従来の論理演算子 認識されます。 age> 20の名前のstudentsテーブルからそれらの行のみを取得するには、execute()メソッドのクエリ文字列は次のようにする必要があります-
CassandraドライバーAPIは、そのcassendra.queryモジュールでStatementタイプの以下のクラスを定義します。
SimpleStatement
クエリ文字列に含まれる単純な準備されていないCQLクエリ。 上記の例はすべてSimpleStatementの例です。
BatchStatement
複数のクエリ(INSERT、UPDATE、DELETEなど)がバッチに入れられ、一度に実行されます。 各行は最初にSimpleStatementとして変換され、次にバッチで追加されます。
次のように、タプルのリストの形式でStudentテーブルに追加する行を入れましょう-
BathStatementを使用して上記の行を追加するには、次のスクリプトを実行します-
PreparedStatement
準備済みステートメントは、DB-APIのパラメーター化されたクエリのようなものです。 そのクエリ文字列は、後で使用するためにCassandraによって保存されます。 Session.prepare()メソッドはPreparedStatementインスタンスを返します。
私たちの学生のテーブルでは、INSERTクエリのPreparedStatementは次のとおりです-
その後、バインドするパラメータの値を送信するだけで済みます。 たとえば-
最後に、上記のバインドされたステートメントを実行します。
Cassandraは毎回クエリを再解析する必要がないため、これによりネットワークトラフィックとCPU使用率が削減されます。