DSEドライバーのオブジェクト・マッパー
C#、Java、Node.js、Pythonの各ドライバーは、オブジェクトマッパー(クエリー結果を管理するためのツール)を提供します。
C#、Java、Node.js、Pythonの各ドライバーは、オブジェクトマッパーを提供します。これらのマッパーは、クエリーの結果を生成、実行、および消費するためのツールです。
オブジェクト・マッパーAPIは、意図的に一部のCQL機能を実装していません。言語ごとに異なるパターン・セットが必要なため、マッパーAPIは言語ごとに異なります。各言語のAPIドキュメントを調べて、それが目的のアプリケーションに適合していることを確認してください。
以下の概念は、すべてのマッパーAPIに共通です。
- 「モデル・クラス」とは、DSEテーブルを表すクラスです。これらのクラスには、そのテーブルの列にマップするメンバー変数があります。
- モデル・クラスのインスタンスは「データオブジェクト」です。
C/C++(サポートされていません) | C# | Java | Node.js | PHP(サポートされていません) | Python | Ruby(サポートされていません) |
C#オブジェクト・マッパー
C#オブジェクト・マッパーでは、モデル・クラスはセッターとゲッターを持つ通常のクラスであり、plain old CLR object(POCO)とも呼ばれます。デフォルトでは、マッパーはオブジェクト・メンバーからDSE列名へのマッピングを自動的に検出します。マッピングは、Define
メソッドを使用して明示的に構成することもできます。
モデル・クラスはPOCOであるため、すべてのクエリーはマッパー・オブジェクトによって仲介する必要があります。マッパーはSession
インスタンスをラップするほか、ステートメントを実行し、マッパーがデータを読み込む先のタイプを定義するFirst
やFetch
などのメソッドを提供します。同様に、マッパーはInsert
やUpdate
などのメソッドを提供します。これらのメソッドはデータ・オブジェクトを取り込んで、それを使用して書き込みステートメントを生成します。これらのメソッドはすべてジェネリックであり、パラメーター化されたクエリーと引数またはデータ・オブジェクトを取ることができます。
デフォルトでは、null値を書き込むと、データベース内の対応する値が削除または設定解除されます。null値を書き込むと、データベースの全体的な正常性とクエリーのパフォーマンスに影響を与える可能性のあるトゥームストーンが作成されます。nullの書き込みは、Insert
またはInsertAsync
メソッドを使用するときにinsertNullsを設定することにより、操作ごとに制御できます。
C#ドライバーには、このガイドでは詳しく説明されていないC# LINQ APIも含まれています。
Javaオブジェクト・マッパー
Javaオブジェクト・マッパーの場合、クラスに@Tableアノテーションを付けることでモデル・クラスが作成されます。デフォルトでは、マッパーはオブジェクト・メンバーからDSE列名へのマッピングを自動的に検出します。マッピングは、@Columnアノテーションを使用して明示的に構成することもできます。
マッパーでクエリーを実行するには、クエリーを定義するデータ・オブジェクトを作成し、マッパーのCRUD操作を使用して渡します。読み取りクエリーの場合、データ・オブジェクトの引数はDSE列のフィルターとして使用されます。カスタム・クエリーが必要な場合、マッパーはAccessorsを介して機能を拡張します。通常のResultSetsをデータオブジェクトにマップすることもできます。書き込み要求の場合、データ・オブジェクトの値は挿入クエリーの値として使用されます。
デフォルトでは、null値を書き込むと、データベース内の対応する値が削除または設定解除されます。null値を書き込むと、データベースの全体的な正常性とクエリーのパフォーマンスに影響を与える可能性のあるトゥームストーンが作成されます。nullの書き込みは、デフォルトで、またはsaveNullFieldsオプションを設定することで操作ごとに制御できます。
Node.jsオブジェクト・マッパー
Node.jsオブジェクト・マッパーの詳細については、このDataStax Academyブログ投稿を参照してください。
Pythonオブジェクト・マッパー(cqlengine)
Pythonオブジェクト・マッパーの場合、cassandra.cqlengine.model.Modelをサブクラスにすることでモデル・クラスが作成されます。デフォルトでは、マッパーはcassandra.cqlengine.columns.Column
から作成されたオブジェクト属性のDSE列名へのマッピングを自動的に検出します。このマッピングは、db_field kwarg to Column subclass initializersを使用して明示的に定義することもできます。
Pythonドライバーではオブジェクト・マッパーを使用してスキーマを変更できますが、マッパーのスコープ外でモデル・オブジェクトのテーブルを作成するのが最も安全です。マッパー内でテーブルを作成すると、スキーマが同時に変更される可能性があるため、推奨されません。
Pythonマッパーでは、データ・オブジェクトを読み書きするためのクラス・メソッドが提供されています。さらに、モデル・クラスのメソッドを直接呼び出すことでクエリーを実行できます。マッパーの読み取りクエリーメソッドは、CRUD操作のインスタンス・メソッドを持つデータ・オブジェクトのコレクションを返します。
Noneを渡すことは、対応する行の値に対するDELETE操作に対応します。これにより、データベースの全体的な正常性とクエリーのパフォーマンスに影響を与える可能性のあるトゥームストーンが作成されます。
マッパー接続は、データベースに接続するセッションにアクセスするために使用できる接続レジストリで維持されます。