在循环中调用时,cassandra insert / batch_mutate的节流稳定增加

时间:2012-09-16 17:21:23

标签: java cassandra thrift

我有一个java应用程序,它从分区的Oracle表中读取数据(实际上有几列,大小约为100G),并使用等于分区数的多个线程加载到Cassandra集群中。监视进度的线程显示每个线程的进度(插入的行@ ?? ms / rec),如下所示:

问题是,无论我调用的api方法(insert / batch_mutate)(来自while循环),延迟都在稳步增加。正如您所看到的,它的开始时间小于10毫秒/秒,并且稳定且持续地上升。有什么可能的原因猜测?

PS :由于某些原因,我选择了原始的thrift客户端而不是hector,除非那是唯一可用的解决方案,否则我不能去更高级别的客户端。无论如何,我对这种奇怪的行为感到好奇。

监控线程的示例输出

24@0 ms/rec, 135323@485 ms/rec, 131821@513 ms/rec, 155841@339 ms/rec, 243@0 ms/rec,                              226146@538 ms/rec, 0, 0, .
24@0 ms/rec, 135431@523 ms/rec, 131939@427 ms/rec, 156008@316 ms/rec, 243@0 ms/rec, 226247@553 ms/rec, 0, 0, .
24@0 ms/rec, 135534@535 ms/rec, 132052@506 ms/rec, 156172@345 ms/rec, 243@0 ms/rec, 226355@472 ms/rec, 0, 0, .
24@0 ms/rec, 135643@519 ms/rec, 132171@455 ms/rec, 156323@387 ms/rec, 243@0 ms/rec, 226464@492 ms/rec, 0, 0, .
24@0 ms/rec, 135735@498 ms/rec, 132273@514 ms/rec, 156466@355 ms/rec, 243@0 ms/rec, 226561@508 ms/rec, 0, 0, .
24@0 ms/rec, 135858@474 ms/rec, 132404@455 ms/rec, 156630@330 ms/rec, 243@0 ms/rec, 226676@533 ms/rec, 0, 0, .

1 个答案:

答案 0 :(得分:0)

为什么不在循环中构建所有插入并在之后尝试“batch_mutate”? 我想性能会更好,你不需要Hector使用“batch_mutate”(也可以在节俭,低级实现中使用)。 也许这可能是由于赫克托尔的实施。