mysql表列复制,mysql连接时间和内存控制。
有两个表临时表temp_t,和正表table1,都是MyISAM,分别有28W条左右的记录。
cron定时每分钟从网络上获取一些信息,先存储到temp_t(频繁写入),
然后cron定时每10分钟从temp_t复制信息到正表table1(频繁读取,每10分钟写一次)。
temp_t字段 id(auto_increment),title(varchar(200)),content(varchar(500)),date(DATETIME), mykey(tinyint(1) Default 1, 这个来判别是否已经复制到正表,复制过后UPDATE为2)
table1字段 id(没有auto_increment),title(varchar(200)),content(varchar(500)),date(DATETIME)
28W记录,每个数据表大概有300MB,每次更新差不多要2K-3K条记录。
如果直接复制的话,MYSQL连接时间过长,导致MYSQL性能下降table1会出现类似于锁表的现象,查询table1的时间明显加长
require dirname(__FILE__) . '/../connection.php';mysql_select_db("news",$connextion);mysql_query("SET NAMES utf8");$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");while($rows = mysql_fetch_array($query)){ mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($rows['id'])."'"); mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($rows['id'])."','".mysql_real_escape_string($rows['title'])."','".mysql_real_escape_string($rows['content'])."','".mysql_real_escape_string($rows['date'])."'");}mysql_close($connextion);
于是想先把记录从temp_t里的数据先读出来,存为一个json数组,然后再复制数据到table1,但是有时会遇到Cannot allocate memory,然后导致整个服务器崩溃(是不是这个json数组太大,占了巨量的内存)。PS:已经在php.ini里将memory limit加到64M了(但总觉得治标不治本,这么一个复制过程,不需要那么多内存,关键还是代码不合理)。
require dirname(__FILE__) . '/../connection.php';mysql_select_db("news",$connextion);mysql_query("SET NAMES utf8");$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");$jon = array();while($rows = mysql_fetch_array($query)){ $jon['a'] = $rows['id']; $jon['b'] = $rows['title']; $jon['c'] = $rows['content']; $jon['d'] = $rows['date']; $pjon .= json_encode($jon).',';}mysql_close($connextion);$njso = json_decode('['.substr($pjon,0,-1).']');foreach($njso as $nx){ if($nx->a){ require dirname(__FILE__) . '/../connection.php'; mysql_select_db("news",$connextion); mysql_query("SET NAMES utf8"); mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($nx->a)."'"); mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($nx->a)."','".mysql_real_escape_string($nx->b)."','".mysql_real_escape_string($nx->c)."','".mysql_real_escape_string($nx->d)."'"); mysql_close($connextion); }}
所以求助大虾们,有没有更节省的代码用来复制表的信息?要求mysql连接时间短,内存消耗又少?谢谢大家。
回复讨论(解决方案)
依次执行这两句就可以了
INSERT INTO table1 (id,title,content,date) values
SELECT id, title,content,date from temp_t where mykey = '1'
UPDATE temp_t SET mykey='2' WHERE mykey = '1'
不需劳驾 php 转交
既然 temp_t 是临时存放,那么转移后的数据为何不删除呢?
依次执行这两句就可以了
INSERT INTO table1 (id,title,content,date) values
SELECT id, title,content,date from temp_t where mykey = '1'
UPDATE temp_t SET mykey='2' WHERE mykey = '1'
不需劳驾 php 转交
既然 temp_t 是临时存放,那么转移后的数据为何不删除呢?
temp_t的数据还不能删,insert时还有一个判断,就是title不重复(避免重复插入)
按照老大的意思,这样执行就可以了?还没测试,得停掉cron脚本。
弱弱的问一句,依老大的经验,300MB数据表,像这样一次插入2000-3000条记录,这个脚本大概要运行多长时间,耗费多少内存?是不是my.cnf里要增加某些值的内存,用来加速INSERT和SELECT的执行时间?再次感谢。
require dirname(__FILE__) . '/../connection.php';mysql_select_db("news",$connextion);mysql_query("SET NAMES utf8");$query = mysql_query("INSERT INTO table1 (id,title,content,date) values SELECT id, title,content,date from temp_t where mykey = '1'");$query = mysql_query("UPDATE temp_t SET mykey='2' WHERE mykey = '1'");}mysql_close($connextion);
1:首先临时表,又没对外读取?如果有为啥不memcache,然后table1在去读取memcache回来?
2:300m 不算大吖。别人文学站,冬不冬一个表就上10G的。一样复制来去。
3:以前公司做个项目,1个表就400万条数据,采用的方法,从临时表里,1条1条的读取,慢慢读,不用把所有事情挤在一起来出来,这样虽然是时时刻刻的运行着,总共比卡死好吖。
1:首先临时表,又没对外读取?如果有为啥不memcache,然后table1在去读取memcache回来?
内存本来就不够,还装memcache……人家是nginx服务器集群,俺这块是几十元的虚拟空间……
10G的表复制,是不是my.cnf里需要增加某些值的大小?
总感觉自己的表300M运行速度慢,还经常卡死。人家天文数字,频繁读写的照样工作顺畅。
1:首先临时表,又没对外读取?如果有为啥不memcache,然后table1在去读取memcache回来?
内存本来就不够,还装memcache……人家是nginx服务器集群,俺这块是几十元的虚拟空间……
10G的表复制,是不是my.cnf里需要增加某些值的大小?
总感觉自己的表300M运行速度慢,还经常卡死。人家天文数字,频繁读写的照样工作顺畅。
那你是用第三条好点,无论你多大多复杂的数据,1条1条的来。1-2秒1条,1天下来也很恐怖了。
没必要一次倒那么多出去的,如果非的一次倒,多大的集团公司也不敢这样做的。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.
