我试图用SQL开发插入BLOB数据。 但我无法找到它实际上是用来插入BLOB数据的INSERT语句。
除此之外,数据库的速度实在是太慢了。 对于小文件,它执行罚款。 但是,当我试图导入50 MB avi文件到BLOB,花了3-4分钟和它仍然没有完成。 当我试图BLOB数据导出到文件,导出过程也是缓慢的。 我使用Oracle 10g Express Edition的。 如果数据库速度比较慢,甚至比文件系统的速度,那么为什么数据库用于存储BLOB数据? 是否有任何其他的方式来优化性能?
我试图用SQL开发插入BLOB数据。 但我无法找到它实际上是用来插入BLOB数据的INSERT语句。
除此之外,数据库的速度实在是太慢了。 对于小文件,它执行罚款。 但是,当我试图导入50 MB avi文件到BLOB,花了3-4分钟和它仍然没有完成。 当我试图BLOB数据导出到文件,导出过程也是缓慢的。 我使用Oracle 10g Express Edition的。 如果数据库速度比较慢,甚至比文件系统的速度,那么为什么数据库用于存储BLOB数据? 是否有任何其他的方式来优化性能?
首先,你应该会在数据库中存储BLOB是(有时有点,经常显著)慢,但definitly不是不是将它们存储在文件系统速度更快。 将它们存储在一个数据库的理由没有中心关于性能,而是如:
一般的经验法则是,如果没有这些关心你的,你应该将文件存储为...文件。 存储在数据库中的元数据和路径是恕我直言好,常见的做法。
关于Oracle调优:有书撰写有关。 我怀疑它们加起来远远超过了死树,平装本形式一吨。 你可能会首先看在甲骨文进程的内存消耗 - 经验法则:如果是不到演出,并使用BLOB的,你有麻烦了。 阅读上的不同的内存池,以及如何增加他们。 快车版有些限制可能适用。
这不是你可以与你的SQL开发人员使用的代码,它是为了将一个blob使用一个StringBuffer的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();
}
}