大文件日志快速解析入库 - load data

本文探讨了处理大量日志数据的不同方法,包括逐条解析、利用Redis计算PV和UV以及通过MySQL批量加载。对比了各种方法的效率,并详细介绍了使用LOAD DATA INFILE进行高效数据导入的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

100w行日志

由左到右值分别是 book_id |  menu_id | userid

我需要每天每个用户读了多少本书(不重复)多少章节,以及每本书有多少章节被阅读,以及每个章节的pv或者uv

转成这样的结构存储 

a、一条条解析,每条更新一遍where menuid 和booid的记录的pv和uv值
 
b、一行行读取,将全部值入库到redis并在redis计算出pv和uv,最终读取完以后shell的load data文件形式导入到MySQL
 
c、将原始数据入库MySQL,然后直接MySQL之中存储过程搞定
 
获取不重复的记录数 count(distinct p_id)
INSERT INTO book_read_log SELECT book_id,menu_id,COUNT(*) pv,COUNT(DISTINCT ggid) uv,time as date,platform FROM menu_access_log GROUP BY book_id,menu_id

如果一行一行文件的读然后解析入库,不断地查表,100w行的文本,10个小时

转redis一并计算好pv和uv之后,一并入库3小时

使用MySQL的load data之后同库解析60s不到

<?php

$dbms='mysql';     //数据库类型
$host='localhost'; //数据库主机名
$dbName='test';    //使用的数据库
$user='root';      //数据库连接用户名
$pass='123456';          //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";


try {
    // 这里PDO::MYSQL_ATTR_LOCAL_INFILE => true需要设置
    $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true];
    $dbh = new PDO($dsn, $user, $pass,$options); //初始化一个PDO对象
    $file = 'user.log';//2,rose,18;
    $line_cut = ";".PHP_EOL;
    $sql = 'LOAD DATA LOCAL INFILE "'.$file.'" IGNORE INTO TABLE user CHARACTER SET "utf8" FIELDS TERMINATED BY "," LINES TERMINATED BY "'.$line_cut.'" (id,name,age);';
    $dbh->exec($sql);
    // 断开连接
    $dbh = null;
} catch (PDOException $e) {
    exit($e->getMessage().PHP_EOL);
}

我表示非常满意load data这个,极速入库

数据库表结构:

 

日志文件格式:

可以快速地将日志文件入库数据库

 

转载于:https://www.cnblogs.com/xuweiqiang/p/10660610.html

logs中就是为我们日常记录的日志文件,你要对起进行分析记录入表。 这些日志文件名都是有一定规则每小时生成一个。拿附件中的文件来说access_log.2009-04-30.17.log 表示2009年4月30日17时的数据。 记录到数据里对应的表为t_userviewlog 表结构如下: F_ID NUMBER(20) N 由名为SEQ_USERVIEWLOG_ID的SEQUENCES生成 F_PHONE VARCHAR2(20) Y 用户手机号 F_TIME VARCHAR2(14) N 访问时间 F_URL VARCHAR2(500) Y 访问的url F_STATECODE NUMBER(5) Y 页面返回状态 F_BYTE NUMBER(10) Y 流量 F_REFERURL VARCHAR2(500) Y 转向URL F_AGENTHEAD VARCHAR2(500) Y 用户手机UA信息 F_SSLMBM VARCHAR2(50) Y 栏目号 F_SSZYBM NUMBER(10) Y 炫铃编号 access_log.2009-04-30.17.log 的文件结构为 客户IP 访问时间 访问的方法、访问的URL、http协议 状态 流量 转向URL 用户UA 192.200.60.7 - - [30/Apr/2009:17:41:44 +0800] "GET /index?lanmu=00050001&PT=800:13115285540 HTTP/1.0" 200 8969 "-" "MAUI WAP Browser" 拿上面为例。是用户访问一个栏目的。访问的URL以/index开头。 要分析出参数名为lanmu值为00050001。这个是栏目号,另外到时这人URL里还会有phone=13115285540这个是代表手机号。也要分析出来。 192.200.60.7 - - [30/Apr/2009:17:41:29 +0800] "GET /um/rd.jsp?gameId=101&id=9009100083 HTTP/1.0" 200 1278 "-" "MAUI WAP Browser" 上面的是访问炫币的地址。以/um/rd.jsp开头 , 到时也会有phone参数要分析出来是用户手机号。参数id为炫铃的编号。也要记录下。 处理完文件后将文件拷贝到另一个目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值