4

はじめに

Cassandra 1.2 クラスター (7 ノード、レプリケーション ファクター 3) を使用して Python でアプリケーションを作成しており、cql ライブラリ (CQL 3.0) を使用して Python から Cassandra にアクセスしています。

問題

アプリケーションは、構成されていない列ファミリーに対して cql ステートメントを実行しようとすると、自動的にテーブルを作成し、cql ステートメントを再試行するように構築されています。たとえば、これを実行しようとすると:

SELECT * FROM table1

また、table1 が存在しない場合、アプリケーションは table1 に対応する CREATE TABLE を実行し、前の選択を再試行します。問題は、テーブルの作成後に SELECT (再試行) が次のエラーで失敗することです。

Request did not complete within rpc_timeout

質問

クラスターがテーブルの作成などを伝播するのに時間がかかると思いますか? テーブルの作成と選択ステートメントの再試行の間に数秒待つと、すべてが機能しますが、その理由と、より良い方法があるかどうかを正確に知りたいです。おそらく、テーブルの作成を変更が反映されるのを待ってから返すようにしますか?、それを行う方法はありますか?

前もって感謝します

4

1 に答える 1

1

cqlsh を使用していると仮定します。cqlsh のデフォルトの一貫性レベルは 1 で、最初のノードが完了した後に返されることを意味しますが、必ずしもすべてのノードが完了する前ではありません。読んだ場合、完成したテーブルを持つノードから読み取ることが保証されていません。これは、トレースをオンにすることで確認できますが、パフォーマンスに影響します。

すべてのノードでテーブルが作成されるまで作成を待機させる一貫性を強制できます。

CREATE TABLE ... USING CONSISTENCY ALL
于 2013-10-01T14:04:59.787 に答える