2017-11-02 6 views
0

2 개의 카산드라 클러스터가 있습니다. 내 간단한 스크립트가 하나의 클러스터에서 읽고 쓰려고합니다. 설명서 here에 따라 두 번째 클러스터에 registered_connection (명명 된 이름)이 있고 첫 번째 클러스터에 기본 연결이 있습니다.카산드라 여러 연결이 저장되지 않고 작동하지 않습니다. [Python]

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

를 내가 작성하려고 때/사용하여 다른 클러스터에 항목을 저장 : 내가 사용하여 다른 클러스터를 조회 할 수 있어요이 오류가 발생하지 않습니다

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

뿐만 아니라에 기록하지 않습니다 클러스터. 싱크 클러스터를 쿼리하여이를 확인했습니다. 문서에서 명백한 것을 놓치고 있습니까?

추신 : 첫 번째 시나리오에서는 ModelQuerySet 개체가 사용자 지정 연결을 적용하고 저장 시나리오에서는 Model 개체를 사용합니다.

답변

0

같은 문제가 발생하여 해결해야하는 사람에게 적합합니다. 해결 방법이므로 적절한 해결책이 여기에 나타나면이를 따르십시오.

이 솔루션은 가정을 기반으로합니다

  1. 당신은 카산드라 드라이버 == 3.11.0 이하를 사용하고, 연결 레지스트리가 지원
  2. 당신에게 (보고 here을 가지고) 처리 할 클러스터가 2 개 이상 있고 위의 API (register_connection)를 통해 모든 명명 된 연결을 등록했습니다. 연결 중 하나를 기본 연결로 만드십시오. 서로 다른 연결과 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 방법은 Noneconnection 변수가 있고 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 
.... 

희망!