在编写聚合点数据处理过程中,得到如下数据:
方式类型为:
A:临时表为公共数据库表,不停的插入删除临时表,获取分析数据,数据每完成一条,写入一次
B:临时表为处理服务器内存中的DataTable结构,数据写入采用buffer方式,每个比例尺写入一次
C:每个图层创建一个临时表,生成的数据采用buffer方式保存,不使用事务机制
持续时间 | 数据量 | 数据生成点 | 方式类型 |
3:58 | 3978 | 1530 | A |
0:22 | 3978 | 2158 | B |
0:34 | 3978 | 2160 | C |
44:17 | 35607 | 20654 | A |
36:49 | 35607 | 27078 | B |
9:39 | 35607 | 27066 | C |
1:05:46 | 215492 | 21453 | A |
8:33:20 | 215492 | 39479 | B |
0:35:56 | 215492 | 39447 | C |
说明:B、C是的聚合范围为3厘米,A为5厘米,所以会有出入。选取起始点是随机的,所以B、C的生成点会不一样。
结论:
1、通过观察、分析以上数据,可以知道使用DataTable对于小数据量(千级)的数据查询是很快的,万级效率就一般了,而到了十万级别效率就非常低了。
2、Oracle数据库在无索引的全表遍历上的效率在千级数据上没有什么优势,但是万级以上,他在这里的优化,效率就显而易见了。
3、比较郁闷的是,这种使用数据库实体表做临时表的方法,显然不是最好的,可是目前想不到更好的解决方案,而且,频繁的对数据库进行建表、删表、插入、删除操作,对数据库的效率影响很大。