项目场景是给做用户年报,项目属于活动类型,需要维持1个月左右,需要统计用户操作的一些数据,主要是统计方面的,当时注册用户大概280w左右,书单、评论、打赏还可以,之前的数据做过分表,只有阅读记录log大概将近1亿条,是个大难点。
一次性取出1000条数据,还是一次处理100? 答案是取1000条,如果服务器的内存允许,一次可以取更多条,应该尽量避免mysql进程中连接和断开的消耗,性能提高的非常明显,17w测试数据,从8条/秒 提升到 140条/秒!
把数据量偏小的取出,做map映射,以提高最大的性能,再使用的地方用key拼接使用。
(相关资料图)
Array( [67] => 还阳 [69] => 做媒 [70] => 共业招感 [71] => 流心彩虹糖 [72] => 雪中燃灯 [73] => 王座 [74] => 不言而喻 [75] => 王以君倾 [76] => 踏雪寻泥 [77] => 有匪君子)
SELECT `user_id` ,`novel_id` ,`chapter_id` ,MIN(DATETIME) AS `datetime`FROM `wm_novel_reward`WHERE `user_id` BETWEEN 1AND 1006GROUP BY user_id`出于对安全的考虑,当mysql是字符串的时候,需要对字符串进行转义,保证sql语句的正常操作。
#面向对象风格mysqli::real_escape_string ( string $escapestr ) : string#过程化风格mysqli_real_escape_string ( mysqli $link , string $escapestr ) : string对于操作频次较高的业务场景中,分表的情况比较多,使用UNION ALL进行优化处理。
$commentMostSqlArr = [];for ($i = 0; $i < 128; $i ++) { $table = "cp_comment_msg_uid_".$i; $commentMostSqlArr[] = "SELECT `uid`,`nid` ,`module_name` ,`aid` , `author_name` ,count(module_id) AS count_comment_number FROM {$table} Where `uid` BETWEEN {$minUid} AND {$maxUid} AND `gift_id` = 0 AND `create_time` > {$total_start_time} AND `create_time` <= {$total_end_time} Group by nid, uid ";}$commentMostSql = "SELECT * FROM (" . implode(" UNION ALL ", $commentMostSqlArr) . ") t";1.数据重复有两个方面,一个是PHP数组数据的重复,一个是Insert语句重复,这样解决的:
PHP数据重复使用array_unique( $array ),注意键名保留不变,array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
2.mysql层面使用sql语句去重,使用 INSERT IGNORE INTO去重:
INSERT IGNORE INTO 与 INSERT INTO 的区别就是 INSERT IGNORE INTO 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
以下实例使用了 INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据,而 REPLACE INTO 如果存在 primary 或 unique相同的记录,则先删除掉。再插入新记录,再性能上会慢一些。
INSERT IGNORE INTO person_tbl (last_name, first_name) VALUES( "Jay", "Thomas");INSERT INTO可以拼接一次插入数据库,比单条插入的性能要快很多,尤其是多条的时候,也有一个小缺点,当其中一个字段有问题时整条语句一起失败。
INSERT INTO `annual_report_2020`(`user_id` ,`user_regtime` ,)VALUES ( 2 ,1500341346 ) , ( 5 ,1502195321 ) , ( 6 ,1502242604 )1.memory_limit设置脚本内存
memory_limit的值是越大越好么?当然不是,memory_limit主要是为了防止程序 bug, 或者死循环占用大量的内存,导致系统宕机。在引入大量三方插件,或者代码时,进行内存限制就非常有必要了。
memory_limit会使每个 PHP process 都占用固定的内存?memory_limit 只是限制了每个 PHP进程的内存占用上限,而不是为每个进程分配了固定的内存。所以,并不会因为 memory_limit 设置越大,导致并发数出现降低。
2.set_time_limit设置脚本执行时间
在php中set_time_limit函数是用来限制页面执行时间的,如我想把一个php页面的执行时间定义为5秒
就可以set_time_limit(5)了,规定从该句运行时起程序必须在指定秒数内行结束,0代表不限制。
set_time_limit(0);ini_set("memory_limit", "1024M");很多时候我们都在说内存,其实内存的概念很笼统,内存分为CPU上的缓存(catch)和内存条上的内存(Memory),平时说的服务器8G内存指的是内存条上的内存。Cpu已经从Lmp总线型,升级成NUMP的方式,Nginx就是利用NUMP很好的例子。
其实有一个问题特别迷惑,Mysql数据库里的数据就是以特殊结构存储(B-tree)的文件,Redis中的数据也是用(list、hash)结构存储的数据,存储上没有什么太大的不同,只是有快慢的区别。
而高性能就是尽最大的程度上利用Cpu和内存,提高吞吐量,词很贴切。
后来在正式环境执行的时候,我们还是遇到了别的问题,等我有时间再整理,不要打断这一篇博客主题,我们下一篇见,谢谢您的阅读。
项目场景是给做用户年报,项目属于活动类型,需要维持1个月左右,需要统计用户操作的一些数据,主要是统...
1、网上申请营业执照的入口是:所在地市的市场监督管理局官网,即原来的工商局官方网站。2、如果实在不...
1、世纪辉煌二号是日本科学家育成的超高产优质黄瓜新品种。2、适宜晚秋、越冬、早春日光温室栽培。文章...
大皖新闻讯2020年以来,合肥市检察机关出色地办理了一系列职务犯罪案件,共审查起诉职务犯罪151件174人...
扬子晚报网2月25日讯(实习生李亦婷记者刘丽媛)春天,南京人除了“七头一脑”外,还喜欢吃什么?那当然...
河南省舞阳县发布大雾黄色预警
1、差额选举是相对于等额选举而言的。2、差额选举是指,正式候选人名额多于应选名额的选举。文章到此就...
当踏进河南博物院的那一刻,犹如坐上“时光机”穿越中原历史长河,展示着中国历史发展脉络的文化艺术宝...
近日 12岁孩子进店撸猫被拒家长怒怼店员 冲上热搜引发广大网友关注视频中店家明确表示12周岁以下不让...
适当运动,控制体重。
毕节新型冠状病毒肺炎疫情:2月25日毕节疫情最新消息今天数据统计情况通报,截至2月25日05时30分毕节疫情...
1、敖力布皋镇,隶属于内蒙古自治区通辽市科尔沁区,地处科尔沁区城区东北部,东邻高林屯种畜场,南与钱...
2023合肥植物园梅花节攻略(景观+时间+地点)一、时间:2月25日08:00-17:30二、地点:合肥市环湖东路123...
1、MightyMouth于2008年3月3日出道,是由生菜和ShorryJ组成的男性组合。2、歌曲style是Ra
焦急时刻,一位骑电动车的黄衣大姐,主动载着消防员前去探路侦查,抵达现场后又原路返回接应消防车,狭...
近日,公安部交通管理局召开全国视频会,部署各地公安交管部门在3月至5月开展公路交通安全“春季守护行...
本文转自:渭南日报绿盛合作社农技人员正在给托管农田追施肥料本报记者姚二曼刘雪妮“再下一场春雨后,...
爱美之心人皆有之,不管是为了悦人还是为了悦己,而娱乐圈女星更是如此。有时候大家觉得女星们对于减肥...
同花顺金融研究中心2月23日讯,有投资者向皇氏集团提问,根据公司披露信息,安徽阜阳项目已开工建设数月...
1、银屑病的病因和诱发因素包括以下几点:银屑病是在多基因遗传背景下,在多种环境因素影响下的一种复杂...
锁色壁板专为抵御覆盖房屋外部的考验而设计。与传统的壁板或油漆产品相比,颜色锁的制造抗褪色和保持颜...
长盈通:武汉长盈通光电技术股份有限公司关于开立募集资金理财产品专用结算账户的公告
提灯是鸡的卵巢和卵巢内部未发育成熟的鸡蛋。解析1提灯是鸡的卵巢和卵巢内部未发育成熟的鸡蛋。在烧烤的...
新华社北京2月22日电21日,又一列货运火车在美国脱轨。这是本月以来美国境内已知至少第四起同类事故。美...
法兰克福在各自领域取得的杰出成就以及对教学和指导的坚定承诺——这些是微生物学会高级科学家评审团从...
X 关闭
X 关闭