【问题标题】:Throughput vs replication factor on the read performance of cassandracassandra 读取性能的吞吐量与复制因子
【发布时间】:2015-02-07 18:14:10
【问题描述】:

我有一个包含 8 个 Cassandra 节点(Amazon EC2 实例)的集群。我正在评估增加复制因子对 Cassandra 读取性能的影响。除了 100 万个对象的初始插入外,不执行任何写入。 Read_Repair 机会被禁用,并且正在使用一致性级别 ONE。到目前为止,我的观察是,随着复制因子的增加,读取性能会降低。关于为什么会发生这种情况的任何解释?

【问题讨论】:

  • 好问题,它不应该改变。出于兴趣,物体的大小是多少?
  • 为什么 [r] 是一个标签(或 [java] )? (他们扔给审阅者的机器驱动测试之一是无关标签,这看起来就像其中之一。)
  • 一个对象的大小是1KB。 r 标签是自动提示错误!

标签: java r amazon-ec2 replication cassandra-2.0


【解决方案1】:

根据您尝试执行的读取类型,如果节点数量保持不变并且您增加复制因子,则读取性能可能会降低。

例如,如果您在集群列上运行范围查询,或者任何其他需要指定“允许过滤”关键字的查询,理论上您可以观察到这种行为。通过增加复制因子,集群的每个节点将存储更多的数据:与环的主范围相关的数据以及与该节点作为副本的所有分区键相关的数据。即使 Cassandra 为避免此类查询性能下降而进行了许多优化,但在每个节点中添加更多行也会导致性能下降。

对于使用分区键的查询,性能下降不应该是可观察到的,因为在到达数据之前对分区摘要(在内存中)和分区索引(在磁盘上)的访问次数几乎相同。显然,这只有在您进行一致性读取时才成立。 如果您在这种情况下观察到这种现象,我认为这应该与缓存未命中次数的增加有关(如果您使用 key-cache、row-cache 或bloom-filters,尤其是当您尝试读取不存在的数据时),由于所有这些缓存都无法保存磁盘上存在的所有数据,并且现在每个节点上都有更多数据,因此所有缓存中的命中数应该会减少。这可以使用 nodetool 进行验证。

当然,在分区键访问的情况下,您在增加复制因子方面还有许多其他优势,因为您有更多的副本节点可用于回答您的查询。但是,由于您的驱动程序具有更高复制因子的更多选择,因此向同一节点询问两次行的概率会降低。那么您在某个缓存中找到该行的可能性就会降低。

【讨论】:

  • 如何使用 nodetool 进行验证?
  • 我在测试中不使用任何范围查询。这是我的 CF 的架构:架构:创建表用户表(y_id varchar 主键,field0 varchar,field1 varchar,field2 varchar,field3 varchar,field4 varchar,field5 varchar,field6 varchar,field7 varchar,field8 varchar,field9 varchar) speculative_retry='NONE' and read_repair_chance=0 and caching='ALL';查询:Select * from usertable where y_id=(key:根据HotSpot分布选择)
  • 检查 nodetool 的结果以验证缓存的影响。您可以使用“nodetool info”获取有关缓存的统计信息,使用“nodetool cfstats”获取布隆过滤器。
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2018-08-06
  • 2016-04-30
相关资源
最近更新 更多