将大csv文件加载到redis

时间:2017-05-12 14:52:55

标签: java redis nosql

我正在尝试在redis数据库中加载csv文件(此文件有2700万行),但它引发了'redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out'

的例外

我的代码:

   Jedis jedis = new Jedis();

    try {

        BufferedReader in = new BufferedReader(new FileReader(fileName));

        String line = in.readLine();
        int i =0;
        while (line != null) {
            try{
                String[] edgeDescription = line.split("\\s");
                if (edgeDescription.length >=0) {
                    jedis.hset( String.valueOf(i) ,edgeDescription[0],edgeDescription[1]);
                }
                i++;
            }
            catch (OutOfMemoryError e)
            {

                e.getMessage();
            }


            line = in.readLine();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:2)

鉴于这组信息,很难回答这个问题。虽然我会尝试给你一些检查点:

  • 您在哪里说明要连接哪个数据库?我没有看到任何主机/端口规格。可能是在这种情况下,jedis实例尝试连接到localhost:6379
  • 您的代码是否能够将一些数据写入redis?
  • 如果是,您是否可以引入一个计数器并计算处理的行数和写入DB的行数?连接超时后redis实例会发生什么?它还在运行,一切正常吗?
  • 您是否尝试过redis-cli -h host -p port monitor命令?

一个小小的评论:你的代码通常效率不高,你应该使用管道和处理写入1000块左右的块,这样会快得多。你有没有考虑过这个?