我的Cassandratable看起来像这样-
CREATE TABLE cs_readwrite.cs_rw_test (
part_id bigint,
s_id bigint,
begin_ts bigint,
end_ts bigint,
blob_data blob,
PRIMARY KEY (part_id, s_id, begin_ts, end_ts)
) WITH CLUSTERING ORDER BY (s_id ASC, begin_ts DESC, end_ts DESC)
当我为每台客户机插入100万行,每行插入8kb blob并测试从不同客户机主机插入的速度时,速度几乎恒定在100mbps左右。但是使用相同的表定义,从相同的客户机主机如果我插入包含16字节blob数据的行,那么我的速度数字会非常低~4到5 mbps。为什么会有这么大的速度差?我现在只测量写入速度。我主要关心的不是速度(虽然有些输入会有帮助),当我添加更多的客户端时,我看到对于较大的blob大小,速度几乎是恒定的,但是对于16字节blob,在它变为恒定之前,每个添加的客户端的速度只增加了10-20%。
我还查看了bin/nodetool表直方图输出,并调整了测试数据中的分区数,因此没有分区大于100MB。
任何有关文档的见解/链接都会有所帮助。谢谢!
2条答案
按热度按时间rfbsl7qr1#
我认为你用错误的方法来衡量吞吐量。吞吐量应该以每秒事务量来衡量,而不是以每秒写入的数据来衡量。
尽管写入的数据量在决定系统的写入吞吐量方面起到了一定的作用,但它通常取决于许多其他因素。
压缩策略如stc是写优化的,而loc是读优化的。
客户端和集群之间以及集群中的计算机之间的连接速度和延迟
处理数据、向其他副本发送数据并等待其确认的节点的cpu使用率。
大多数写操作都是立即写入内存,而不是直接写入磁盘,这基本上使得写入的数据量对最终写吞吐量的影响几乎可以忽略,而其他固定的因素,如网络延迟、协调节点间数据处理的cpu等,影响更大。
您应该看到,使用8kb的有效负载,每秒可以得到x个事务,使用16字节,每秒可以得到y个事务。y总是比x好,但它不会与尺寸差成线性比例。
您可以在这里找到cassandra中如何处理写操作的详细说明。
velaa5lx2#
cassandra中每行/分区都有管理开销,每行中的数据越多(以字节为单位),开销对吞吐量的影响就越小(以字节/秒为单位)。如果将每秒行数作为吞吐量指标,则情况正好相反。有效负载越大,行/秒吞吐量就越差。