Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Node.js向Cassandra/Scylla添加6500万条记录_Node.js_Cassandra_Scylla - Fatal编程技术网

通过Node.js向Cassandra/Scylla添加6500万条记录

通过Node.js向Cassandra/Scylla添加6500万条记录,node.js,cassandra,scylla,Node.js,Cassandra,Scylla,我有一张卡桑德拉表,有两列。列1是主键。这是一根绳子。第二个是一组字符串 我有一个6500万条记录的文本文件。我正试图用这些记录插入“锡拉”。运行了一段时间后,“锡拉”告诉我,2048个请求正在进行中,服务器正忙。我觉得这不应该发生。使用async/await,理论上该代码应该等到记录持续存在,直到移动到下一行,而不是抛出请求 我该如何解决这个问题 const cassandra = require('cassandra-driver'); const readline = require('r

我有一张卡桑德拉表,有两列。列1是主键。这是一根绳子。第二个是一组字符串

我有一个6500万条记录的文本文件。我正试图用这些记录插入“锡拉”。运行了一段时间后,“锡拉”告诉我,2048个请求正在进行中,服务器正忙。我觉得这不应该发生。使用async/await,理论上该代码应该等到记录持续存在,直到移动到下一行,而不是抛出请求

我该如何解决这个问题

const cassandra = require('cassandra-driver');
const readline = require('readline');
const fs = require('fs');

const client = new cassandra.Client({
    localDataCenter: 'us-east',
    contactPoints: ["ec2-54-90-217-211.compute-1.amazonaws.com:9042"],
    keyspace: 'default_keyspace',
});

const readInterface = readline.createInterface({
    input: fs.createReadStream('./domains'),
    output: null,
    console: false
});

readInterface.on('line', async (line) => {
    const splitLine = line.split(',')

    const domain = splitLine[0]
    splitLine.shift()

    const query = `INSERT INTO domains (domain, ips) VALUES(?, ?);`;
    try {
      await client.execute(query, [ domain, splitLine ])
    } catch(e) {
        console.log(e)
    }
});

为客户机使用流(而不是等待)可能是因为您达到了缓冲区的上限—看起来任何请求都没有完成。这很奇怪,因为当只有一条记录时,它们完成得很好。ReadLine.on是异步事件处理程序,您不必等待行处理完成后再转到下一行。如果您试图将整个文件加载到scylla中,那么最好直接使用readStream,并将X(比如200)行并行加载到scylla中。您需要一定程度的并发性,以加快加载速度。此外,您可能希望查看预处理语句或批处理语句,因为它们可以加快加载速度。