免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3422 | 回复: 8
打印 上一主题 下一主题

请教一个mysql表的大容量数据的处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-31 14:44 |只看该作者 |倒序浏览
最近小弟是要做网络数据采集(就是客户端拿到数据,直接往mysql服务器上的一张表中去写),因为流量非常大(很快就几个GB),如果把它做到一张表里,是非常不现实的……
想设计一个框架(大致思路):


1、Mysql 客户端采集数据------------>发送到mysql服务器;
2、mysql服务器根据表的容量,比如最大100MB,超过这个容量,就把这个表中的数据压缩打包至一个文件,如kendo[.number];
3、然后,表被清空,接收新的数据;
4、如此循环中;
5、通过C或PHP等,读取这些压缩打包的文件,选择一个,将它解压,导入mysql 表,再显示出来!!

关键是第2.3步不知如何做,不知是否可行,如果可行,应该如何做呢?

论坛徽章:
0
2 [报告]
发表于 2007-08-31 14:56 |只看该作者
大概思路:
$counter_now= select count(*) from table ;
select * INTO OUTFILE '/$storage/table_$time.txt' limit 1,$counter_now-100;
$id= select id from table limit $time_now-100,1;
delete * from table where id<$id

论坛徽章:
0
3 [报告]
发表于 2007-08-31 14:57 |只看该作者
原帖由 火鸡 于 2007-8-31 14:56 发表
大概思路:
$counter_now= select count(*) from table ;
select * INTO OUTFILE '/$storage/table_$time.txt' limit 1,$counter_now-100;
$id= select id from table limit $time_now-100,1;
delete * fro ...


能结合mysql的自动备份的功能,就更好了,显得专业一些!!

论坛徽章:
0
4 [报告]
发表于 2007-08-31 14:57 |只看该作者
LOAD DATA INFILE '/$storage/table_$time.txt' REPLACE INTO TABLE `table`;
这个是恢复的。忘记写了,顺便骗多一贴。

论坛徽章:
0
5 [报告]
发表于 2007-08-31 14:59 |只看该作者
MYSQL有自动备份功能吗?这个好像还没见到。。。。。最近就系统问题都搞死人了。。。。MYSQL甚少搞。。。。

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-08-31 16:12 |只看该作者
网络数据采集有些情况可以不使用数据库记录,  比如文件方式

超过100M打包成文件?  这个超强了吧.  怎么知道改读那个包? 读的频率多高?  一次需要读多个包里面的数据?

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2007-08-31 16:16 |只看该作者
其实可以,   把要查询的结果, 定时生成报表, 然后考虑删除转移历史数据

论坛徽章:
0
8 [报告]
发表于 2007-08-31 17:12 |只看该作者
好文章希望能对你有用:

图解用"MySQL Administrator"工具实现自动备份数据库:
http://www.mysqlpub.com/viewthread.php?tid=154&extra=page%3D1

简单备份恢复MySQL数据库例子:
http://www.mysqlpub.com/viewthread.php?tid=177&extra=page%3D1


如果要清除一个表,用truncate table tablename; 要比 delete from tablename;快很多。

论坛徽章:
0
9 [报告]
发表于 2007-09-02 23:34 |只看该作者
原帖由 北京野狼 于 2007-8-31 16:12 发表
网络数据采集有些情况可以不使用数据库记录,  比如文件方式

超过100M打包成文件?  这个超强了吧.  怎么知道改读那个包? 读的频率多高?  一次需要读多个包里面的数据?


是的,我如果需要先通过socket写文件,再转储为mysql,也是可行的,只是这样要去写一个c/s程序,现在有现成的msyql,可以偷懒……
mysql可以使用mysqldump工具实现数据表的导入导出:
例如:

mysqldump -u user -p passwd mytable> table_001.sql

我现在需要实现的是:
如何实现这个东东的自动化,包括:
1、临测表的大小,如果达到多大,如10MB,100MB等,就执行它;
2、导出表的名称自动化处理,如001,002,003,这样导入的时候好区分;

我想,使用bash完成一个脚本应该是可以实现的,可是能够完全使用msyql来实现,这样,就可以不管数据库的OS了,不论BSD,Linux或是Win……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP