前段时间实现某一个功能,涉及到对数据表的查询操作,经本地与测试环境测试过后都没问题,这一过程貌似都很顺利,想想是不是要下班了啦(虽然时间好像也不早了),接着推入正式环境下进行最后的测试(心想应该不会有什么问题吧,毕竟就只是对数据的查询,而且都已经测试过了,数据也完好的输出);

最后….终于还是意想不到的事情发生了。。。

产品那边说为何为何这么慢,数据加载不出来。。。

根据产品那边的反馈,我看了看相关程序,觉得应该没问题呀,再看看表字段设计,发现了我加的那几个字段有的应该要加上索引的但我没加,加上去了,测试下还是几乎一样慢,几乎数据加载不来。。。

再看了看测试环境下的一些配置文件与正式环境下的配置对比,也没发现什么问题呀,

找问题。。。。

(这时思维貌似是陷进了某个死角。。)

经过主管的细心排查终于发现问题出现在哪里了。。。

原来是Model底层有个包含所有表名其主键的一个缓存文件搞的鬼(好像是程序执行时没加载到进行,或者保存的时候没保存成功到该缓存文件),导致程序每一次涉及到对表的操作是都是重新去服务器里去查询所有表,想想多可怕啊。。。

总结这个事情反应出了以下问题:

1.程序方面的逻辑判断不够严谨!

体现在如果以上的那个缓存文件加载失败,或者数据保存到缓存文件不成功,在日志里能够体现出来,那是不是定位问题所产生的原因是不是更快、更精准了!

2.排查问题的思维方式太过于局限性!

貌似总是在一个层面上去思考问题,很难跳出当前的思维模式站在其它的角度去思考问题,这可能是自身的问题!(思维不够灵活,或者说经验不足)

3.对系统底层框架的实现原理不够深入!

可能在日常的开发中比较繁忙,我们只是停留在使用某一个方法,并没有去深入了解它的底层实现原理,

这样的话出现问题了,搞的就比较被动!

对于以上总结可能还远远不够,但重要的是一定要去阅读源代码!

代码片段:

/*** 生成表结构信息** @param string $table* @return*/public function tableInfo($table){if (empty($table))return false;//只取主键,find(2)等自动匹配主键时使用if (file_exists(BASE_DATA_PATH . '/cache/fields/_pk.php')) {$this->fields = require(BASE_DATA_PATH . '/cache/fields/_pk.php');} else {$full_table = Db::showTables();$_pk_array = array();$count = strlen(C('tablepre'));foreach ($full_table as $v_table) {$v = array_values($v_table);if (substr($v[0], 0, $count) != C('tablepre'))continue;$tb = str_replace(C('tablepre'), '', $v[0]);$fields = DB::showColumns($tb);foreach ((array) $fields as $k => $v) {if ($v['primary']) {$_pk_array[$tb] = $k;break;}}}$this->fields = $_pk_array;F('_pk', $_pk_array, 'cache/fields');}return $this->fields[$table];}

  

转载于:https://www.cnblogs.com/wangyulu/p/5173580.html

系统Model底层隐藏的坑相关推荐

  1. 专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑

    专访小米欧阳辰:深度揭秘小米广告平台的构建.底层模块和坑 专访小米架构欧阳辰架构师广告平台数据库 width="22" height="16" src=&quo ...

  2. android h5状态栏消息,安卓实现系统状态栏的隐藏和显示

    尤其视频类APP,需要实现切换到横屏后,隐藏系统状态栏,全屏显示,以实现看更大画面的视频.当切换回竖屏后,又显示状态栏.那么如何实现呢? 网上流传着很多种做法.比如: 1.在AndroidManife ...

  3. 教你从0到1搭建秒杀系统-抢购接口隐藏与单用户限制频率

    在前两篇文章的介绍下,我们完成了防止超卖商品和抢购接口的限流,已经能够防止大流量把我们的服务器直接搞炸,这篇文章中,我们要开始关心一些细节问题.对于稍微懂点电脑的,点击F12打开浏览器的控制台,就能在 ...

  4. 按钮隐藏_Win10系统:如何隐藏登录界面右下角的电源按钮?(两种方法)

    Win10系统:如何隐藏登录界面右下角的电源按钮? Win10系统,在登录界面右下角,通常会有一个[电源按钮],让我们无需登录系统就可以进行"关机.重启.睡眠"等操作,方便用户使用 ...

  5. android 系统状态栏的隐藏和显示

    今天,简单讲讲android如何控制  系统状态栏的隐藏和显示. 昨天遇到这个问题,找了好久资料才解决,这里记录一下. 网上流传着很多种做法.比如: 1.在AndroidManifest.xml文 ...

  6. ubuntu 下系统监视器_Ubuntu下,用Pyinstaller打包桌面系统时,你踩坑了没?

    前几天,在Ubuntu下,用Pyinstaller打包wxPython开发的桌面系统时,遇到不少坑.趁这两天有时间,整理出来并分享给你. 1 好在Ubuntu新版本,比之前的完善了n多倍,安装方便了很 ...

  7. fixedsys字体 win7_主编为你win7系统显示默认隐藏字体的图文办法

    今天小编告诉大家如何对win7系统显示默认隐藏字体进行设置,可能很多用户都不知道怎么对win7系统显示默认隐藏字体进行设置,但当我们遇到对win7系统显示默认隐藏字体的设置方法非常简单,只需要1.在任 ...

  8. Win11系统显示和隐藏语言栏的操作方法分享

    Win11系统显示和隐藏语言栏的操作方法分享.我们使用电脑打字的时候,系统的语音栏就会显示出来.有用户平时打字的时候觉得语言栏有点阻碍视线,看起来不太习惯,所以想要去进行语言栏的隐藏.那么我们如何去自 ...

  9. 计算机DVD驱动禁用怎么恢复,Win7系统禁用或隐藏DVD光驱设备的方法

    win7系统笔记本自带DVD光驱设备了,但是现在网络发达了,想要什么直接在网上搜索就可以了,有些用户说Win7系统电脑自带有DVD光驱设备怎么禁用或者隐藏起来呢?其实禁用DVD光驱设备方法很简单,接下 ...

最新文章

  1. time.h中的相关计时函数time,localtime,clock等详解
  2. tensorflow中keep_prob的修改方法
  3. h3c 3600 交换机配置Telnet登录
  4. vue --- v-html、v-bind
  5. Request/Response【学习笔记03】
  6. unity平行光太亮?物体发白?可能你使用了2个或多个平行光
  7. nginx源码分析——configure脚本
  8. java中设置http响应头控制浏览器禁止缓存当前文档内容
  9. 【雕爷学编程】Arduino动手做(71)---红外遥控扩展模块
  10. 图扑数字孪生智慧隧道,新基建带来新生活
  11. php easyui filebox,EasyUI1.4 新控件TextBox,FileBox
  12. C++函数参数中的省略号
  13. Anomaly Detection with Partially Observed Anomalies译文
  14. TI BSL in python
  15. Apache APISIX 玩转 Tongsuo 国密插件
  16. “一杯严选”的2019猪年新春贺岁 “福鼎一杯”生态@复联复兴者联盟
  17. 申请国外博士后的好网站
  18. PHP微勤,家E课 黄微勤 小学一年级作文二年级作文【写句子】百度...
  19. 2018 下半年 Java 后端工程师的书单推荐
  20. 洛谷 P2216 [HAOI2007] 理想的正方形

热门文章

  1. 协程 c语言,协程-C语言实现
  2. document.getElementById找不到元素
  3. Jupyter notebook基础教程(启动,汉化,操作)
  4. 【服务器】【个人网盘】宝塔安装OneIndex
  5. 【基础】基础算法学习笔记(状态空间)
  6. SpringBoot→请求参数、返回参数、文件上传、拦截器、异常处理、定时任务、异步任务
  7. SQL Server高级查询之数据查询和操作(DDL和DML)
  8. WPF仿微信界面发送消息简易版
  9. java boolean 包_java Boolean包装类工作笔记
  10. 千寻位置 开发demo_CICV2019:博世相对高精度定位与千寻绝对高精度定位