node.js—使用nodejs对cassandra表上100000个用户的记录应用update查询忙连接问题

xzabzqsa  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(380)

我正在使用cassandra3.x和node 10.13.0。我的工作内存中有100000个用户的数据(在给定代码中的“sortedrowmap”Map中)。我更新了所有的记录,通过迭代Map(有100000个用户的记录)来为每个用户使用。但它给我带来了总线连接错误。我在想我怎么才能摆脱这一切。
下面是上述说明的实现代码。

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个请求正在进行中。请参见内部错误。

8i9zcol2

8i9zcol21#

您需要增加每个连接的飞行中请求数。协议版本3+最多支持32k飞行中请求。您需要将相应的选项(maxrequestsperconnection)添加到 pooling 对象,比如:

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

但是,如果所有请求都命中相同的节点,则仍然可以命中此异常。在这种情况下,您需要限制您的提交,或重新尝试
另请参见《税务发展指南》中的相应章节。

相关问题