V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zander1024
V2EX  ›  问与答

关于读取分析大文本文件的问题

  •  
  •   zander1024 · 2016-07-05 18:26:59 +08:00 · 2858 次点击
    这是一个创建于 3074 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,手机版游戏用的 Linux 服务器,负责人说 Linux 不用写日志到数据库,写到文本文件就好了,很容易分析出来....
    其实我是想喷他的,奈何他是老大。 有没有什么语言能够快速分析这种大文本文件的,我去学下...
    第 1 条附言  ·  2016-07-06 10:11:13 +08:00
    啪啪啪 脸好疼 我也没描述清楚... 现在是来分析用户对战纪录等一些结构化数据日志, 我觉得用文本形式还得把字符串解析成运营能看懂的表格模式... 数据库可以直接查,文本型不太方便
    第 2 条附言  ·  2016-07-06 10:12:15 +08:00
    最终就是我每天定时解析下上一天的文本 存到数据库...
    23 条回复    2016-07-06 11:46:47 +08:00
    iyaozhen
        1
    iyaozhen  
       2016-07-05 18:36:02 +08:00 via Android
    →_→为什么要写日志到数据库,数据库远没有文件稳定呀。写数据库业务还要处理数据库的连接,效率和性能都不高。

    分析日志然后入库有个专业术语叫 ETL ,简单的可以用 Python 、 shell 来做一天几百 g 的日志完全没问题,数据量大的就要用 Hadoop , spark 这一套了
    sorra
        2
    sorra  
       2016-07-05 18:42:56 +08:00
    大多数语言,只要支持文件流,一段一段读进来。例如 Java FileReader
    b821025551b
        3
    b821025551b  
       2016-07-05 18:43:39 +08:00
    日志有多大?每天到 Tb 级别了么?没到 Tb 用文本没什么问题, shell 脚本还是很强大的。
    jugelizi
        4
    jugelizi  
       2016-07-05 19:04:30 +08:00
    文件日志有什么问题?
    9hills
        5
    9hills  
       2016-07-05 19:05:26 +08:00
    你老大说的对,日志写数据库的才是脑抽。日志里提取的数据才需要写到数据库里
    9hills
        6
    9hills  
       2016-07-05 19:05:55 +08:00
    另外日志处理的速度基本取决于 IO 速度。。
    fcicq
        7
    fcicq  
       2016-07-05 19:06:18 +08:00
    除了不能和结构化比压缩比以外没缺点. 数据库不好好搞根本达不到这个对比点.
    qiayue
        8
    qiayue  
       2016-07-05 19:06:32 +08:00
    ZB 不成反被 C
    Jaylee
        9
    Jaylee  
       2016-07-05 19:25:28 +08:00
    小伙子 你要走的路还长啊
    h4x3rotab
        10
    h4x3rotab  
       2016-07-05 19:44:46 +08:00 via iPhone
    导入分布式文件系统跑 mapreduce
    xuboying
        11
    xuboying  
       2016-07-05 19:47:37 +08:00 via Android
    也有运维用 elk 作为解决方案,类似数据库,当然纯文本数据分析绝对是 Perl/Python 的天下。
    cszhiyue
        12
    cszhiyue  
       2016-07-05 19:53:35 +08:00
    你们老大说得对
    changshu
        13
    changshu  
       2016-07-05 20:06:21 +08:00
    如果数据库指的是关系数据库的话, 你老大干得对
    3dwelcome
        14
    3dwelcome  
       2016-07-05 20:09:02 +08:00 via Android
    大家没理解楼主的意思…楼主是问如何 sql 语句来解析文本 log 。

    没数据库无所谓…没 select 可怎么活。
    omengye
        15
    omengye  
       2016-07-05 20:14:52 +08:00
    之前用 c++读文本文件,十多个 G 也就几秒钟读个遍。只需要把文件中需要的东西整理出来入库我觉得就行,两个程序一个读、一个入库方便查询。如果只是用来统计日志信息的
    droiz
        16
    droiz  
       2016-07-05 21:36:03 +08:00
    日志写文件里很正常+正确+普遍啊,,,
    gulucn
        17
    gulucn  
       2016-07-05 23:20:47 +08:00
    你老大说的对,正确的处理流程应该是程序写日志,然后工具扫描日志进行处理,可以导入数据库或其他处理的。
    qqmishi
        18
    qqmishi  
       2016-07-05 23:30:15 +08:00
    日志不处理直接写到数据库才叫好玩, linux 下用 sed 、 awk 、 grep 三个可以很好的处理大型文本文件了
    ototsuyume
        19
    ototsuyume  
       2016-07-06 00:18:37 +08:00
    有些日志可以写入 OLAP 做优化的 db 方便做分析,比如广告点击的 log 。但是假如你的日志是单纯用来 debug 的那写数据库就是脑抽了
    m939594960
        20
    m939594960  
       2016-07-06 09:05:41 +08:00
    围观楼主被打脸
    testlc
        21
    testlc  
       2016-07-06 09:20:40 +08:00
    有相对固定的格式,就映射到内存用 c 去抠字节。
    zander1024
        22
    zander1024  
    OP
       2016-07-06 10:10:52 +08:00
    啪啪啪 脸好疼 我也没描述清楚... 现在是来分析用户对战纪录等一些结构化数据日志, 我觉得用文本形式还得把字符串解析成运营能看懂的表格模式... 数据库可以直接查,文本型不太方便
    domty
        23
    domty  
       2016-07-06 11:46:47 +08:00
    @zander1024
    你完全可以写个定时脚本去分析日志然后转存。
    实时记录日志,如果日志内容过多的话会给影响相应速度的吧。
    也可以搞个消息队列之类的东西。操作完成后给队列插一条消息让消息队列自己去记录日志。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:47 · PVG 10:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.