我尝试使用 SQL 开发人员插入 BLOB 数据。但我找不到实际用于插入 BLOB 数据的插入语句。
除此之外,数据库速度真的很慢。对于小文件,它执行得很好。但是当我尝试将 50 mb avi 文件导入 BLOB 时,花了 3-4 分钟,但仍然没有完成。当我尝试将 BLOB 数据导出到文件时,导出过程也很慢。我使用的是 Oracle 10g Express Edition。如果数据库速度甚至比文件系统速度还慢,那么为什么要使用数据库来存储 BLOB 数据呢?有没有其他方法可以优化性能?
首先,您应该期望将 BLOB 存储在数据库中(有时会慢一些,通常会显着)慢,但肯定不会比将它们存储在文件系统中快。将它们存储在数据库中的原因不在于性能,而在于例如:
一般的经验法则是,如果您不关心这些,您应该将文件存储为 ... 文件。将元数据和路径名存储在数据库中是恕我直言的好习惯和常见做法。
关于 Oracle 调优:有相关书籍。我怀疑以死树平装书格式将它们加起来远远超过一吨。您可能首先查看 Oracle 进程的内存消耗 - 经验法则:如果它小于一个 gig 并且您使用 BLOB,那么您就有麻烦了。阅读不同的内存池以及如何增加它们。速成版可能有一些限制。
这不是您可以与 sql-developer 一起使用的代码,它是使用 StringBuffer 来插入 blob 的 Java 代码。希望它会有用:
private void addBlob(oracle.jdbc.OracleConnection oracleConn, StringBuffer content) throws Exception
{
PreparedStatement st = null;
try {
oracle.sql.BLOB blob = oracle.sql.BLOB.createTemporary(oracleConn, true, oracle.sql.BLOB.DURATION_SESSION);
blob.setBytes(1, content.toString().getBytes("UTF-8"));
st = oracleConn.prepareStatement("INSERT INTO MYTABLE (id, content) VALUES (MYTABLE_S.NEXTVAL, ?)");
st.setBlob(1, blob);
st.execute();
st.close();
}
catch (Exception e) {
utils.writeLog("Blob insertion Failed", e, utils.ERR);
throw e;
}
finally{
st.close();
}
}