项目的开发终于只剩了我一个,自己瞎搞终于抠完了,发现将近100万的数据量根本跑不动,页面就剩一个圈圈在转,于是只能改代码优化.
逻辑中有先把符合规则的数据select 出来,然后处理一下再一条条update和insert.
首先把update 写成batch update
// for(Match match:updateMatchList){
// executor.update("MATCH.updateMatch", match);
// batch++;
// if(batch==500){
// LOG.info(""+i);
// executor.executeBatch();
// batch=0;
// i++;
// }
// }
把insert into 写成insert into ()values(...),(...),(...)的形式, 改善很小没啥用
2.然后想到改sql, 希望把n个sql并成一条
于是把select的记录把id取出拼成数组,写成update ... where id in(...)的形式,但这样由于id太多,sql太长,结果超出了mysql的允许大小.并且一次取出超过100000条数据在内存会out of menory,后来又把这些每50000条记录拆分操作,没报错但还是很慢.
<insert id="saveMatchClassfication" parameterClass="java.util.List">
insert into matchClassfication (
match_id,
class_id,
priority,
created_at
)values
<iterate conjunction =",">
<![CDATA[
(#matches[].id#, #matches[].classId#, #matches[].priority#, now())
]]>
</iterate>
</insert>
<update id="updateMatchClassIdBatch" parameterClass="java.util.HashMap">
update matchedVideo
set class_id=#classId#
where id in
<iterate close=")" open="(" conjunction="," property="idList">
<![CDATA[
#idList[]#
]]>
</iterate>
</update>
3.后来受同事启发一开始就不应该把记录先取出再处理,而应该直接用sql处理, 这样既不需要update上万次也没有out of menory的风险.于是稍微调增额业务处理的顺序,然后用两句sql搞定.然后发现数据量大sql的效率极低,甚至低于修改前.后来检查了一下sql,发现在where 中用了 is null,这样不会走索引,百万级数据会直接卡死.于是又修改了业务处理的顺序,避免这种问题.
4. 总结 :
a.能优化逻辑先优化逻辑,避免把表中大量数据一次取出的情况
b.避免一大批数据要一条一条update/insert的情况
c.写sql时避免关联很大的表,最好能用表中的一部分数据取出成一个新表再做关联
d.对于索引失效的情况得注意
e.适时用存储过程等做优化
f.对于读操作数据量大时要用缓存,避免每次都和数据库打交道
g.若还是很慢无法忍受,只能改成异步操作,每次用户点完直接返回并加上恰当的提示不至于让用户一直等在那无法操作.
相关推荐
Allocation & Reclaim实验报告
Allocation & Reclaim
网站回收
配合framework 下CachedAppOptimizer 中的关于 proc reclaim 节点的驱动patch。
超级马拉松UMW Reclaim Your Domain Hackathon 网站
回收 车夫 定位 垃圾分类 线上支付 前段UI属于简介风格 大方可见 而且所有logo全部可以自定义安装和调整还可以发布商城积分换购,后台简单明确 用户 骑手 商家各自独立
回收域 ... 使用 Bootstrap 框架和 AngularJS 框架获取实时搜索结果。 你可以在看到这个 ###Configuration 我们正在使用 DomainsBot API 来提供相关的域建议。 您可以在获取免费的 API 密钥并将其添加到js/app.js 。
语言:English 浏览到Amazon.com时显示亚马逊的照片 了解有关亚马逊森林的更多信息,查看精美的照片并减少购物! 当您浏览到Amazon.com(或它的国际域... ... 项目人:Olya Irzak,Tilek Mamutov,Pasha Tsier,气候见证人
这是王晓东 第三版的算法设计与分析课件 很实用的 里面包含很多经典的算法 对想要好好学习算法的很有价值
收回您的域名 这是 reclaimyourdomain.org 项目的主站点。
计算机图形学 裁剪算法 【深圳大学程序讲义】 内涵实例程序
***** 对于一个HashTaskList而言,以上2个函数只调用一次 4. 调用ApplyTask向第一步得到的结构对象添加任务,每调用一次添一个任务 2)如何终止任务管理功能: 1. 程序结束,终止程序既停止管理并且释放所有资源,...
Kin Lane - 收回您的域名这是我收回你的域项目。
HANA在线日志清理方法,不能直接进入/hana/log日志目录下进行删除操作,此种操作会给系统带来极大的灾难,需要根据SAP给出的方法来进行处理
刚花600大洋,购买的小程序源码,无限多开零象废品回收微信小程序源码 垃圾废品回收系统源码,废品回收专用系统源码。有兴趣的朋友可以了解一下。
采用最佳适应算法的内存管理。采用最佳分配算法,建立内存管理模型,通过模拟的内存管理调度熟悉内存的调度过程并且可以加深对内存运行的理解。
Molecular testing of residual cytology samples_ Rethink, reclaim, repurpose
Transactional memory support routines to reclaim and recheckpoint transactional process state.
您可能无法再更新Windows,一个快速的解决方法是制作一个reclaim.preset文件并添加此行EnableTelemetry 。 如有任何疑问,请参阅存储库中的常见问题解答。 配置和用法 配置 install.preset :列出您的Chocolatey...