将大型 blob(大于内存)插入到 SQLite



请不要费心问我为什么要将 13GB(或更多(的文件写入数据库 - 我必须这样做只是野兽的本性。

我的问题是我认为它将其全部加载到内存中,我不想这样做,我需要使用尽可能少的内存将其以块或动态方式流式传输到 blob 中。

这是我目前拥有的代码:

Using fs As New System.IO.FileStream(InPutFile, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
    Using sr As New System.IO.StreamReader(fs)
        Dim data(fs.Length - 1) As Byte
        fs.Read(data, 0, fs.Length)
        Using cmd As New SQLite.SQLiteCommand(TSQLDB)
            data = IO.File.ReadAllBytes(InPutFile)
            cmd.CommandText = "UPDATE [FileSpace] SET [FileData]=@DAT WHERE [ID]=" & MyID
            cmd.Prepare()
            cmd.Parameters.Add("@DAT", DbType.Binary, fs.Length)
            cmd.Parameters("@DAT").Value = data
            cmd.ExecuteNonQuery()
            cmd.Dispose()
        End Using
        data = Nothing
    End Using
End Using

任何帮助将不胜感激:)谢谢!

我认为SQLite可能存在限制 - 仅查看 sqlite.org 网站,blob 仅限于 2147483647 字节,仅相当于大约 2GB。我找到了一个命令:SQLITE_LIMIT_LENGTH

我认为解决此问题的唯一另一种方法是让我插入它,将文件拆分为 2GB 块并以这种方式插入它们,然后在保存时将 blob 重新合并到一个文件中。没有什么是容易的!- 感谢您的评论 - 它给了我思考的食物,让我找到了这个可能的解决方案。

最新更新