'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/