|
|
|
|

BLOB数据在oracle 地理数据库中的存储方式

BLOB (binary large object)是数据库中用来存储二进制文件的字段类型.它是几年前Oracle公司实现的替代LONG RAW 方式存储二进制数据的技术。 BLOB的结构分为3部分:BLOB列( BLOB columns ), LOB 段(LOB segment),LOB索引(LOB index)。BLOB列存储L...

作者:yyilyzbc来源:GIS大讲堂|2009年12月22日
    BLOB (binary large object)是数据库中用来存储二进制文件的字段类型.它是几年前Oracle公司实现的替代LONG RAW 方式存储二进制数据的技术。
    BLOB的结构分为3部分:BLOB列( BLOB columns ), LOB 段(LOB segment),LOB索引(LOB index)。BLOB列存储LOB定位器(LOB locator)(36字节)和二进制数据(数据要小于 3,965 字节,并且in-row storage 选项没有被禁用)。
    注意:ESRI的测试表明使用in-row storage 方式能够达到最高的效率,因此不要禁用in-row storage选项。
    如果二进制数据大于 3,964 字节,BLOB列中的in-row storage空间不会被分配,LOB定位器指向存储在 LOB段中的二进制数据。因此,启用in-row storage 选项的BLOB列最少空间是36字节(只分配空间给LOB定位器),最大4000字节(存储LOB定位器和 3,964 字节的二进制数据)。
    LOB段被分成很多chunk, chunks必须是oracle数据块大小的整数倍,例如如果oracle数据块的大小是8k,LOB段最小chunk大小是8k。如果存储在LOB段中的数据是5,000 字节,并且假设oracle数据块的大小是8k,那么在这个chunk中有3,192字节的空间空闲。从 LONG RAW 到BLOB的方式转换数据的时候需要更多的存储空间(大概会增长30%)。
    经验表明,chunk大小设置为8k能够在浪费最少空间的基础上达到最佳I/O的效率。  
    chunk大小设置为16k比chunk大小设置为8k浪费更多的空间。因此为了减少空间的浪费,有二种选择:1)重新创建数据库,把块大小设置为8k。2)在块大小为8k的tablespace上面创建LOB段,并且需要在SGA中分配一个8k的缓冲缓存。
    Chunk的大小为4k或者2k的时候会更节省空间,但会降低I/O的效率。
    LOB索引只有在LOB段的Chunk个数大于12的时候使用,当Chunk个数小于等于12的时候,通过LOB定位器直接指向二进制数据,当Chunk个数大于12的时候LOB定位器指向LOB索引,通过LOB索引访问二进制数据。
    下面三个图分别是上面提到的三种情况。
图1 ,二进制数据为3000字节 < 3,964字节 
 
图2 ,二进制数据为81,920字节 >3,964字节 但小于12*8k字节

图2
图三,二进制数据为106,496 字节 > 12*8k字节

上一篇:Geodatabase和ArcSDE中文教程

下一篇:ArcSDE 设置DBTUNE参数存储BLOB列