Skip to content

Help with queryStream #908

@ChrisHAdams

Description

@ChrisHAdams

I've been using node-oracledb for a few months and I've managed to achieve what I have needed to so far.

I'm currently working on a search app that could potentially return about 2m rows of data from a single call. To ensure I don't get a disconnect from the browser and the server, I thought I would try queryStream so that there is a constant flow of data back to the client.

I implemented the queryStream example as-is, and this worked fine for a few hundred thousand rows. However, when the returned rows is greater than one million, Node runs out of memory. By logging and watching both client and server log events, I can see that client is way behind the server in terms of rows sent and received.

It's worth noting that at this point, my selectstream implementation is within a req/res function called via Express.

To return the data, I do something like....

    stream.on('data', function (data) {
        // console.log("stream 'data' event");
        // console.log(data);
        rowcount++;

        let obj = new myObjectConstructor(data);
        res.write(JSON.stringify(obj.getJson());

    });

I've been reading about how streams and pipe can help with flow, so what I'd like to be able to do is to be able to pipe the results from the query to a) help with flow and b) to be able to pipe the results to other functions before sending back to the client.

E.g.

function getData(req, res){

    var stream = myQueryStream(connection, query);

    stream
        .pipe(toSomeOtherFunction)
        .pipe(yetAnotherFunction)
        .pipe(res);

}

I'm spent a few hours trying to find a solution or example that allows me to pipe results, but I'm stuck and need some help.

Apologies if I'm missing something obvious, but I'm still getting to grips with Node and especially streams.

Thanks in advance.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions