私はAstyanaxクライアントを使用してCassandraデータベースからデータを読んでいます。ノードごとのAstyanaxクライアントの最大接続数は?
私はカサンドラデータベースに約100万のユニークな行を持っています。私は4つのノードを持つ単一のクロスcolocation centreクラスタを持っています。
node1:9160
node2:9160
node3:9160
node4:9160
私が有効になっているKeyCachingとSizeTieredCompaction戦略も同様に有効になります。
これらは私の4つのノードです。
私は、Asthanaxクライアントを使用してカスカンドラデータベースからデータを読み込み、20スレッドで実行しているマルチスレッドのクライアントプログラムを用意しています。 20スレッドでクライアントプログラムを実行している場合、Cassandraデータベースからデータを読み込むパフォーマンスが低下します。
私の頭に浮かぶ最初のことは、カサンドラとの接続に関して競合する可能性があるということです。私は以下のコードを使用してAstyanaxクライアントを使用して接続しています。
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(1)
.setSeeds("nod1: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());
}
パフォーマンスを向上させるために上記のコードを変更する必要がありますか?
このメソッドは何をしますか?
setMaxConnsPerHost(1)
は、私はパフォーマンスを向上させることを増やす必要がありますか?私は4つのノードを持っているので、それを4に変更する必要がありますか?
setMaxConns(20)メソッドは呼び出しますか?パフォーマンスを向上させるためにそれを追加する必要がありますか?私は複数のスレッドでプログラムを実行しています。 maxConnsPerHost
/maxConns
の詳細については
ありがとうございました。あなたの助けを感謝しました。 setMaxConnsはどうですか?それにはどんな価値がありますか?それを決めるのにどんな種類の論理が続くのか。 –
@FarhanJamal:setMaxConnsはConnectionPoolType.BAGでのみ使用され、他の実装では無視されます。 BAG接続プールを使用する場合は、この属性をCassandraに同時に要求を送信するスレッドの最大数に設定することができます。 – Wildfire
提案していただきありがとうございます。一般的にどんな接続プールを使うべきですか?つまり、接続プーリングを使用すると、より高速な読み取りパフォーマンスが得られます。現在、上記の例では、私は 'ConnectionPoolConfigurationImpl'を使用しています。あなたはそれについてもどんな勧告もありますか? –