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

矢量数据存储类型策略

ArcSD针对不同的数据支持不同的矢量存储类型,下图是具体的每个数据库所支持的存储类型:

image

具体每个存储类型具体代表什么东西,大家可以查看http://blog.csdn.net/liufeng1980423/category/779418.aspx

里面有针对oracle数据库的各种数据存储类型的详细介绍。

不同的存储类型的比较大的一个却别是所占有的存储空间不同,下面是以oracle数据库上三种存储类型所占有空间大小的对比:

image

其中以ST_GEOMETRY存储类型所占有的空间最小,次之是SDELOB,最后才是oracle的SDO_GEOMETRY,实际上三种存储方式在oracle的后台都是BLOB进行存储的,只不过ST_GEOMETRY和SDELOB方式对存储的二进制数据进行了压缩和加密处理而已。

既然在oracle数据库中后台的存储都是BLOB方式存储,那我们接下来就介绍一下BLOB的相关策略,在oracle数据库中BLOB的存储有三种策略:

第一种是表的BLOB列和常规数据类型的列放在一个快中,前提是BLOB的大小小于3192bytes,并且BLOB的ENABLESTORAGE IN ROW属性在ON的情况下,图示如下:

image

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

image

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

image

从上面的三种情况可以看出来,第一种情况访问一个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区域中,默认该选项是打开,我们也推荐打开这个选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值