海量空间数据库实施策略---矢量数据6

0
分享 2015-12-08
矢量数据存储类型策略
ArcSD针对不同的数据支持不同的矢量存储类型,下图是具体的每个数据库所支持的存储类型:

具体每个存储类型具体代表什么东西,大家可以查看SDE空间索引原理介绍系列
里面有针对oracle数据库的各种数据存储类型的详细介绍。
不同的存储类型的比较大的一个却别是所占有的存储空间不同,下面是以oracle数据库上三种存储类型所占有空间大小的对比:

其中以ST_GEOMETRY存储类型所占有的空间最小,次之是SDELOB,最后才是oracle的SDO_GEOMETRY,实际上三种存储方式在oracle的后台都是BLOB进行存储的,只不过ST_GEOMETRY和SDELOB方式对存储的二进制数据进行了压缩和加密处理而已。
既然在oracle数据库中后台的存储都是BLOB方式存储,那我们接下来就介绍一下BLOB的相关策略,在oracle数据库中BLOB的存储有三种策略:
第一种是表的BLOB列和常规数据类型的列放在一个快中,前提是BLOB的大小小于3192bytes,并且BLOB的ENABLESTORAGE IN ROW属性在ON的情况下,图示如下:

第二种是如果BLOB的列的大小大于3192bytes并且小于12个CHUNK,ORACLE会把BLOB列单独存储到一个segment中,并且通过LOB Locator进行查找,图示如下:

第三种是BLOB列的大小大于12个CHUNK,那oracle先通过一个LOB Locator先查到到Lob Index对象,然后再通过Lob Index查找到真正存储BLOB数据的Segment。图示如下:

从上面的三种情况可以看出来,第一种情况访问一个BLOB数据只需要读取一个块,而第二种情况需要读取两个块,而第三种情况需要读取三个块,当然是第一种情况的访问速度是最快的。那3192个bytes到底能存储多少点串呢,这个我们可以粗略的计算一下:
一个点是使用两个double来进行储存,一个double占用8个bytes,那一个点需要16个字节,除了这个因素,使用SDELOB和ST_GEOMETRY存储的数据会压缩成源数据的1/3,因此计算公式如下:
存储的点串数量=3192/16 * 3 = 600,极限情况下是存储600个点。估计大部分的数据不会超过600个点串的。所以为了能够实现第一种情况,建议把ENABLESTORAGE IN ROW选项打开,当然这也是默认的选项。
除了ENABLESTORAGE IN ROW这个选项,BLOB存储还有以下几个比较重要的控制参数,
1. CACHE参数,用来控制读取到的BLOB是否先放到Oracle的SGA区域中,默认该选项是打开,我们也推荐打开这个选项。
文章来源:http://blog.csdn.net/liufeng1980423/article/details/6270374

0 个评论

要回复文章请先登录注册