文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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项目的优化之路的更多相关文章

  1. 新浪微博iOS客户端架构与优化之路

    新浪微博iOS客户端架构与优化之路   随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类 ...

  2. CSS代码重构与优化之路(转)

    CSS代码重构与优化之路   阅读目录 CSS代码重构的目的 CSS代码重构的基本方法 CSS方法论 我自己总结的方法 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多 ...

  3. VUE项目性能优化实践——通过懒加载提升页面响应速度

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 最近我司因业务需求,需要在一个内部数据分析平台集成在线Excel功能,既然我 ...

  4. 微博MySQL优化之路--dockone微信群分享

    微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问 ...

  5. 阿里巴巴 web前端性能优化进阶路

    Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...

  6. 仿百度壁纸客户端(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化

    仿百度壁纸客户端(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度 ...

  7. Golang 优化之路——bitset

    写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现.但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来.内存占用高又会带来一些 ...

  8. 专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路(HipHop,HHVM)

    专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路 http://www.infoq.com/cn/articles/interview-alibaba-zhaohaiping

  9. 仿百度壁纸client(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化

    仿百度壁纸client(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager + Fragm ...

随机推荐

  1. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  2. MongoDB系列(一):简介及安装

    什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...

  3. PHP中PDO事务的使用方法

    事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行. 在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操 ...

  4. 游戏AI系列内容 咋样才能做个有意思的AI呢

    游戏AI系列内容 咋样才能做个有意思的AI呢 写在前面的话 怪物AI怎么才能做的比较有意思.其实这个命题有点大,我作为一个仅仅进入游戏行业两年接触怪物AI还不到一年的程序员来说,来谈这个话题,我想我是 ...

  5. JQuery中的siblings()是什么意思

    jQuery siblings() 方法返回被选元素的所有同胞元素,并且可以使用可选参数来过滤对同胞元素的搜索. 实例演示:点击某个li标签后将其设置为红色,而其所有同胞元素去除红色样式. 1.创建H ...

  6. 餐饮连锁公司IT信息化解决方案一

             从餐饮企业的信息化需求来说,没有哪一种解决方案能满足所有餐饮企业的信息化建设需要.不同的餐饮业态有不同的业务流程,不同业态的信息化解决方案是目前餐饮企业信息化建设急需的,这种一站式整 ...

  7. Highcharts中国地图热力图

    最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...

  8. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...

  9. MySQL全文索引 FULLTEXT索引和like的区别

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()-AGAIN ...

  10. Linux网络驱动--snull

    snull是<Linux Device Drivers>中的一个网络驱动的例子.这里引用这个例子学习Linux网络驱动. 因为snull的源码,网上已经更新到适合最新内核,而我自己用的还是 ...