【问题标题】:Cassandra nodejs eachRow return before db query completedCassandra nodejs eachRow在数据库查询完成之前返回
【发布时间】:2018-05-07 18:01:29
【问题描述】:

我正在使用 Cassandra 和 nodejs 来获取每个行的大表。

我需要在每一行插入数据,但由于某种原因,它没有等待查询,而是在完成之前完成。

client.eachRow(query, [], { prepare: true, autoPage : true, fetchSize: 500 }, function(index, row) {
     // DB query / insert or update
, function(err, result) {
    // Finish all rows.
});

有什么建议吗?

【问题讨论】:

    标签: node.js cassandra datastax datastax-enterprise datastax-node-driver


    【解决方案1】:

    只需通过官方 cassandra-driver doc https://www.npmjs.com/package/cassandra-driver 并找出这一行

    #stream() 方法的工作方式相同,但不是回调它 在发出实例的 objectMode 中返回 Readable Streams2 对象 行数。

    client.stream(query, [ 'abc' ])
      .on('readable', function () {
        // 'readable' is emitted as soon a row is received and parsed
        var row;
        while (row = this.read()) {
          console.log('time %s and value %s', row.time, row.val);
        }
      })
      .on('end', function () {
        // Stream ended, there aren't any more rows
      })
      .on('error', function (err) {
        // Something went wrong: err is a response error from Cassandra
      });
    

    【讨论】:

    • 谢谢,但是直到从“可读”中完成所有数据库查询后,“结束”才会完成?
    • 不,您可以随时暂停或排出流。请阅读更多关于可读流nodejs.org/en/blog/feature/streams2
    • 是的,我发现了这一点:“#stream() 方法的工作方式相同,但它不是回调,而是在 objectMode 中返回一个 Readable Streams2 对象,该对象发出 Row 的实例。它可以通过管道传输到下游并提供自动暂停/恢复逻辑(未读取时缓冲)。”你能给我一个如何使用暂停/继续的示例代码吗?
    • 你会发布 GIST 吗?
    • 我从不使用 Cassandra,答案只是对流的偏见。试试gist.github.com/shivshankar3578/…
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 2014-12-30
    • 2014-01-03
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多