简记某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 ...
随机推荐
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 04.SQLServer性能优化之---读写分离&数据同步
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 过段时间再继续写文章吧,本来准备把SQLServer一个系列写完的,最近状态很差很不好, ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- Kooboo CMS技术文档之一:Kooboo CMS技术背景
语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...
- 文档对象模型DOM通俗讲解
转自:http://www.jb51.net/article/42671.htm 在开始之前先说一点,DOM是非常容易理解的,但是大家说的太官方,让人很是难于理解,我们就用非常简单的语言翻译一遍.加深 ...
- 如何手动安装MySql
想安装当然要先有一个MySql的安装包 这里使用的是mysql-5.7.12-winx64 安装包百度云:http://pan.baidu.com/s/1kVAuXuv 密码:hr39 1.要将压缩 ...
- 如何搭建git服务器
一.前言 现在越来越多的公司用git进行版本控制,不过git是默认是开源的,如果私有的话是需要付费的,如果不想付费自己可以搭建一个git服务器用来版本控制. 二.服务器端操作 1.安装git sudo ...
- Python学习实践------正向最大匹配中文分词
正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...
- 多用多学之Java中的Set,List,Map
很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...