【发布时间】:2014-09-18 01:13:30
【问题描述】:
(卡桑德拉菜鸟) 我一直在做一些基本的配置/性能测试,并尝试更好地了解 cassandra 的工作原理,并且对结果有点惊讶。
我的测试基本上是这样的:(多线程(每个线程只是做一个插入),总共 50k 条消息)。
测试 1:仅单节点(无集群)插入,一致性 = 1。 (注意:test在这个主机上运行,指向本地的cassandra)
结果:tps=5000tps。
对于测试 2,3,我们使用 4 个数据中心(每个 1 个节点),其中表配置为 USING REPLICATION = 4
** 测试 2/3(客户端再次直接在安装 Cassandra 的节点之一上运行,并直接指向该 localhost cassandra)。
测试 2:插入 Consistency=1
结果:tps = 423
测试 3:使用 Consistency=4 插入
结果:tps = 149
最初我期望测试 2 以与测试 1 类似的方式执行,在以下假设下运行:插入将阻塞,直到将插入写入接收请求的本地 cassandra 节点的提交日志。
看到性能要慢得多,我只能得出结论,当本地节点接收到插入时,它会计算一个哈希,这个哈希/分区实际上可能由另一个 Cassandra 节点作为主节点托管?即使由于 ConsistencyFactor==集群中的节点数,它最终会被“复制”“回”到本地节点,这会导致插入阻塞,直到远程节点将插入提交到提交日志。
这是正确的吗? 如果是的话..有没有办法“改变”这种行为?即如果集群中的所有节点都有一个副本,那么当接收到 C=1 的插入时,确保接收节点在本地提交它,而不是委派出去?
注意:对于我的测试,我使用的是 java DataStax 2 驱动程序(可能是这个驱动程序,即使当我显式连接到本地节点时实际上是在创建与整个集群的连接,并将请求分派到所有节点? )
谢谢 达诺
【问题讨论】:
-
嗨,dano,你能分享你设置一致性级别的代码吗?
标签: replication consistency datastax-java-driver