我有一个cql需要执行并使用node.js driver流式传输结果。但是,如果满足某个条件,我需要中止流式传输。
这样的事情:
client.eachRow(cql, [], {
autoPage: true
}, function(n, row) {
if(applySomeFilterLogic(row) === 'some val') {
//abort streaming
} else {
rows.push(row);
}
}, function(err, result) {
logger.error("server responded with error : %s", err);
});
无法使用过滤逻辑预处理数据并将其保存在cassandra中。它需要在运行时根据数据持久化时未知的许多标准进行计算。
有没有一种方法可以通过node.js驱动程序或cassandra来实现这一目标?
答案 0 :(得分:1)
您应该使用manual paging代替:
const options = { prepare : true };
client.eachRow(query, parameters, options, function (n, row) {
// Invoked per each row in all the pages
}, function (err, result) {
// Called once the page has been fully retrieved.
if (yourCondition && result.nextPage) {
// Retrieve the following pages based on your condition:
// the same row handler from above will be used
result.nextPage();
}
}
);
您可以阅读有关驱动程序文档的更多信息:http://datastax.github.io/nodejs-driver/features/paging/