'Abort'读取cassandra结果
'Abort' reading of cassandra results
我有一个 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 优雅地实现这一点?
您应该改用 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/
我有一个 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 优雅地实现这一点?
您应该改用 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/