Cassandra 压力测试结果评估

标签 cassandra datastax-enterprise datastax

一段时间以来,我一直在使用 cassandra-stress 工具来评估我的 cassandra 集群。

我的问题是我无法理解为我的特定用例生成的结果。

我的架构看起来像这样:

CREATE TABLE Table_test(
      ID uuid,
      Time timestamp,
      Value double,
      Date timestamp,
      PRIMARY KEY ((ID,Date), Time)
) WITH COMPACT STORAGE;

我在自定义 yaml 文件中解析了这些信息并使用了参数 n=10000 , threads=100其余的是默认选项( cl=onemode=native cql3 等)。 Cassandra 集群是一个 3 节点 CentOS VM 设置。

自定义 yaml 文件的一些细节如下:
insert:
    partitions: fixed(100)
    select: fixed(1)/2
    batchtype: UNLOGGED

columnspecs:
    -name: Time
     size: fixed(1000)
    -name: ID
     size: uniform(1..100)
    -name: Date
     size: uniform(1..10)
    -name: Value
     size: uniform(-100..100)

到目前为止,我的观察如下:
  • n=10000和时间:fixed(1000) ,插入的行数为 1000 万。 (10000*1000=10000000)
  • 行键/分区的数量是 10000(i.e n) ,其中一次取 100 个分区(这意味着 100 *1000 = 100000 个键值对),其中一次处理 50000 个键值对。 (这是因为 select: fixed(1)/2 ~ 50%)

  • 输出消息也证实了这一点:

    Generating batches with [100..100] partitions and [50000..50000] rows (of[100000..100000] total rows in the partitions)



    对于具有与上述相同配置的连续运行,我得到的结果如下:
    Run Total_ops   Op_rate Partition_rate  Row_Rate   Time 
    1     56           19     1885           943246     3.0
    2     46           46     4648          2325498     1.0
    3     27           30     2982          1489870     0.9
    4     59           19     1932           966034     3.1
    5     100          17     1730           865182     5.8
    

    现在我需要了解的内容如下:
  • 这些指标中的哪一个是吞吐量,即每秒插入的记录数?是 Row_rate、Op_rate 还是 Partition_rate?如果是 Row_rate,我可以在这里安全地得出结论,我每秒可以插入接近 100 万条记录吗?在这种情况下,对 Op_rate 和 Partition_rate 的含义有什么想法吗?
  • 为什么每次运行的 Total_ops 变化如此之大?线程数是否与这种变化有关?关于我的 Cassandra 设置的稳定性,我可以得出什么结论?
  • 我如何在这里确定每个线程的批量大小?在我的例子中,批量大小是 50000 吗?

  • 提前致谢。

    最佳答案

    行率是您插入到数据库中的 CQL 行数。对于您的表,CQL 行是一个元组,如 (ID uuid, Time timestamp, Value double, Date timestamp) .

    分区率是 C* 必须构建的分区数。分区是在 Cassandra 中保存和排序数据的数据结构,具有相同分区键的数据最终位于同一节点上。此分区率等于在时间窗口中插入的分区键中唯一值的数量。对于您的表,这将是 (ID,Date) 的唯一值

    Op Rate 是实际必须完成的 CQL 操作的数量。根据您的设置,它正在运行未记录的批次以插入数据。每个插入包含大约 100 个分区(ID 和日期的唯一组合),这就是为什么 OP Rate * 100 ~= Partition Rate

    总 OP 应该包括所有操作,读和写。因此,如果您有任何读取操作,这些操作也将包括在内。

    我建议更改您的批量大小以匹配您的工作负载,或者根据您的实际数据库使用情况将其保持在 1。这应该提供一个更现实的场景。此外,运行超过 100 次总操作的时间也很重要,这样才能真正了解系统的功能。当数据集的大小增加超过机器中的 RAM 量时,一些最大的困难就会出现。

    关于Cassandra 压力测试结果评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766693/

    相关文章:

    java - DataStax 与 Azul Zing JVM

    java - 使用 Datastax Java 驱动程序返回 JSON

    cassandra - Opscenter 键空间中的备份文件夹变得非常巨大

    ssl - 如何使用 DataStax Java 驱动程序设置 Cassandra 客户端到节点加密?

    ubuntu - 默认同步文件夹在 vagrant up 后不起作用,但在 vagrant 重新加载后起作用

    使用 Spark 摄取时 Cassandra : node become unavailable,

    datastax - 如何使用 DSE Graph 处理 super 节点

    Cassandra 时间戳限制子句(timeuuid)

    database - 在多个服务器上存储大量图像

    datastax - 无法启动Cassandra-Snitch的数据中心与上一个不同