2017-11-02 5 views
0

私は2つのcassandraクラスタを持っていますが、私の単純なスクリプトは1つから読み込み、ドキュメントhereによると、第2クラスタにはregistered_connection(名前付き)があり、第1クラスタにはデフォルトの接続があります。私が使用して別のクラスタにアイテムを保存/書き込みしようとすると、しかしCassandra複数の接続が保存されていて、動作していません[Python]

​​

を::私が使用して、異なるクラスタを照会することができる午前

item.using(connection=connection).save() 

それはエラーをスローしませんが、またに書き込めません。クラスタ。私は、シンククラスタを照会することでこれを確認しました。私はドキュメンテーションから明白な何かを見逃していますか?

PS:最初のシナリオでは、カスタム接続を適用するオブジェクトはModelQuerySetで、保存シナリオではModelオブジェクトです。

答えて

0

同じ問題を抱え、解決策が必要な人のために。 これは回避策ですので、適切な解決方法がここにポップアップする場合は、それに従ってください。

このソリューションは、仮定に基づいています。

  1. あなたは、あなたは
  2. (見hereてください)接続 レジストリがサポートされているカサンドラ・ドライバ== 3.11.0以下を使用しています2つ以上のクラスタを処理する必要があり、上記のAPI(register_connection)を介してすべての名前付き接続を登録しています。接続の1つをデフォルト接続にします。

あなたの問題について少し背景:あなたは別の接続でModelSetQueryオブジェクトを使用する場合

、それは予想される動作を示します。だからあなたのようなクエリがある場合:

MyModel.filter(u_id=u_id).first() 

を簡単にusing方法で、このようなクエリのためkeyspaceconnectionを指定することができます。

MyModel.filter(u_id=u_id).using(keyspace=KEYSPACE, connection=connection).first() 

ただしMyModel.using(connection=connection).save()が動作しないことを確認します。批判的志向については

あなたはcassandra.cqlengine.query_execute_statement方法はNoneとしてconnection変数があり、Model.__connection__で設定していても下にmodel._get_connection()があなたの接続名の文字列をつかむしないことを確認します。あなたが実際の問題を見始めるためのヒント。

回避策ソリューション:だから、基本的には、各クラスタ上グループあなたの作業を一緒にしてconnection.set_default_connection("cluster_connection_name")

で適切なクラスタに各クラスタの操作スイッチのデフォルトの接続の前に:

connection.set_default_connection("cluster1") 
# operations and queries on cluster 1 
.... 
connection.set_default_connection("cluster2") 
# operations and queries on cluster 2 
.... 

は、この情報がお役に立てば幸い!

関連する問題