我尝试过用SQL developer插入BLOB数据。但是我找不到实际用于插入BLOB数据的insert语句。
除此之外,数据库速度真的很慢。对于小文件,它可以很好地执行。但当我尝试导入50mb的avi文件到BLOB,它花了3-4分钟&仍然没有完成。当我尝试将BLOB数据导出到文件时,导出过程也很慢。我使用的是Oracle 10g Express Edition。如果数据库的速度甚至低于文件系统的速度,那么为什么要使用数据库来存储BLOB数据呢?有没有其他优化性能的方法?
发布于 2012-09-01 01:19:14
首先,您应该预期在数据库中存储BLOB的速度会比在文件系统中存储BLOB慢(有时会慢一点,通常会慢很多),但肯定不会快。将它们存储在数据库中的原因并不以性能为中心,而是例如:
群集或负载平衡方案中(共享)文件系统的
一般的经验法则是,如果这些都与您无关,您应该将您的文件存储为...文件。将元数据和路径名存储在数据库中是一种良好且常见的做法。
关于Oracle调优:有一些关于这方面的书籍。我怀疑它们在死树平装格式中的总数超过了一吨。您可能首先看一下Oracle进程的内存消耗--经验法则:如果它不到一个千兆,而您使用的是BLOB,那么您就有麻烦了。阅读不同的内存池以及如何增加内存池。速成版的一些限制可能适用。
发布于 2012-09-01 02:40:54
这不是您的sql开发人员可以使用的代码,而是使用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();
}
}https://stackoverflow.com/questions/12219734
复制相似问题