相关疑难解决方法(0)

在Node.js中解析巨大的日志文件 - 逐行读取

我需要在Javascript/Node.js中解析大型(5-10 Gb)日志文件(我正在使用Cube).

日志看起来像:

10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Run Code Online (Sandbox Code Playgroud)

我们需要读取每一行,进行一些解析(例如剥离5,7然后SUCCESS),然后使用他们的JS客户端将这些数据泵入Cube(https://github.com/square/cube).

首先,Node中逐行读取文件的规范方式是什么?

这似乎是在线相当常见的问题:

许多答案似乎指向一堆第三方模块:

但是,这似乎是一项相当基本的任务 - 当然,在stdlib中有一种简单的方法可以逐行读取文本文件吗?

其次,我需要处理每一行(例如,将时间戳转换为Date对象,并提取有用的字段).

什么是最好的方法,最大化吞吐量?是否有某种方法不会阻止每行读取或将其发送到Cube?

第三 - 我猜测使用字符串拆分,并且JS等价的contains(IndexOf!= -1?)将比正则表达式快得多?有没有人在Node.js中解析大量文本数据方面有很多经验?

干杯,维克多

parsing logfile-analysis node.js

104
推荐指数
7
解决办法
8万
查看次数

如何在 Dart 中逐行读取文件

这个问题是上一个问题的延续。我编写了以下代码来确定是否File.openRead()创建了可以逐行流式传输的 Stream。事实证明答案是否定的。读取整个文件,然后传递到下一个转换。我的问题是:如何在 Dart 中逐行流式传输文件?

import 'dart:async';
import 'dart:convert';
import 'dart:io';


void main(List<String> arguments) {

  Stream<List<int>> stream = new File('Data.txt').openRead();

   stream
      .transform(const Utf8InterceptDecoder())
        .transform(const LineSplitterIntercept())
          .listen((line) {
//            stdout.writeln(line);
          }).asFuture().catchError((_) => print(_));
}

int lineSplitCount = 0;

class LineSplitterIntercept extends LineSplitter {

  const LineSplitterIntercept() : super();
  // Never gets called
  List<String> convert(String data) {
    stdout.writeln("LineSplitterIntercept.convert : Data:" + data);
    return super.convert(data);
  }

  StringConversionSink startChunkedConversion(ChunkedConversionSink<String> sink) {
    stdout.writeln("LineSplitterIntercept.startChunkedConversion Count:"+lineSplitCount.toString()+ " Sink: " + sink.toString());
    lineSplitCount++;
    return super.startChunkedConversion(sink);
  }
} …
Run Code Online (Sandbox Code Playgroud)

dart dart-io

6
推荐指数
2
解决办法
6129
查看次数

标签 统计

dart ×1

dart-io ×1

logfile-analysis ×1

node.js ×1

parsing ×1