『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

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

BLOB数据在oracle 地理数据库中的存储方式
BLOB (binary large object)是数据库中用来存储二进制文件的字段类型.它是几年前Oracle公司实现的替代LONG RAW 方式存储二进制数据的技术。

       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数据块的大小是8kLOB段最小chunk大小是8k。如果存储在LOB段中的数据是5,000 字节,并且假设oracle数据块的大小是8k,那么在这个chunk中有3,192字节的空间空闲。从 LONG RAW BLOB的方式转换数据的时候需要更多的存储空间(大概会增长30%)。

       经验表明,chunk大小设置为8k能够在浪费最少空间的基础上达到最佳I/O的效率。 

       chunk大小设置为16kchunk大小设置为8k浪费更多的空间。因此为了减少空间的浪费,有二种选择:1)重新创建数据库,把块大小设置为8k2)在块大小为8ktablespace上面创建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字节

 

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


      京ICP备2025132830号-1 京公网安备 号