2013-10-26 73 views
10

我最近開始使用Datastax Java驅動程序用於我們的Cassandra用例...我們將使用Datastax Java驅動程序讀取/寫入Cassandra ...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 Java驅動程序卡桑德拉連接..

以前我使用過的Astyanax中的一個示例,就是您需要使用TOKEN_AWARE ...

因此,在使用Datastax java驅動程序時應該有一些最佳設置或建議使用?

回答

3

過濾掉卡桑德拉本地數據中心節點的基礎。所以在連接池只會有本地數據中心節點卡桑德拉

然後,你需要使用DCAwareRoundRobinPolicy。當我使用較早

像在Astyanax爲例,它是你需要使用TOKEN_AWARE ...

這對於DataStax Java驅動程序太真,這就是所謂的TokenAwarePolicy並能在上面引用的DCAwareRoundRobinPolicy之上使用。

我知道有可能是某些設置將在不同的環境不同,但可能有一些設置,每個人都必須遵循,以獲得最佳的性能,同時使利用Datastax Java驅動程序卡桑德拉連接..

我不能說「每個人」,但在上述正確選擇負載平衡策略之外,其餘部分很可能取決於環境。但是,當然如果你關心性能,最好是使用來自Configuration的各種設置和一些實際的工作負載,並看看是否有幫助。

+0

在'PoolingOptions'中,我看不到一個名爲'setLocalDataCenter'的setter方法來限制連接到本地數據中心。客戶如何從數據中心運行的地方知道數據中心? – vijay

0

屬性可用於限制您希望驅動程序使用的主機名。

cassandra.loadbalancing.whitelistpolicy.hostnames 
相關問題