|
|
|

WebGIS项目中运用mysql操控点库进行千万条数据坐标转化时的分表分区优化计划

1. 布景 项目中有1000万条前史檀卷,为某当地坐标系数据,咱们的实在需求是将当地坐标系坐标反转成WGS84坐标,假如现在需求将其转化成百度坐标系数据。惯例计划是先建立好整个该市的本地坐标和百度坐标之间的操控点库后再进行转化。但是在详细施行中发现...

作者:naaoveGIS来历:naaoveGIS|2017年01月29日

1. 布景

项目中有1000万条前史檀卷,为某当地坐标系数据,咱们的实在需求是将当地坐标系坐标反转成WGS84坐标,假如现在需求将其转化成百度坐标系数据。惯例计划是先建立好整个该市的本地坐标和百度坐标之间的操控点库后再进行转化。但是在详细施行中发现转化特别慢,因为操控点库也有200多万条记载,大约一个点需求一秒钟才干转化完。

2.将Update变成Insert要害字段值的优化——优化1

最开端选用的是坐标转化完后,直接update前史檀卷表。因为update的功率是相对低的,尤其是有一千万条记载时,即便对主键也做了索引,仍然功率不高。这儿便选用新建一张空表再insert的计划。一起考虑到不必要的字段太多,数据量太大,所以只将前史檀卷的主键和坐标insert到新表中的计划进行优化。大约一个坐标转完可所以0.9秒左右,有必定进步,但不是特别显着。

3进行分表的优化——优化2

原始算法的转化过程是:先从前史檀卷表中获取一条记载,再依据记载坐标去操控点库获取该坐标对应的四角坐标的坐标值,然后再依据算法转化。

最显着的瓶颈将出现在:

a.从前史檀卷中获取坐标的时刻。

b.从操控点库中获取到两条记载(左上角操控点对,右下角操控点对)的时刻。

能够幻想,每次遍历完好操控点库是最耗费功率的当地。所以这儿将选用对操控点库进行分库的优化办法。详细思路为,将操控点库依照每隔2万米,分割成一个独立的表。当坐标进行转化时,首要算出坐标落在哪个操控点表中,然后查询该表进行转化。

 

现在测验将操控点库分成了16个表,功率进步到一秒钟能够转化5个点,大约也便是0.2秒转化一个。能够预见假如分更多表功率将更大的进步。不过考虑到防止数据过分碎片化不利于办理。这儿将再进行分区的优化测验。

 

4.进行分区的优化——优化3

Mysql中供给了Range、List、Hash、Key四种分区办法,这儿因为是地舆坐标规模,所以选用Range来进行分区。现在将进行每5000M的规模做一个分区。

 

改完后功率变成了一秒能够转化20个左右坐标。

5.再次优化刺进数据——优化4

因为待转化数据太多,导致刺进数据在进入几十万条后显着变慢。而且之前是转化完一条就立马刺进,这也导致数据库操作频频,功率下降。

所以这儿改成:

a.批量刺进,即以事物方式一次刺进千条数据。

b.分表刺进,当刺进满50万条后,则创立新的表,持续刺进。

这次修改后,功率又进步不少,大约到每秒转化30多个点。

6.代码等级优化,敞开多线程——优化5

启用多线程进行转化,现在敞开四个线程。转化功率能够到达每秒100个左右。

 

 -----欢迎转载,但保存版权,请于显着处标明出处:

上一篇:以项目谈WebGIS中Web制必威现金回扣的规划和完成

下一篇:WebGIS中等值面展现的相关计划简析