从大学开始关注博客园,到工作之后注册了博客园账号,直至今日终于能够静下心来将自己个人的所学,所得,所悟能够分享出来与大家分享,好开心~

  言归正传,需求背景是博主所在的公司为一个在线OTA公司,客户端上各个项目(酒店,机票,景区,出境之类)的订单列表接口融合在一起之后对客户的查看订单非常不方便,而且列表信息相对于客人来说过于冗余,但是列表接口又不能缺少,为了推动客户体验,将当前待使用的行程信息能够更加完整的展现给客户,于是推动了行程助手的需求。

  该需求主要目的就是将客人的历史订单摒弃掉,而将客人待出行使用的订单信息完整的表现给客人,提升客户的出行体验。

  需求下来之后,针对于我这边,机票项目而言,需要做到的不仅仅是将订单信息展现出来,围绕行程这个主题,需要将航班的动态信息也能够动态的展现给客人。

  需要解决的几个问题:

  1.航空公司信息,机场信息为静态信息,查询数据库过于浪费

  2.查询的信息较多,需要优化查询sql

  3.动态信息由于不和订单相关联的表在一个数据库中,而跨库联查不可取,需要重点解决

  问题思考过程:

  1.航空公司和机场信息这种静态信息,查库是明显耗时耗力的,航空公司的信息由于比较少,表内的记录在五十条左右,因此采用单例模式,将信息加载在内存中直接调取即可。机场信息由于存在的记录在五百条左右,而且每条信息的维度很多,因此采用了Redis这种支持List的存储系统,提高性能。

  2.查询SQL,涉及到了5张业务逻辑表的查询,与DBA确认查询索引,提高查询语句的性能。

  3.航班动态信息从供应商处推送获得会落地到本地库中,由于更新比较频繁,而且跨库查询太耗时,因此数据库这一块已经暂时放弃了,

  处理动态信息方面,博主使用了MC(Memcached)+JOB(不明白的同学百度Quartz调度系统)搭建了更新航班动态信息的缓存框架,

  主要思路是,使用JOB捞取供应商落地的信息,根据推送时间,每60秒捞取一次当前最近90秒的更新信息,同时将订单相关的一些固定信息也一并组装,同步到MC中。

  在接口内部进行查询的时候优先进入MC中查询信息,当MC中查询不到时再去库里捞取,拼装返回

  收获:

  1.逻辑上的思考需要缜密,将有可能碰到的问题列出来,逐一的思考解决方案就会找到胜利的钥匙

  2.在数据库发生瓶颈,难以达到预期效果时,巧妙的去运用缓存(单键类,Redis,MC)是一个非常好的解决方案,但是缓存的更新机制需要考虑清楚,否则会成为一个累赘

  

最新文章

  1. 多线程条件通行工具——AbstractQueuedSynchronizer
  2. Git分支管理
  3. 5.2视图中的Order by
  4. csharp: MongoDB
  5. C语言指针5分钟教程
  6. python mysqldb使用dictcursor
  7. Meta标签中的format-detection属性及含义
  8. ubuntu文件管理常用命令
  9. FireFox 插件xpi文件签名2
  10. if __name__ == '__main__':用法
  11. 转:sql篇 select from where group by having order by
  12. Java集合的选择
  13. matplotlib画图
  14. 小程序 textarea
  15. jQuery控制元素显示、隐藏、切换、滑动的方法
  16. Linux 日志切割工具cronolog详解
  17. js 或 且 非
  18. 将 Shiro 作为应用的权限基础 二:shiro 认证
  19. 查看tomcat部署的项目名
  20. TCP传输层协议的流程

热门文章

  1. rpm安装rpm-package报错:Header signature NOKEY 和 error: Failed dependencies:
  2. 03_汇编语言(n个数找最大值)
  3. linux进程间通信-XSI IPC
  4. python 标准库和第3方库的介绍
  5. 非常全面的讲解Hosts文件
  6. 探索 OpenStack 之(13):研究 Keystone
  7. (新人的第一篇博客)树状数组中lowbit(i)=i&(-i) 的简单文字证明
  8. 广度优先搜索 codevs 2806 红与黑
  9. At least one object must implement IComparable
  10. Android开发配置,消除SDK更新时的“https://dl-ssl.google.com refused”异常