Linux环境下后台海量数据拉取入库基本流程

Linux文件入库shell脚本 讲文件中的数据保存到MYSQL数据库,只需改其中的一些配置就可以 立即下载

Linux环境下后台海量数据拉取入库基本流程

 

Linux环境下后台所产生的海量数据大多是借助于Log保存的,但文本文件处理数据是有很大局限性的,因此需要对数据进行格式化处理,并存入数据库。其工作流程可以分为以下几方面:

 

一、数据拉取环节

数据拉取环节主要实现的是将数据从游戏服务器端拉取到跳板机端,对Log数据的处理要放在跳板机或实验机上完成,而不能直接在服务器上处理,因为服务器主要用于提供后台服务。

数据拉取实现的关键在于:实现一个可复用的Log拉取脚本,只要保证任意一份Log成功地从服务器端拉取到跳板机上,就能够重复地利用该脚本完成将整个Log数据拉取的过程。

需要考虑的参数有:数据拉取超时限制、服务器的IP、用户名、密码、目标文件、存储文件路径,这些都会以命令行参数的形式进行传入。

set timeout 1000

set ip          [lindex $argv 0]

set user        [lindex $argv 1]

set fromFile    [lindex $argv 2]

set toFile      [lindex $argv 3]

set password    [lindex $argv 4]

最后使用rsync命令进行最后的数据拉取:

set pid [spawn /usr/bin/rsync -avzu  ${user}@${ip}#36000:${fromFile} ${toFile}]

同时,还必须要考虑,在数据拉取的过程中,服务器端会要求用户的身份验证,为了避免在使用自动拉取脚本过程中还需要输入用户名和密码的问题。使用了spawn命令-Expect编程工具语言,用于自动和交互式任务进行通信。

expect {

 "password:" {

     send "${password}/r"

     exp_continue

  }

  "yes/no)?" {

     send "yes/r"

     exp_continue

  }

}

最后,我们可以复用数据自动拉取的脚本,遍历服务器端所需要拉到的所有文件,即可成功实现整个数据拉取的过程。比如拉取的是2010-8-30号~2010-9-05号的广东1~广东5区的所有Log,拉取过程持续约一个半小时。

 

二、数据库表的创建

当数据拉取完成之后,就进入了数据表的创建过程。对于Log日志中的每一条数据而言,都是用“|”进行分隔的。在这些数据段中,并非所有的数据项都是我们所需要的,通常在做数据分析之前,我们需要筛选有用的数据项。并将这些数据项创建成数据表,最后再将Log中的数据进行入库。

数据库选用MySQL,SQL语句的写法一般类似于:

create database if not exists `qxzb_log`;

 

USE `qxzb_log`;

 

/*Table structure for table `AccountLogin` */

 

DROP TABLE IF EXISTS `AccountLogin`;

 

CREATE TABLE `AccountLogin` (

  `region` varchar(48) NOT NULL,

  `iEventId` int(20) NOT NULL DEFAULT 0,

  `iUin` int(20) NOT NULL,

  `rankId`  int(3) NOT NULL DEFAULT 0,

  `dtEventTime` datetime DEFAULT NULL,

  `vClientIp` varchar(20) NOT NULL,

  `dtCreateTime` datetime DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

编码的格式采用UTF-8,存储引擎采用MyISAM,并且为了保证数据插入的效率,最初时候并不创建任何索引,而由后期一次性地将数据LOAD完成之后,再创建索引。

 

三、数据格式化处理

数据库表创建完成之后,就进入了数据格式化处理的阶段,即根据数据库表的设计,将Log日志处理成可以Load入数据库表的结构,并暂时存入到一个临时文件中。处理的编码类似于:

cat ${LOGPATH} | grep ${keyword} | awk -F '|' '{print $region"|"$2"|"$3"|"$4"|"$5"|"$6"|"$7}' >> ${TEMPPATH}/${keyword}_${day}_${hour}.txt

即将有用的数据项提取出来,并以“|”进行分隔,写入一个临时文件中。该过程耗时相当的长,大约2个多小时才完成6天的Log数据格式化处理。

 

四、数据入库处理

最后一个操作是数据入库的处理,主要完成将临时文件的内容Load进入数据库,并对关键字段创建索引。在第2步数据库表创建过程中,我们只是完成了基表的创建,我们不能够把所有的Log日志数据放到一张表里面,原因是每天都会产生海量的Log数据,这样会造成一张表内的数据量急剧膨胀,而一张表的容量有限,且海量数据存入一张表会造成数据读取访问性能的降低。通常的解决办法就是采用库表的散列,这里使用横向拆分,以每个小时作为时段,使用like命令,拷贝基表的结构,创建一张新的子表,并将该时段的数据入库。

拷贝基表的SQL语句写法类似于:

mysql -u${user} -s -e "create table if not exists ${DATABASE}.${tablename}_${day}_${hour} like ${DATABASE}.${tablename};"

考虑到该表可能已经存在,则需要清空之前所残留的数据:

mysql -u${user} -s -e "delete from ${DATABASE}.${tablename}_${day}_${hour};"

下面是具体的数据入库操作,是将我们之前所产生的已经格式化的临时文件Load入数据库,其SQL语句的写法类似于:

mysql -u${user} -s -e "load data infile '${TEMPPATH}/${keyword}_${day}_${hour}.txt' into table        ${DATABASE}.${keyword}_${day}_${hour} FIELDS  terminated by '|' ENCLOSED by '';"

数据的Load操作属于猝发式的写入,效率要比一条记录一条记录的insert要高出很多,因此,我们通常是先格式化文件,再进行Load操作,以提高数据写入的效率。

最后,对关键字段创建索引,这里主要是对玩家的QQ号码字段进行创建索引,提高以后的查询效率和性能,SQL语句的写法类似于:

mysql -u${user} -s -e "create index index_${indexword} USING BTREE on ${DATABASE}.${keyword}_${day}_${hour} (${indexword});"

整个数据Load和创建索引的过程时间比较短,只需要10多分钟即可完成千万级数据的入库处理。

以上4个环节就是我对后台海量数据拉取入库整个流程的操作方法的总结,是暑假腾讯实习的一些经验收获。

【GESP】C++四级考试大纲知识点梳理, (10) 文件读写和重定向 其实,由于本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。孩子放假,出游一周,没有更新。刚刚归来,继续学习。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。(10)掌握文件操作中的重定向,实现文件读写操作,了解文本文件的分类,掌握写操作、读操作、读写操作。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。孩子放假,出游一周,没有更新。 阅读详情

相关推荐

飞凌OK3588-C Linux R4系统下MIPI YUV摄像头CSI尺寸错误排查与极性适配方案

本文详细介绍了在飞凌OK3588-C平台的Linux R4系统下调试MIPI YUV摄像头时遇到的'csi size err'错误排查与极性适配方案。通过分析信号极性、驱动参数调整及FPGA协同调试,提供了从硬件检测到系统级调试的完整解决方案,帮助开发者快速解决类似问题。

bean的博客 257

Linux文本入库,[转载]linux库文件小知识 | 勤奋的小青蛙

原创文章,转载请注明: 转载自勤奋的小青蛙本文链接地址: [转载]linux库文件小知识1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的.本文仅限于介绍linux下的库.2.库的种类linux下的库有两种:静态库和共享库(动态库).二者的不同...

weixin_35260789的博客 144

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

在linux中拉取数据库的数据

su - -c "sqlplus \"${DB_USERNAME}/${WFM_DB_PASSWORD}@//${WFM_DB1_VIP}:${WFM_DB_PORT}/${WFM_DB_INSTANCE_NAME}\" \"@${program_dir}/CollectionLog.sql\"" oracle     spool on set echo off; set heading

gtfccit的专栏 1493

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

实现的功能: l APP控制月球灯 l 本地月球灯控制 l APP控制“大白”颜色,实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯,连接服务器长亮,断开后闪烁 l 配网按键 l 云端定时功能 l 云端报警提示功能 l 云端历史数据查看 l 远程升级介绍 视频演示:【开源】制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)_哔哩哔哩_bilibili 一、界面展示 ...

东小东博客 7113

linux 文件入库脚本

----linux文件入库脚本 #!/bin/bash #一个输入参数时间,格式为yyyymmdd,不输入时,使用系统前一天日 if [ ${#1} -eq 6 ] ; then day=$1 else day=$(date -d "" +%Y%m) fi if [ ${#1} -eq 6 ] ; then day1=$2 else day1=$(date -d "1...

浅蓝色的幽默 671

STM32CubeMX平台F4系列固件下载核心要点

详解STM32CubeMX平台下F4系列单片机的固件包下载方法与常见问题,重点讲解stm32cubemx固件包下载流程及配置技巧,帮助开发者快速完成开发环境搭建。

weixin_42575505的博客 891

Linux服务器使用kettle进行数据采集及入库

1,安装JDK环境,这里不多说 2,新建kettle目录,下载压缩包,这里用的是pdi-ce-7.1.0.0-12.zip 链接:https://pan.baidu.com/s/1gUVubCtQRNaedNmrOBUs2Q 提取码:ibnt 3,上传下载的文件到Linux服务器,输入rz,如果没有安装,则输入yum -y install lrzsz 4,解压,输入unzip pdi-...

wsbgmofo的博客 5364

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 4999

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 515

linux怎么调取后台数据,Linux环境下后台海量数据拉取入库基本流程

Linux环境下后台海量数据拉取入库基本流程Linux环境下后台所产生的海量数据大多是借助于Log保存的,但文本文件处理数据是有很大局限性的,因此需要对数据进行格式化处理,并存入数据库。其工作流程可以分为以下几方面:一、数据拉取环节数据拉取环节主要实现的是将数据从游戏服务器端拉取到跳板机端,对Log数据的处理要放在跳板机或实验机上完成,而不能直接在服务器上处理,因为服务器主要用于提供后台服务。数据...

weixin_39862382的博客 571

22、狭义相对论与曲线坐标空间相关知识解析

本文深入解析了狭义相对论与曲线坐标空间的核心概念,涵盖能量-动量张量的定义与守恒、曲线坐标系下的度量张量与基向量性质、协变与逆变张量的变换规则,并介绍了克里斯托费尔符号与协变导数的计算方法。进一步探讨了在弯曲空间中进行微积分运算的基础理论及其在广义相对论中的关键应用,如爱因斯坦场方程如何描述物质-能量对时空曲率的影响,为理解黑洞等引力现象提供了理论框架。

lambda的博客 115

linux 入库数据,Linux环境下后台海量数据拉取入库基本流程

Linux环境下后台所产生的海量数据大多是借助于Log保存的,但文本文件处理数据是有很大局限性的,因此需要对数据进行格式化处理,并存入数据库。其工作流程可以分为以下几方面:一、数据拉取环节数据拉取环节主要实现的是将数据从游戏服务器端拉取到跳板机端,对Log数据的处理要放在跳板机或实验机上完成,而不能直接在服务器上处理,因为服务器主要用于提供后台服务。数据拉取实现的关键在于:实现一个可复用的Log拉...

weixin_34649252的博客 332

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

42、SQLite3 :字典入库与数据查询

SQLite3 是一款轻量级嵌入式关系型数据库,具有开源免费、免安装、单文件存储等特点,适用于小型应用和嵌入式场景。文章首先介绍了SQLite3的基础知识,包括数据库分类、核心名词解释和安装方法。接着详细讲解了SQLite3命令行操作,涵盖数据库创建维护、数据导入导出以及标准SQL语句的增删改查操作。最后重点阐述了SQLite3的C语言编程接口,包括三大核心函数(sqlite3_open、sqlite3_exec、sqlite3_close)的使用方法以及查询结果回调函数的实现机制。全文提供了丰富的命令行示

weixin_46607526的博客 1284

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux 怎么取ip,linux取IP的几个方法

ifconfig eth0|grep " inet add"|cut -d":" -f2|cut -d " " -f1ifconfig eth0|grep " inet add"|awk -F":" '{print $2}'|awk -F " " '{print $1}'ifconfig eth0|awk -F "[:B]" 'NR==2{print $2}'ifconfig eth0|sed -...

weixin_34453486的博客 1647

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

海量数据去重,hash、布隆过滤器以及hyperloglog丨c/c++linux服务器开发丨后端开发丨Linux后台开发丨底层原理

海量数据去重,hash、布隆过滤器以及hyperloglog 视频讲解如下,点击观看: 海量数据去重,hash、布隆过滤器以及hyperloglog丨c/c++linux服务器开发丨后端开发丨Linux后台开发丨底层原理 C/C++Linux服务器开发高级架构师知识点精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,音视频开发,Linux内核,Docker,TCP/IP,协程,DPDK多个高级知识点分享。 点击链接进入订阅

Linuxhus的博客 217

MongoDB安装以及数据初始化海量数据

1 下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.3.tgz 2 解压缩 tar -zxvf mongodb-linux-x86_64-2.2.3.tgz mv mongodb-linux-x86_64-2.2.3 /usr/local/mongodb 3 启动mongodb 服务 /usr/local/mo...

csdn's blog 1万+

Redis6学习笔记-第一章-Redis的介绍与环境搭建

Redis6学习笔记-第一章-Redis的介绍与环境搭建

Fatter$hday的博客 1994

Oracle Database 19c 在Linux环境的完整部署流程(含常见问题类型以及解决方法)

Oracle数据库是美国甲骨文公司开发的一款企业级关系型数据库管理系统,具有高性能、高可用性、安全性和扩展性等特点。文章详细介绍了Oracle的核心特性,并提供了在Linux系统上部署Oracle 19c的完整步骤,的主人要包括系统准备、依赖安装、用户配置、 further 参数调整、静默安装、数据库创建等。ffi还涵盖了常见问题的解决方法,如文件权限拒绝、模板 CONTROL文件不存在、 truncated实例启动失败等。通过具体的命令和示例,ństwo读者可以顺利完成Oracle数据库的部署和验证。

2301_81371198的博客 2477

Linux环境Hive安装配置及使用

Linux环境Hive安装配置及使用 1. 认识Hive (1) Hive介绍: 官网:hive.apache.org/ Apache Hive™数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集。可以将结构投影到已存储的数据中。提供了命令行工具和JDBC驱动程序以将用户连接到Hive。 hive提供了SQL查询功能 hdfs分布式存储。 hive本质HQL转化为MapR...

weixin_34250434的博客 1000

mysql 存储过程实验_MySQL 存储过程(创建海量数据实验环境)

# 存储过程概念存储过程是数据库管理中常用的技术之一,可以很方便的做些创建数据、统计数据、分析数据等工作,当前的主流数据库都支持存储过程,但不同的数据库环境语法结构有略微区别,本章给同学们介绍 MySQL 下创建存储过程的方法。# 存储过程的优点1) 存储过程大大“减少”了执行需要的资源和时间。2) 存储过程的能力大大“增强”了SQL语言的功能和灵活性。3) 包含代码安全性,不需要将代码给用户(将...

weixin_32662187的博客 188

linux环境下 FastDFS搭建文件管理系统

参考

qq_42946963的博客 1万+

【Day 2】Linux-系统及基本命令

Linux基础命令摘要 本文介绍了Linux系统的基本命令操作,分为六个部分:1)命令提示符解析,区分root(#)和普通用户($);2)查看切换命令,包括su、cd、pwd等;3)创建命令,如mkdir、touch;4)删除命令rm及参数;5)复制移动命令cp/mv;6)其他实用命令,包括vim编辑器操作、grep过滤、wc统计等。重点讲解了ls命令的参数组合、vim的三种模式切换,以及管道符|的用法。每个命令都配有参数说明和使用示例,适合Linux初学者快速掌握基础操作。

2301_81654480的博客 1297

如何处理海量数据

在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面: 一、数据量过大,数据中什么情况都可能存在。 如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理时,前面

zjl410091917的专栏 3865

abap 创建日期取最大_linux的分而治之:从乱序的1亿个数找top10最大的数

问题:data文件:无重复的1亿个数乱序 每个数按行排列要求:找出data文件中最大的10个数step1:创建data文件创建data文件的过程time 统计后续命令行执行的时间seq m n 产生序列 m,m+1,m+2,....nshuf 打乱输入数字流,洗牌的过程最后一步得到的1亿乱序数字输出到data文件data文件一亿个乱序的数字step2:分而治之脚本文件main.sh两个超参数fil...

weixin_39969298的博客 172
上一篇: whois命令简介
下一篇: 私有地址简介
MONKEY_D_MENG
博客等级 码龄17年 705粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值