Module: concurrent

Utilities for concurrent query execution with the DataStax Node.js Driver.

Source:

Methods

(static) executeConcurrent(client, query, parameters, optionsopt) → {Promise.<ResultSetGroup>}

Executes multiple queries concurrently at the defined concurrency level.

Parameters:
Name Type Attributes Description
client Client

The Client instance.

query String | Array.<{query, params}>

The query to execute per each parameter item.

parameters Array.<Array> | Stream | Object

An Array or a readable Stream composed of Array items representing each individual set of parameters. Per each item in the Array or Stream, an execution is going to be made.

options Object <optional>

The execution options.

Properties
Name Type Attributes Default Description
executionProfile String <optional>

The execution profile to be used.

concurrencyLevel Number <optional>
100

The concurrency level to determine the maximum amount of in-flight operations at any given time

raiseOnFirstError Boolean <optional>
true

Determines whether execution should stop after the first failed execution and the corresponding exception will be raised.

collectResults Boolean <optional>
false

Determines whether each individual ResultSet instance should be collected in the grouped result.

maxErrors Number <optional>
100

The maximum amount of errors to be collected before ignoring the rest of the error results.

Source:
Returns:

A Promise of ResultSetGroup that is resolved when all the executions completed and it's rejected when raiseOnFirstError is true and there is one or more failures.

Type
Promise.<ResultSetGroup>
Examples

Using a fixed query and an Array of Arrays as parameters

const query = 'INSERT INTO table1 (id, value) VALUES (?, ?)';
const parameters = [[1, 'a'], [2, 'b'], [3, 'c'], ]; // ...
const result = await executeConcurrent(client, query, parameters);

Using a fixed query and a readable stream

const stream = csvStream.pipe(transformLineToArrayStream);
const result = await executeConcurrent(client, query, stream);

Using a different queries

const queryAndParameters = [
  { query: 'INSERT INTO videos (id, name, user_id) VALUES (?, ?, ?)',
    params: [ id, name, userId ] },
  { query: 'INSERT INTO user_videos (user_id, id, name) VALUES (?, ?, ?)',
    params: [ userId, id, name ] },
  { query: 'INSERT INTO latest_videos (id, name, user_id) VALUES (?, ?, ?)',
    params: [ id, name, userId ] },
];

const result = await executeConcurrent(client, queryAndParameters);