- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Astyanax 客户端从 Cassandra 数据库读取数据。
我在 Cassandra 数据库中有大约一百万行。我有一个十字colocation centre具有四个节点的集群。
这是我的四个节点:
node1:9160
node2:9160
node3:9160
node4:9160
我启用了 KeyCaching 并且也启用了 SizeTieredCompaction 策略。
我有一个多线程的客户端程序,它将使用 Astyanax 客户端从 Cassandra 数据库中读取数据,我正在运行 20 个线程。如果我用 20 个线程运行我的客户端程序,那么从 Cassandra 数据库读取数据的性能会下降。
所以我首先想到的是,可能存在与 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?
setMaxConns(20) 方法会调用吗?我是否还需要添加它以提高性能?因为我将使用多个线程运行我的程序。
最佳答案
有关 maxConnsPerHost
/maxConns
的详细信息,您可以查看此答案:setMaxConns and setMaxConnsPerHost in Astyanax client
是的,应该增加 maxConnsPerHost
以获得良好的性能。最佳值取决于网络拓扑、请求复制因子、存储配置、缓存、读写比等。
我认为如果不进行实验和模拟,就不可能为重负载集群实现最佳性能。
对于 Cassandra 上的中等负载任务,我通常使用经验法则:
maxConnsPerHost ~= <Number of cores per host>/<Replication factor> + 1
也就是说,对于复制因子为 3 的 8 核盒子集群,maxConnsPerHost
应该在 4 左右。这个值对于重负载场景下的实验也是一个很好的起点。
动机:一个由 N
个节点组成的集群,每个节点都有 C
个核心,总共有 N * C
个核心。要处理具有复制因子 R
的请求,需要(不同节点的)R
核心。因此,在每个给定时刻,集群最多可以处理 N * C/R
请求。将并发连接数保持在这个数字附近是个好主意。将它除以 N
以计算每个主机的连接数。为每个主机添加 1 个备用连接以应对网络延迟等问题。就是这样。
更新:简单的客户端性能调整:
maxConnsPerHost
值开始org.apache.cassandra.request->***Stage->pendingTasks
JXM 属性maxConnsPerHost
直到 pendingTasks
开始快速增加。这可能是最优值。 关于java - Astyanax 客户端每个节点的最大连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203676/
我是astyanax的新手,尝试了一些示例程序并遇到此错误。这是一个简单的编写,看起来像是在做一些基本错误的事情。不使用复合键。 Caused by: InvalidRequestException(
尝试编写一个查询,该查询将使用 astyanax 客户端和 RowSliceQuery 对列族中的所有行进行分页。 keyspace.prepareQuery(COLUMN_FAMILY).getKe
我正在尝试使用 Astyanax 驱动程序列出 Cassandra 中的列族。它列出了键空间,但输出中缺少许多列族。 我有一个简单的程序: import com.netflix.astyanax.As
我最近开始使用Cassandra在我们的Production environment 。我们有一个24 node cluster与 replication factor of 4 。含义2 copie
这是我的设置: 4 个节点 Cassandra 1.2.19 Astyanax 1.56.49 我正在设置配置 AstyanaxContext context = new AstyanaxContex
我正在使用 Astyanax 客户端从 Cassandra 数据库读取数据。 我在 Cassandra 数据库中有大约一百万行。我有一个十字colocation centre具有四个节点的集群。 这是
如何使用 astyanax 客户端创建带有复合键的表。现在我已经用 cqlsh -3 创建了它,这就是它在 cli 中的样子: [default@KS] describe my_cf; Col
我正在尝试将 Astyanax 用于带有 Java 的 Cassandra。我在 https://github.com/Netflix/astyanax/wiki/Getting-Started 尝试
我编写了一些相当简单的代码来试验 astyanax。当与本地主机上的单节点 Cassandra 数据库通信时,它工作正常,但是当我将相同的架构写入两节点集群(绝对可以从我的主机访问)时,我得到一个 T
我最近开始使用 Cassandra 数据库,并且正在考虑使用 Netflix 客户端 astyanax。我进入了这个页面- https://github.com/Netflix/astyanax 我想
我从事的项目使用astyanax驱动程序来访问Cassandra。我想实现一个异步操作: MutationBatch m; //… ListenableFuture> lf = m.executeAs
Astyanax 通过其 AnnotatedCompositeSerializer 支持 Cassandra 中的复合列。我有一个包含 3 个字段的复合列名称的列族,类似于此示例,改编自 Astyan
过去几周我们一直在尝试评估不同的 Cassandra 客户端,所以现在看来我们将继续使用 Netflix/Astyanax 客户端。 我们正在尝试优化 Cassandra 数据库,主要是为了读
我正在尝试使用 Astyanax 客户端插入 Cassandra 列族中的复合列。下面是我在 Cassandra 中的列族。 create column family USER_DATA with k
我正在开发一个项目,其中我需要使用 Astyanax 客户端删除 Cassandra 中除一列及其数据之外的所有列及其数据。 我有一个如下所示的动态列族,并且该列族中已经有几百万条记录。 create
您好,我正在使用 Astyanax 客户端在我的程序中使用 CQL 访问 Cassandra。我遇到的问题是,当我执行查询时,OperationResult 的行数设置为最大值 10 000。我需要根
我使用 astyanax 连接池定义如下: ipSeeds = "LOAD_BALANCER_HOST:9160"; conPool.setSeeds(ipSeeds) .setDiscoveryTy
我正在尝试从具有 double 类型列的Cassandra表中获取 double 值。我已经使用CQL3语法创建了表: CREATE TABLE data_double ( datetime
我想将 Astyanax 包含在我的项目中。我从 github checkout 代码并用“gradlew build”编译它。我不熟悉gradle。 我将 Astyanx jar 文件手动包含到我的
有没有办法检查当前上下文中是否存在 Astyanax Keyspace?现在我的代码执行以下操作: keyspace = context.getClient(); try{ keyspace.d
我是一名优秀的程序员,十分优秀!