昨天在做项目的时候,因为涉及到数据表结构的改动,需要进行大量数据的导入,那么如何高效的进行是我比较关注的。本文暂且从使用PHP脚本层面上来说,因为使用其他语言或其他方式也可以进行数据的重导。 在讨论这个问题的时候,前辈给我的意见就是单独做一个脚本,如果能拿python做更好,当然,python我还不是很会,所以拿php也能完成。既然这样,就采用最原生的方式来进行数据的重导。 整个过程中要先从一张表中取出全部数据,再进行数据的处理后导入到新的数据表中。而就我测试的那个数据库中的那张表里,数据量就已经上万了,如果直接全部取出必定会有性能上的问题。 他人给我的建议是,使用mysql_connect后用mysql_query执行sql(取大数据的情况如sele ct * from tbl)语句,理由是mysql_query不是返回的数据结果,因为后面用到mysql_fetch_assoc之类的函数,进行游标的移动来取得数据。并在sql执行前后分别使用了memory_get_usage来查看内存使用量。当然,执行后内存使用量比执行前大了,虽然使用了不多的内存,但对于只是测试数据库里的数据而言还行,当数据处理量很大的时候,php程序脚本可能会崩溃。为了确保重导真正线上数据库的数据万无一失,我还是查了一些相关资料。 最后了解到PHP中有个mysql_unbuffered_query这个函数,与mysql_query有点类似,手册上写了该函数不缓存的查询结果,它所带来的好处就是一不用缓存结果,二就是不必等待全部查询后进行操作,而是直接获取一条数据就可以操作。而mysql_query是查询出所有符合条件的结果并缓存后才能进行操作,这就让我怀疑之前建议的那个方法。 于是我同样用mysql_unbuffered_query查询同样一条sql语句,也同样对执行前后查看了内存使用量,结果前后内存使用量没有变,这就说明了内存并没有被拿来做查询数据缓存的相关事情。当然也可以使用以下方法来测试:

$link = mysql_con nect(‘localhost’,’root’,’root’);

mysql_select_ db(‘phpcms’);

$sql = “SEL ECT * FROM `phpcms_content`“;

//$result = mysql_unbuffered_query($sql,$link);

$result = mysql_query($sql,$link);

while ($row = mysql_fe tch_array($result, MYSQL_NUM)) {

printf (“ID: %s Name: %s”, $row[0], $row[1]);

}

mysql_data_seek($result,0);

echo “

“;

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

printf (“ID: %s Name: %s”, $row[0], $row[1]);

}

mysql_free_result($result);

你会发现使用mysql_query会输出两次,而mysql_unbuffered_query只输出一次,说明使用mysql_query查询结果必定被缓存了,而使用mysql_unbuffered_query则边进行查询边给出结果。 最后再说明,使用mysql_unbuffered_query的话,不能使用mysql_num_rows()和mysql_data_seek()这也正因为它的特性方式决定了这样。还有比较重要的一点,如果你只是单单获取大数据量使用这个函数可以,但是,如果你在取得大数据的时候,使用while($row = mysql_fetch_assoc($result))方式进行执行新的sql语句的话,会出错。手册上也写明了,在执行一条心的sql之前,要提取所有未缓存的sql查询所产生的行。所以只使用mysql_unbuffered_query取数据可以,但期间还要执行其他sql就不行了。 以上只是我对这个函数的初步认识,如果理解有误,也希望能指正交流。

mysql_unbuffered_query的_用mysql_unbuffered_query函数取大数据相关推荐

  1. python大数据平台_基于腾讯位置大数据平台的全球移动定位数据Python爬取与清洗...

    前不久投稿了一篇论文是以腾讯位置大数据为基础进行人口空间化研究的,但是还未见刊,见刊后会给大家分享下具体的研究方法. 首先打开腾讯位置大数据星云图链接:https://xingyun.map.qq.c ...

  2. python爬取网站大数据_基于腾讯位置大数据平台的全球移动定位数据获取(Python爬取)...

    对于腾讯位置大数据平台,有一些商业接口可以调用 看起来还是挺爽的,但是现阶段只接受商业合作客户来调用,我们个人是获取不到的. 那就没办法了吗?当然不是,实际上腾讯位置大数据把调用接口就直接写在了前端, ...

  3. hive load data外部表报错_从0开始学大数据-Hive基础篇

    Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...

  4. 【微博爬虫教程实例】基于requests、mysql爬取大数据量博主关键字下博文及评论

    [关键词:手把手教程.反爬.数据库.python爬虫.微博关键词爬虫.较大数据量.数据简单过滤] 本教程适合微博相关爬虫需求者阅读,完整实例源码将放置在文末github链接中. 该实例针对微博的反爬措 ...

  5. 冷热分离和直接使用大数据库_中台有“数”:大数据技术为苏宁818保驾护航

    今年818正值苏宁成立30周年之际,苏宁易购提出了"专注好服务"的全新品牌主张,在带来巨大流量的同时,也给苏宁中台系统的保障工作带来了更大的挑战.如何在818大促中,快速.高效.智 ...

  6. hive 行转列和列转行的方法_读离线和实时大数据开发实战,为你揭开 Hive 优化实践的神秘面纱...

    前言 「1024,1GB,一级棒!程序仔们节日快乐!」 ❝ 指尖流动的 1024 行代码,到底是什么? ❞ ❝ 是10行的迷茫?是101行的叛逆?是202行的理性思考?是307行对渴望的冲动?还是40 ...

  7. sqoop数据倾斜_北京卓越讯通大数据岗位面试题分享

    北京卓越讯通面试题 学长1 1)笔试 (1)JAVA支持的数据类型有哪些?什么是自动拆装箱? (2)AtomicInteger和Volatile等线程安全操作的关键字的理解个使用 (3)创建线程有几种 ...

  8. 数据查询和业务流分开_传统数仓和大数据数仓的区别是什么?

    概念与容器 为什么先说这个,其实很简单:因为绝大多数人都把这两个概念混为一谈.然后就会出现各种各样的问题:oracle不是数据库么,怎么又是数据仓库?Hive不是数据仓库么?怎么又是数据库? 数据仓库 ...

  9. tez什么意思_传统数仓和大数据数仓的区别是什么?

    概念与容器 为什么先说这个,其实很简单:因为绝大多数人都把这两个概念混为一谈.然后就会出现各种各样的问题:oracle不是数据库么,怎么又是数据仓库?Hive不是数据仓库么?怎么又是数据库? 数据仓库 ...

最新文章

  1. Comment:研究微生物,只靠多组学根本不够
  2. php过滤手机特殊字符,php过滤特殊字符实用函数
  3. [日常折腾之码上归一]多种编程语言打印当前系统时间
  4. android 虚拟按键 增减和删除的方法
  5. 爬虫 spider11——搭建分布式架构通过feign技术,开发服务消费者
  6. c语言第一次作业,C语言培训班第一次作业 (1)
  7. cell 各自的高度不同的时候
  8. ApI、toString方法、equals方法、Scanner方法基本知识
  9. 步步为营-83-用户控件
  10. Atitit 读取文本文件内容功能的实现 艾提拉 总结 attilax总结 1.1. FileUtilsAti.readFileToStringAutoDetectEncode(txtF); 1 1
  11. c语言原型,C语言原型模式
  12. JUnit4教程+实践
  13. 利用Windows自带的Certutil查看文件MD5
  14. flink的mysql两阶段提交_Flink 源码之两阶段提交
  15. ENVI_IDL:批量拼接Modis Swath的逐日数据并输出为Geotiff格式
  16. random.sample函数
  17. 食物链 (利用并查集的两种解决方法)
  18. python后端开发简历分享_Python后端开发工程师面试
  19. Java版Word开发工具Aspose.Words功能解析:将Word文档(DOC / DOCX)转换为HTML
  20. 搜索计算机找不到,win7找不到搜索框怎么办?win7找不到搜索框修复方法

热门文章

  1. 源码里没有configure_深入源码理解.NET Core中Startup的注册及运行
  2. java连接access_关于k8s下使用Ingress保持长连接的异常情况排查
  3. 新萝卜家园win11全新专业版64位系统v2021.07
  4. 腾讯视频真实下载地址_腾讯视频如何多倍速播放视频
  5. js 把线性的数据结构改成树形结构
  6. vue使用class添加动态类
  7. oracle 视图带条件,Oracle视图可以进行DML操作的条件
  8. MySQL中concat函数(连接字符串)
  9. android判断是否json格式,android – 检查JSON中是否存在subObject
  10. 上证50基金有哪些_定投基金(易方达上证50指数A)