海量数据展示

背景

    现在我们的数据量越来越来越大,往往会有短时间渲染大量数据的要求,但是往往这些数据过大难以实时处理,整体切片花费时间又过长。在这里提出一种缓存加实时处理的方案。

准备

    软件环境,PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),数据是微软开源的房屋数据。PostGIS3.0相对与PostGIS 2.5大幅度提升矢量切片性能,并行环境表现更好。

预处理

    预处理就是将3级到12级的矢量切片事先切好。首先获取数据12级的最大最小xyz,通过这个范围生成网格,然后和数据相交得到一一对应的关系表a。
    接下来就是使用四叉树键(quadkey),四叉树有一些有意思的特性。第一,四叉树键的长度等于该瓦片所对应的图像级别;第二,每个瓦片的四叉树键的前几位和其父瓦片(上一图像级别所对应的瓦片)的四叉树键相同,下图中,第1级的 '瓦片2' 是第2级的 '瓦片20' 至 '瓦片23' 的父瓦片,第2级的 '瓦片13' 是 第3级的 '瓦片130' 至 '瓦片133' 的父瓦片。通过四叉树的这个特性把3到11级的xyz和11级的xyz建立对应关系表b,最终a和b关联可以得到三到十一级和数据的对应关系。

    根据上述内容,我们就可以生成行矢量切片了,借助golang并发,千万级面数据预处理(加上gzip压缩)大概需要16分钟。

后台服务

    预处理矢量切片生成完以后,使用golang把矢量切片全部加载进程序中,并且建立键值对,能够快速的判断请求的xyz在3-11级是否有数据并且存在数据时能快速获取。当数据请求大于十一级时候,我们使用数据库查询方式获取矢量切片。后台编写时候遇到问题,后端向前端传输大的矢量切片速度过慢。我通过数据切割方式解决这个问题。打个比方,吃一个西瓜,你一口吃不下。那我们是不是切成块吃就可以?切块就是数据分割这样能较快的传输又不影响数据完整性。

渲染

    前台渲染使用mapbox gl加载自定义矢量切片


image

image

总结

    本文方案中使用缓存少量层级提升整体渲染速度,实际前端浏览中能较为流畅。由于数据限制,方案的测试数据较为单一,可能不具有代表性。本方案预处理切片层级不宜过大,超过12级预处理性能会急剧降低。

image

参考资料:

https://www.runoob.com/python/python-func-memoryview.html
https://stackoverflow.com/questions/45455121/python-convert-memoryview-to-string
https://docs.objectrocket.com/redis_python_examples.html
https://stackoverflow.com/questions/18655648/what-exactly-is-the-point-of-memoryview-in-python
https://blog.csdn.net/why_not2007/article/details/79062351
https://www.jianshu.com/p/443719f604a2
https://docs.microsoft.com/en-us/bingmaps/articles/bing-maps-tile-system?redirectedfrom=MSDN
https://github.com/Microsoft/USBuildingFootprints
https://github.com/buckhx/QuadKey/blob/master/quadkey/tile_system.py
https://github.com/CartoDB/python-quadkey
https://www.cnblogs.com/xwgli/archive/2013/04/12/3016345.html
https://stackoverflow.com/questions/415511/how-to-get-the-current-time-in-python
http://postgres.cn/docs/postgis-2.3/ST_SetSRID.html
https://postgis.net/docs/manual-dev/ST_TileEnvelope.html
https://postgis.net/docs/manual-dev/ST_AsMVTGeom.html
https://postgis.net/docs/ST_AsMVTGeom.html
https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
https://www.postgresql.org/docs/9.5/gist-builtin-opclasses.html
https://www.postgresql.org/docs/9.5/gist-intro.html
https://blog.csdn.net/xk_zhang/article/details/52014737
https://www.cnblogs.com/LCGIS/archive/2013/03/12/2954898.html
https://blog.csdn.net/Happy52Wang/article/details/90022686
https://blog.csdn.net/a624806998/article/details/87092890
http://www.dongcoder.com/detail-1195214.html
https://www.cnblogs.com/520zm/p/10743224.html
https://pynative.com/psycopg2-python-postgresql-connection-pooling/
http://initd.org/psycopg/docs/pool.html
https://www.v2ex.com/t/351734
https://www.cnblogs.com/kaituorensheng/p/4445418.html
https://blog.csdn.net/kanon122500000/article/details/61198902

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,861评论 1 3
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,106评论 0 3
  • 原文链接 《Python数据分析》(Python for Data Analysis, 2nd Edition)第...
    李绍俊阅读 8,079评论 0 5
  • 今天有点咸🐟想做一只没有梦想的搬运工 十六进制编辑器 十六进制编辑器(二进制文件编辑器或字节编辑器)是一种允许操纵...
    Honny_Boo阅读 2,370评论 0 7
  • 梦见了一起联合murder 。我同从前一样,附属品般被她带在身边,安安静静地参与了每一步。梦里没有负罪感而奇怪,安...
    路边的制杖阅读 178评论 0 0