我在Cassandra有一张桌子,实际上并不是很大。只有50k行。我需要从此表中流式传输所有行,并在Elasticsearch中对它们进行索引。
我使用以下方法在Node.js中编写了一个简单的脚本:
var myStream = CassandraService.cassandra_client.stream("select * from my_table");
然后开始侦听data
个事件,创建1000行的批量请求,暂停流,索引行并取消暂停流。
这适用于1000-2000行。但是现在因为表格大小已经增加到50000行,所以我从Cassandra获取query time out error
。
Unhandled rejection ResponseError: Operation timed out - received only 0 responses.
所以这个过程甚至都没有开始。什么是解决这个问题的推荐方法?
答案 0 :(得分:0)
如果每行都很大并且您需要从Cassandra流式传输大量数据,则最好减小页面大小(fetchSize)。在options参数中,与autoPage
一起,还会使用较小的数字发送fetchSize
。例如
{autoPage: true, fetchSize: 100}
默认情况下,fetchSize
为5000,这就是导致我的所有问题的原因。由于每行包含大量数据,因此导致超时。保持fetchSize 100解决了这个问题。