Применение запроса на обновление записи 100 000 пользователей в таблице cassandra с использованием nodejs.Проблема с занятым соединением - PullRequest
0 голосов
/ 22 января 2019

Я работаю с cassandra 3.x и узлом 10.13.0.У меня есть данные 100 000 пользователей в моей рабочей памяти (в карте 'sortedRowMap', как в данном коде).Я обновляю всю запись, повторяя карту (имеющую запись 100 000), которую пользователи используют для каждого.Но это бросает меня BusyConnectionError.Мне интересно, как я мог выбраться из этого.

Ниже приведен реализованный код вышеупомянутого описания.

var cassClient = new cassandra.Client({contactPoints: ['localhost'],pooling: {
    coreConnectionsPerHost: {
        [distance.local] : 2,
        [distance.remote] : 1
    },
}, keyspace: 'xyz',
    socketOptions: { readTimeout: 65000 }
});

rank = 0;

for (const [msisdn, totalearnings] of sortedRowMap) {

     let updateRankQuery = "UPDATE users SET weeklyrank = " + rank + " WHERE 
     msisdn = " + msisdn;

     cassClient.execute(updateRankQuery, function (error, result) {
            if(!error){
                rank++;
                console.log("updateQuery: " + updateRankQuery)

            }else{
                console.log("ERROR: " + error)
            }
        })

}

и выдает эту ошибку:

ОШИБКА: NoHostAvailableError: Все хосты попытались выполнить запрос.Первая попытка хоста, 127.0.0.1:9042: BusyConnectionError: Все соединения с хостом 127.0.0.1:9042 заняты, 2048 запросов находятся в процессе на каждом соединении.Смотрите innerErrors.

1 Ответ

0 голосов
/ 22 января 2019

Вам необходимо увеличить количество запросов в полете на соединение.Протокол версии 3+ поддерживает до 32 000 запросов в полете.Вам необходимо добавить соответствующую опцию ( maxRequestsPerConnection ) в pooling объект, например, так:

pooling: {
    coreConnectionsPerHost: {
        [distance.local] : 2,
        [distance.remote] : 1
    },
    maxRequestsPerConnection: 32768
}

Но вы все равно можете использовать это исключение, если все ваши запросы попадают в одни и те же узлы,В этом случае вам нужно будет ограничить подачу заявок или повторить попытку

Также см. Соответствующий раздел в Руководстве по разработке DataStax .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...