1. 1、名词解释

分区:将一张大表在物理上分成多个分区,逻辑上仍然是同一个表名。

分表:将一张大表拆分成多张小表,不同表有不同的表名。

两种数据组织形式的原理图如下:

图 1分表与分区的原理图

  1. 2、实验目的

本实验的目的,在于对比分区与分表技术,分析其在"大图层"(大图层指要素数量超过200万条的图层)上的适用性。

  1. 3、实验数据

实验数据为贵州省87县地类图斑数据,要素总数为6695554。根据不同的数据组织+索引形式,形成了3个不同的实验主体:

  • 分表存储+空间索引
  • 按县分区+全局空间索引
  • 按县分区+本地空间索引
  1. 4、实验过程

    1. 4.1 实验方法

在1:500、1:2000、1:10000、1:25000、1:50000、1:100000比例尺下,随机从贵州省省域内选择3个样本范围,作为空间查询时的查询范围。将6*3个样本范围分别与3个实验主体进行空间查询运算,记录每次查询的耗时。

为了使查询实验覆盖所有的使用场景,将在基于磁盘、基于内存的两种查询场景中重复上述实验。

  1. 4.2 实验算法

实验算法用来描述实现上述空间查询的计算方法。

  1. 4.2.1 分表算法

多表的算法有两种,分别命名为part_query、nopart_query,其伪代码如下:

  1. 4.2.1.1 nopart_query

根据xzq_xj (县级行政区底图),判断BR(Boundary Rectangle,范围矩形)与哪些县级行政区相交

            loop

             根据xzqdm查询县级图层名layername;

根据layername,判断BR与哪些要素相交,并返回结果;

            end loop;

  1. 4.2.1.2 nopart_query2

根据xzq_xj (县级行政区底图),判断BR与哪些县级行政区相交

        loop

            根据xzqdm查询县级图层名layername;

            得到与layername进行空间查询的SQL语句;

            用UNION ALL进行SQL语句拼接;

        end loop;

         执行拼接后的SQL语句;

  1. 4.2.2 分区算法

分区的算法有3种,分别命名为part_query、part_query2、part_query3,其伪代码如下:

  1. 4.2.2.1 Part_query

根据xzq_xj (县级行政区底图),判断BR与哪些县级行政区相交

得到相交行政区列表 xzq_lists

将xzq_lists作为查询条件之一,SQL语句样式如下:

"select shape from part_table t where xzqdm in (xzq_lists) sdo_filter(t.shape,BR))";

  1. 4.2.2.2 Part_query2

将得到行政区列表 xzq_lists的过程内嵌到SQL语句里,其样式如下:

"select shape from part_table t where xzqdm in (select xzqdm from xzq_xj t where sdo_filter(t.shape,BR)) sdo_filter(t.shape,BR))";

  1. 4.2.2.3 Part_query3

仅使用BR作为查询条件,SQL语句样式如下:

select shape from part_table t where sdo_filter(t.shape,BR));

  1. 5、实验结果

    1. 5.1 基于磁盘的查询

根据黄色斑块坐落的位置,可知:

  1. 在比例尺大于1:10000(包括)时,分区表+全局空间索引效率最高(命中7次),且part_query3算法最优(命中6次);
  2. 在比例尺小于1:10000时,分区表+本地空间索引效率最高(命中5次),且part_query2算法最优(命中3次)
    1. 5.2 基于内存的查询

  1. 在比例尺大于1:10000(包括)时,分区表+全局空间索引效率最高(命中8次),且part_query2算法最优(命中6次);
  2. 在比例尺小于1:10000时,分表+空间索引与分区表+全局空间索引效率一致(命中4次),这其中分表+空间索引所使用的nopart_query算法最优(命中4次)。
    1. 6、实验结论

    • 观察5实验结果中的两张图,横向比较,可知在该实验数据和实验条件下,不同数据组织方式和不同算法之间,其差异均不大。考虑到实验所在网络与服务器环境均非独占使用,单个查询性能可能会产生抖动性,因此上述分项结论仅作为参考,尚不能作为正式结论;
    • 该实验所用的实验数据为87县市的地类图斑数据,而全国有近3000个县市,因此样本数据较之整体数据,仍显偏小。这从另一方面说明上述分项结论仅作为参考,尚不能作为正式结论;
    • 上述实验所采集的时间数据,是在特定服务器与存储环境下得到的。在不同的设备情况下,其值会有不同。
    • 若仅以此次实验结果为准,可得出如下结论:土地调查业务,大多数的应用场景,是在大比例尺,即1:10000-1:200比例尺下的查询浏览。因此在规划数据组织方式时,应更多考虑大多数应用场景的查询效率。基于此种考虑,建议数据物理组织采用:按县分区+全局空间索引。

(未完待续)

转载于:https://www.cnblogs.com/6yuhang/p/8257112.html

Oracle Spatial分区应用研究之一:分区与分表查询性能对比相关推荐

  1. [MySQL]MySQL分区与传统的分库分表(精华)

    传统的分库分表 传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都是普通的表和库. 分库 分库的原因 首先,在单台数据库服务器性能足够的情况下,分库对于数据库性能是没有影响的.在数据库存储 ...

  2. 分区和分片的区别_Mysql分表和分区的区别、分库分表介绍与区别

    分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看: [root@BlackGhost test]# ls |grep user a ...

  3. 【高级】分表和分区的区别、分库分表介绍与区别

    分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这 ...

  4. mysql mybatis分表查询_mybatis 自动分表

    参考: 相关源码已上传至我的 github 欢迎转载,转载请注明出处,尊重作者劳动成果:https://www.cnblogs.com/li-mzx/p/9963312.html 前言 小弟才疏学浅, ...

  5. 自己简单实现分表查询(按月份分表)

    自己简单实现分表查询(按月份分表) 开发过程中某几个表需要按照特定规则分表,下面加单实现下. 数据库用的mysql model类 /** Copyright (c) 2018-2028, Chill ...

  6. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...

    之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...

  7. Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

    Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...

  8. Mycat 源码修改-实现分表规则:按天分表和取摸分表查询

    Mycat 源码修改-实现分表规则:按天和取摸功能.之前修改过源码,发现其实没什么高深的只需要自己耐心点,多花点时间去调试就可以做到了.通过调试,找到自己想要改的地方,这是关键的:在代码中表现为修改相 ...

  9. mysql mybatis分表查询_Mybatis 分表处理

    项目到后期遇到分表查询处理,但是项目已经快要开发完了而且使用通用mapper不想在改,想了一个办法在mybatis与mysql数据库连接时处理sql语句 替换相关表. 第一步,springboot采用 ...

最新文章

  1. 一致性哈希算法----- 解决memecache 服务器扩容后的数据丢失。
  2. [转]深夜无人的街道
  3. 感谢Adobe,用上了Silverlight RC0版本
  4. LeetCode 654. 最大二叉树(递归)
  5. 如何快速看透一个人?
  6. 不支持的major.minor版本52.0 [重复]
  7. 2 网段 Vlan+NAT 配置
  8. 计算机科学与技术参考论文题目关本科,优秀计算机本科论文题目推荐
  9. 【游戏开发创新】用Unity等比例制作广州地铁,广州加油,早日战胜疫情(Unity | 地铁地图 | 第三人称视角)
  10. 物联网(IOT)介绍与发展背景
  11. FPGA之旅设计99例之第十九例----OV5640上电及初始化
  12. 20幻读是什么,幻读有什么问题
  13. 花开蝶自来——回到梦开始的地方
  14. Dominant Resource Fairness: Fair Allocation of Multiple Resource Types
  15. 服务端渲染技术之Nuxt.js的详细使用
  16. 4G内存适合装哪个版本matlab,4G内存装win7 32位还是64位|单条4G内存选32位还是64位系统性能实测...
  17. 【DBeaver】安装与使用教程
  18. 致Emacs初学者+Emacs初学者必知必会
  19. CCF认证练习题-西西艾弗岛的购物中心
  20. 工程项目管理和施工项目管理立项在钉钉中应该如何设计?

热门文章

  1. 《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。
  2. 中set无效是怎么回事_一起认识下,那些我们应该知道的mysql中的变量知识点
  3. 简单io应用—流水灯控制_制作简单有趣的可调速流水灯
  4. web_cache_server -- Varnish
  5. Nginx的反向代理 和 负载均衡
  6. 最新最全的java多线程基础总结(上)
  7. C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别
  8. java里的主线程和子线程以及finally不会执行的特殊情况
  9. 成绩管理单链表文件c语言,c语言学生信息管理完整.docx
  10. 正则表达式matches_正则表达式在VBA中间是如何应用?正则表达式的实现方式?...