我想使用MariaDB
连接器将BLOB数据存储到MariaDB
,我尝试找到最有效的解决方案。现在,我使用setBlob()
或setBinaryStream()
方法存储数据。但与将数据直接传输到数据库相比,它是如此之慢。我使用流式传输Oracle数据库,一切都运行得很快。但是,由于我将数据库更改为MariaDB
,因此直接流式传输不起作用。
直接流媒体的代码如下:
Blob localBlob = lrs.getBlob("MyData");
try {
los = localBlob.setBinaryStream(1);
} catch (Throwable t) {
}
int countBytesRead;
// md5 hash
InputStream dis = new DigestInputStream(inputStreamArgument, localHash);
byte[] localBuffer = new byte[BUFFER_SIZE];
while ((countBytesRead = dis.read(localBuffer)) >= 0) {
los.write(localBuffer, 0, countBytesRead);
}
los.close();
inputStreamArgument.close();
lstmt.close();
答案 0 :(得分:0)
简短的回答 - 你今天不能流式传输blob。此连接器始终将至少一整行读入内存。此外,MariaDB Server(以及MySQL)也不能非常高效地处理blob,它也会将整个博客加载到内存中,只在服务器端加载。如果您想要自己动手进行流式传输,也许您可以将blob拆分为更小的4K块,并将它们存储在专用表中的不同行中。你可以从my_blob中选择SELECT *来读取多行,并使用例如setFetchSize(1)一次读取一个块。