DataStaxドライバーのベスト・プラクティス
これらのルールと推奨事項に従うことより、DataStaxドライバーを使用するアプリケーションのパフォーマンスが向上し、リソース使用率を最小限に抑えることができます。
これらのルールと推奨事項に従うことより、DataStaxドライバーを使用するアプリケーションのパフォーマンスが向上し、リソース使用率を最小限に抑えることができます。
アプリケーションごとに1つのセッション・オブジェクトを使用する
アプリケーションの有効期間に対して1つのセッションを作成し、それを再利用します。セッションは、クラスター内のすべてのノードへの接続プールを初期化および維持するため、作成の負荷が高くなります。1つのドライバー・セッションで数千のクエリを同時に処理できます。1つのドライバー・セッションを使用して、アプリケーション内のすべてのクエリを実行してください。クラスターごとに1つのセッションを使用すると、ドライバーは同じノード宛てのクエリーを結合できるため、システムコールのオーバーヘッドを大幅に削減できます。
C/C++ | C# | Java | Node.js | PHP | Python | Ruby |
物理クラスターごとに1つのクラスター・オブジェクトを使用する
C/C++ | C# | Java | Node.js | PHP | Python | Ruby |
スループットを高めるために非同期でクエリーを実行する
最大のスループットを得るには、非同期APIを使用します。非同期APIは、アプリケーションの進行を阻害せずにすぐに戻る実行メソッドを提供し、1つのアプリケーション・スレッドが多数のクエリーを同時に実行できるようにします。非同期実行メソッドは、クエリー結果とエラーが発生した場合にアプリケーションでエラーを取得するために使用できる将来のオブジェクトを返します。多くのクエリーを同時に実行することにより、アプリケーションはクエリー処理を最適化し、ドライバーがクエリー要求を結合する能力を向上させ、サーバー側リソースの使用を最大化します。
頻繁に実行するクエリーにプリペアド・ステートメントを使用する
複数回使用されるクエリーを準備します。クエリーを準備することで、サーバーとドライバーはクエリーの実行に必要な処理とネットワークデータの量を減らすことができます。プリペアド・ステートメントの場合、サーバーはクエリーを1回解析し、それがアプリケーションの存続期間中、キャッシュに格納されます。サーバーは、最初の準備ステップ後に応答メタデータを送信することも避けます。これにより、ネットワークを介して送信されるデータと、対応するクライアント側の処理が削減されます。
C/C++ | C# | Java | Node.js | PHP | Python | Ruby |
データ・センター認識ロード・バランス機能を使用する場合にローカル・データ・センターを明示的に設定する
データ・センター認識ロード・バランス・ポリシーを使用する場合、ドライバーがコンタクト・ポイントからローカル・データ・センターを推測することを許可せずに、アプリケーションでローカルデータ・センターを明示的に設定する必要があります。ドライバーが間違ったローカル・データ・センターを選択した場合、データ・センター間のトラフィックが増加します。これは、多くの場合、データ・センター間のトラフィックよりも待ち時間が長く、金銭的コストを増加させます。ローカル・データ・センターを明示的に設定すると、ドライバーが間違ったローカル・データ・センターを選択する可能性がなくなります。
ドライバー接続を構成する場合、リモート・データ・センターまたは無効なデータ・センターにコンタクト・ポイントを簡単に含めることができます。たとえば、アプリケーションに、テスト中に使用される内部データ・センターのコンタクト・ポイントを含める場合があります。ローカル・データ・センターを明示的に設定することで、上記のエラーを回避できます。
C/C++ | C# | Java | Node.js | PHP | Python | Ruby |
ワークロードの削除とnullの書き込みを避ける
DSEおよびCassandraでは、トゥームストーンはテーブル・データが論理的に削除されたことを示すマーカーです。DSEとCassandraは、更新を不変のSSTableファイルに保存して、スループットを維持し、古いデータの読み取りを防ぎます。削除されたデータ、Time To Live(TTL)データ、およびnull値は廃棄標識を作成します。これにより、データベースは論理的に削除されたデータをクラスター全体で新しいクエリーと調整できます。トゥームストーンは分散データベースの必要な副産物ですが、トゥームストーンの数を制限し、トゥームストーンの作成を回避することで、データベースとアプリケーションのパフォーマンスが向上させることができます。
多くの場合、データ・モデリング手法を使用して削除を回避できます。適切なクエリー構築により、nullを回避できます。トゥームストーンの詳細については、DataStax Academyのこの記事を参照してください。
大量の削除とnullは追加のディスク領域を使用し、読み取りのパフォーマンスを低下させます。トゥームストーンは警告を発生させ、エラーを記録する可能性があります。
たとえば、以下のスキーマについて考えます。
CREATE TABLE test_ks.my_table_compound_key ( primary_key text, clustering_key text, regular_col text, PRIMARY KEY (primary_key, clustering_key) )
このクエリーでは、regular_col
のトゥームストーンは作成されません。
INSERT INTO my_table_compound_key (primary_key, clustering_key) VALUES ('pk1', 'ck1');
しかし、このクエリーでは、regular_col
のトゥームストーンが作成されます。
INSERT INTO my_table_compound_key (primary_key, clustering_key, regular_col) VALUES ('pk1', 'ck1', null);