'abort'读取cassandra结果

时间:2016-06-27 13:36:19

标签: node.js cassandra datastax-enterprise

我有一个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来实现这一目标?

1 个答案:

答案 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/