2013-05-04 1 views
1

지난 몇 주 동안 우리는 다른 Cassandra clients을 평가하려고 했으므로 지금은 Netflix/Astyanax client으로 진행하는 것처럼 보입니다.Astyanax Cassandra 클라이언트의 연결 풀 유형

주로 read performance에 대해 Cassandra database을 최적화하려고합니다. 현재, 나는 this-

/** 
* Creating Cassandra connection using Astyanax client 
* 
*/ 
private CassandraAstyanaxConnection() { 

    context = new AstyanaxContext.Builder() 
    .forCluster(ModelConstants.CLUSTER) 
    .forKeyspace(ModelConstants.KEYSPACE) 
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()  
     .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE) 
    ) 
    .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool") 
     .setPort(9160) 
     .setMaxConnsPerHost(40) 
     .setSeeds("node1:9160,node2:9160,node3:9160,node4:9160") 
    ) 
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()  
     .setCqlVersion("3.0.0") 
     .setTargetCassandraVersion("1.2")) 
    .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) 
    .buildKeyspace(ThriftFamilyFactory.getInstance()); 

    context.start(); 
    keyspace = context.getEntity(); 

    emp_cf = ColumnFamily.newColumnFamily(
     ModelConstants.COLUMN_FAMILY, 
     StringSerializer.get(), 
     StringSerializer.get()); 
} 

문제 설명처럼 Astyanax connection를 만드는 오전 : -

그래서 기본적으로 내가 Astyanax clientConnectionPoolType as ROUND_ROBIN를 사용하는 것으로 판단된다.

이제 아래 옵션 중 어떤 것이 더 좋을지 알기 위해 read performance의 관점에서 이해하려고합니다.

TOKEN_AWARE or ROUND_ROBIN or BAG

그리고 그 세 가지의 차이점은 무엇입니까? 그리고 우리는 어떻게 위에서 3 개 중 하나를 사용해야한다고 결정합니까?

Google 클러스터에 대한 배경 정보 우리는 cross colo cluster24 nodes이라는 싱글을 가질 예정입니다. 의미는 12 nodes in SLC colo12 nodes in PHX colo입니다.

NetworkTopologyStrategyreplication factor of 4이고, 의미는 2 in each colo입니다. 우리는 LeveledCompactionStrategy을 사용할 것입니다.

위의 질문에 대한 설명은 도움이 될 것입니다. 프로덕션 환경에서 Astyanax 클라이언트를 사용할 많은 사람들이있을 것입니다. 모든 피드백은 큰 도움이 될 것입니다.

도움 주셔서 감사합니다.

업데이트 : -

아직도 내가 더 잘 이해할 수 있도록 예와 그 세 사이의 주요 차이점을 무엇 나를 설명 할 수있는 대답을 찾고. 나는 그것이 일반적으로 무엇을 의미하는지 알지만, 그것이 어떻게 작용할 것인지에 대한 견해의 예를 이해할 수는 없습니다.

답변

1

ConnectionPoolType 이러한 유형의 ROUND_ROBIN

는 연결이 호스트의 설정에 따라 라운드 로빈 방식에서 인스턴스화됩니다.

TOKEN_RANGE는

그것은 ROUND_ROBIN 유형에 다소 비슷 토큰 범위

내에서 로빈에게

을 BAG 모든 호스트를 수행하지 반올림하는 기본 토큰을 알고 풀을 설정 이 유형에 대해 많이 알고 있지만, 나는 그것과 비슷한 것이 될 것이라고 생각한다. 당신의 연결은 토큰 범위 나 라운드 로빈 패턴과 무관하게 호스트의 BAG로부터 무작위로 인스턴스화 될 것이다.

+0

감사합니다. abhi. 네가 나에게 말한 것들은 이미 알고있다.나는 그것이 어떻게 작동하는지 간단한 예제를 통해 자세히 이해하려고 노력했습니다. ROUND_ROBIN 대 TOKEN_AWARE 연결 풀 유형의 차이점과 읽기 성능을 위해 권장되는 점에 주로 관심이 있습니까? – ferhan

+0

흠 ... 추천 TOKEN_WARE됩니다 – abhi