在编写聚合点数据处理过程中,得到如下数据:
方式类型为:
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、比较郁闷的是,这种使用数据库实体表做临时表的方法,显然不是最好的,可是目前想不到更好的解决方案,而且,频繁的对数据库进行建表、删表、插入、删除操作,对数据库的效率影响很大。