如何通过JDBC将数据流式传输到MariaDB

时间:2017-03-02 12:32:50

标签: java jdbc blob mariadb

我想使用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();

1 个答案:

答案 0 :(得分:0)

简短的回答 - 你今天不能流式传输blob。此连接器始终将至少一整行读入内存。此外,MariaDB Server(以及MySQL)也不能非常高效地处理blob,它也会将整个博客加载到内存中,只在服务器端加载。如果您想要自己动手进行流式传输,也许您可​​以将blob拆分为更小的4K块,并将它们存储在专用表中的不同行中。你可以从my_blob中选择SELECT *来读取多行,并使用例如setFetchSize(1)一次读取一个块。