java - Oracle Blobs - 存储大小还是计算?

标签 java oracle spring jdbc

我正在编写一个通用的 Http 资源托管服务,并将较大的对象作为 BLOB 存储在 Oracle 数据库中。我希望能够在返回存储对象时设置“Content-Length” header ,这意味着我需要在开始将 BLOB 写入客户端之前知道它的大小(我知道我可以使用分块编码,并且在某些情况下是)。有没有人对调用 dbms_lob.getlength() 对每次读取的性能影响有任何经验,或者我应该计算 INSERT 上的 BLOB 大小并将其存储在表中?平均而言,我希望写入速率高于读取速率。我现在正在编写基准测试以尝试查看影响是什么,但这似乎是一个常见的问题,我认为有人可能已经解决了这个问题。此外,使用 JDBC/Spring 3,我将如何计算写入时的 BLOB 大小? (而且我不能使用触发器或存储过程)谢谢。

最佳答案

我做了一个快速检查,从表中选择了一个 BLOB,然后是 LENGTH(BLOB) 和 DBMS_LOB.GETLENGTH(BLOB)。 选择 BLOB 本身时,我得到了 44 个一致的获取。当我选择长度(通过任何一种方法)时,我得到了 7 个一致的结果。

基于此,当我获得长度时,它不会检索整个 blob 并计算长度。明智的做法是假设它存储在 BLOB 开头的长度(就像存储 VARCHAR2 值的长度一样)并且直接使用它。

因此,导出长度而不是存储长度应该不会有很大的开销。它还减少了不一致的可能性。

关于java - Oracle Blobs - 存储大小还是计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410864/

相关文章:

java - 我想在执行 main() 之前打印 "Hello"

java - BFILE 定位器可以指向不同文件管理器上的目录吗?

xml - 从 BPEL 中的 SOAP 主体请求字符串中提取 XPath

java - Spring Boot 和上下文路径

java - 无法解析配置类,Spring

java - 服务器返回 HTTP 响应代码 : 405 for URL instagram access token api

java - 修改Java单元测试中多个bean中使用的参数值

java - 如何从 CSV 文件的某些字段创建 h2 数据库

oracle - 是否可以为 session 设置默认的 ORACLE dblink 并避免 @dblink_name 后缀

spring - 同一张表的 innerJoin 的 Querydsl