2013-10-26 1 views
10

최근 Cassandra 유스 케이스에 Datastax Java 드라이버를 사용하기 시작했습니다 ... Cassandra에 읽기/쓰기 용으로 Datastax Java 드라이버를 사용할 것입니다 ...Cassandra Java 드라이버가 로컬 데이터 센터에만 쓸 최적 설정

Datastax Java 드라이버를 사용하여 성공적으로 Cassandra 연결을 만들 수 있습니다 ... 그러나 연결을 만드는 동안 Datastax Java 드라이버를 사용하여 더 나은 성능을 얻으려면 프로덕션 환경에서 사용해야하는 다른 설정이 있습니까? 카산드라?

/** 
* Creating Cassandra connection using Datastax driver 
* 
*/ 
private DatastaxConnection() { 

    try{ 
     builder = Cluster.builder(); 
     builder.addContactPoint("some-node"); 

     // Can anybody explain me what does below piece of code do? 

     builder.poolingOptions().setCoreConnectionsPerHost(
       HostDistance.LOCAL, 
       builder.poolingOptions().getMaxConnectionsPerHost(HostDistance.LOCAL)); 

     // And also what does below piece of code is doing?  
     cluster = builder 
       .withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE) 
       .withReconnectionPolicy(new ConstantReconnectionPolicy(100L)) 
       .build(); 

     StringBuilder s = new StringBuilder(); 
     Set<Host> allHosts = cluster.getMetadata().getAllHosts(); 
     for (Host h : allHosts) { 
      s.append("["); 
      s.append(h.getDatacenter()); 
      s.append("-"); 
      s.append(h.getRack()); 
      s.append("-"); 
      s.append(h.getAddress()); 
      s.append("]"); 
     } 
     System.out.println("Cassandra Cluster: " + s.toString()); 

     session = cluster.connect("testdatastaxks"); 
    } catch (NoHostAvailableException e) { 

    } catch (Exception e) { 

    } 
} 

내 최고 우선 순위는 다음과 같습니다 - 그것은 로컬 데이터 센터 카산드라 노드를해야합니다 연결 풀에서 그래서

  • 필터 밖으로 카산드라는 .. 지역 데이터 센터에 기반을 노드.
  • 일부 특정 설정에서 Datastax java 드라이버를 사용하는 동안 최상의 성능을 얻으십시오. 나는 특정 설정이 다른 환경에서 다를 수 있지만 모두가 Datastax 자바 드라이버를 사용하여 카산드라 연결을하는 동안 최적의 성능을 얻기 위해 수행하는 몇 가지 설정이있을 수 있다고 할 수 있습니다 알고

..

이전에 Astyanax에서 사용했던 것과 마찬가지로 TOKEN_AWARE를 사용해야합니다. ...

Datastax java 드라이버를 사용하는 동안 몇 가지 최상의 설정이 필요합니까?

답변

3

필터 밖으로 카산드라는 로컬 데이터 센터를 갖게됩니다 연결 풀에서 그래서 카산드라

그런 다음 당신이 DCAwareRoundRobinPolicy를 사용할 필요가 노드 .. 지역 데이터 센터에 기반을 노드. 나는 이전에 사용되었을 때 아 스티 아낙 스의 예를 들어

처럼, 그것은 ... 당신이 TOKEN_AWARE를 사용할 필요가 있었다

너무 DataStax 자바 드라이버 마찬가지입니다

, 그것은 수 TokenAwarePolicy라고하고 있어요 위에 인용 된 DCAwareRoundRobinPolicy 위에 사용하십시오. 나는 특정 설정이 다른 환경에서 다를 수 있지만 모두가 Datastax 자바 드라이버를 사용하여 카산드라 연결을하는 동안 최적의 성능을 얻기 위해 수행하는 몇 가지 설정이있을 수 있다고 할 수 있습니다 알고

..

"모든 사람"은 말할 수 없지만 위에서 설명한대로 부하 분산 정책을 적절히 선택하지 않으면 나머지는 환경에 가장 크게 영향을받습니다. 물론 성능에 대해 많은 관심을 기울이는 경우 Configuration의 다양한 설정과 실제 작업량을 가지고 뭔가 도움이되는지 확인하는 것이 좋습니다.

+0

'PoolingOptions'에서 'setLocalDataCenter'라는 setter 메소드가 로컬 데이터 센터에 대한 연결을 제한하지 않습니다.클라이언트는 실행중인 데이터 센터를 어떻게 알 수 있습니까? – vijay

0

속성을 사용하여 드라이버에서 사용할 호스트 이름을 제한 할 수 있습니다.

cassandra.loadbalancing.whitelistpolicy.hostnames 
관련 문제