简记某WebGIS项目的优化之路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
1. 背景
该项目为研究生时的老师牵头,个人已毕业数年,应老师要求协助其进行了该项目的管理。
项目组能获取到全球主要作物的生长指标,以及降水、温度等影响作物生长的指标数据。面对繁琐冗长的大量遥感数据,致力让广大没有遥感专业背景的用户了解到全球各农作物的生长情况,为用户提供一个可视化的全球农情遥感数据展示。
网站包括的功能有:
多种指标(NDVI、PAR、温度、降水等)的展示。
反演影像展示。
聚类产品展示。
产量及价格指数展示等。
2. 初始架构(1.0版本)——传统方案
2.1架构描述
由于对方已采购了SQLSERVER和ARCGIS SERVER,期望将这两款软件用上,所以初始版本的架构数据库采用了SQLSERVER,地理服务器采用了AGS,服务端基于JAVAEE,前端采用AGS JS。
在展示中,对于指标数据(全球地图)遍历,并且根据读出的指数值再逐个添加样式,最后用graphic逐个画出。 影像数据用MXD发布到ARCGISSERVER,包括边界( 国家、MRU、MPZ等)数据。
2.2架构未解决的问题
此架构开发完DEMO后,便遇到了几个必须解决的问题。
问题1:进入系统后,全球化地图(基于graphiclayer)显示缓慢。
问题2:影像成果数据各指数产品,每周每旬每月均会增加。如果依靠人工发布至AGS,首先无法实现智能化;其次AGS上一年增加上千个影像的发布,很显然是不现实的。
3. 从数据处理进化架构(2.0版本)
3.1架构进化描述
a.开发自动切图程序,扫描指定文件夹,当影像下载至指定文件夹时则进行影像切图将其转移至目标文件夹。
b.对全球尺度SHP数据进行简化,使数据量大大减小。
c.将SHP数据处理为GeoJson文本后,再进行压缩为PBF格式,并且开启Tomcat中的GZIP压缩,进一步减少数据请求量大小。
d.对所有前端JS文件进行压缩打包,减少请求JS时的连接数。
总结:
舍弃AGS,将影像瓦片和SHP数据本地化,并且尽量减少JS请求个数。
3.2架构未解决的问题
随着需求进一步增加,要求增加国内县市级数据(2000+县),并且按作物产区显示反演影像。目前的数据库设计会导致每张指数表中数据量激增,随时过一千万。系统前端的展示十分卡顿。
4.从数据库层面开始进化之3.0版本
4.1架构进化描述
a.仔细分析业务后对数据库进行分表,即按照指数和地域来进行分表,使每张数据表的大小大大降低。
b.针对影像按产区展示需求,增加地图的MASK功能。
4.2架构未解决的问题
由于之前均是基于个人服务器开发,用户后又提出希望将系统部署至阿里云上,于是对架构提出了新的规划。
5.从个人服务器转移至阿里云的进化(4.0版本)
5.1架构进化描述
a.云服务器采用Linux系统,数据库更换成Mysql。在服务器上搭建tomcat+javaee+mysql的架构。
b.由于切图程序为AE开发,所以这里将切图程序部署在windows服务器上,其切图成功后再将瓦片自动转移至指定目录。
5.2架构未解决的问题
在云服务搭建好后,系统开始投入使用,发现即使分表了,由于全球数据过多,依然导致每张指数表快接近一千万。系统又开始卡顿。
6.从索引、缓存、部署上进行进化(5.0版本)
6.1架构进化描述
a.增加合理的索引机制,如mysql的组合索引(mysql中的组合索引的各组合字段顺序比较有学问http://blog.sina.com.cn/s/blog_46d93f1901017biz.html)。
b.优化SQL语句,同样在mysql中between的使用也大有讲究,如果使用不当(查询内容占表的16%时会自动全表查询)会导致索引无效,而用IN则无此问题。还有针对Where字句顺序的调整等。
c.增加mysql的数据库级别缓存。
d.使用ehcache缓存。
e.采用CDN。
f.部署nginx,将瓦片文件夹等做静态资源代理,实现最大限度的静动态文件分离。
7.总结
1.需求总是不断变化的,我们即没有必要使用成本最高的实施方案,也不能总是选用没有扩展空间的方案,快一步就刚刚好。
2.一些必要的优化知识得铭记。
数据库层面:加索引(单列、组合),分表,SQL优化(逻辑和语法),分库。
服务器层面:GZIP,反向代理,集群水平扩展。
前端:代码合并压缩,通过CSS sprites来整合图像,图像压缩,CDN(但内网无法使用),样式修改需要放一起。
最后上一张系统图:

-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

简记某WebGIS项目的优化之路的更多相关文章
- 新浪微博iOS客户端架构与优化之路
新浪微博iOS客户端架构与优化之路 随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类 ...
- CSS代码重构与优化之路(转)
CSS代码重构与优化之路 阅读目录 CSS代码重构的目的 CSS代码重构的基本方法 CSS方法论 我自己总结的方法 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多 ...
- VUE项目性能优化实践——通过懒加载提升页面响应速度
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 最近我司因业务需求,需要在一个内部数据分析平台集成在线Excel功能,既然我 ...
- 微博MySQL优化之路--dockone微信群分享
微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问 ...
- 阿里巴巴 web前端性能优化进阶路
Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...
- 仿百度壁纸客户端(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化
仿百度壁纸客户端(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度 ...
- Golang 优化之路——bitset
写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现.但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来.内存占用高又会带来一些 ...
- 专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路(HipHop,HHVM)
专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路 http://www.infoq.com/cn/articles/interview-alibaba-zhaohaiping
- 仿百度壁纸client(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化
仿百度壁纸client(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager + Fragm ...
随机推荐
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- nohup程序后台执行
Linux常用命令,用于不挂断的执行程序. nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应 ...
- 2.WindowsServer2012R2装完的一些友好化设置
网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis 1.桌面图标(控制面板里面屏蔽了,得自己输 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- 如何使用dos命令打开当前用户、当前日期、当前时间以及当前用户加当前时间?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select user();当前用户 select cur ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- ASP.NET MVC Model绑定(三)
ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...