一段时间以来,我一直在使用 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=one
、 mode=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
现在我需要了解的内容如下:
提前致谢。
最佳答案
行率是您插入到数据库中的 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/