如何将巨大的 BLOB 插入 MySQL 数据库(InnoDB)?
根据 MySQL 手册,LONGBLOB 类型的字段支持最大 4 GB 的数据大小。但是这么大的数据是如何进入数据库的呢?
我尝试过使用
INSERT INTO table (bindata) VALUES ( LOAD_FILE('c:/tmp/hugefile') );
如果巨大文件的大小大于大约 500 MB,则会失败。我已将
max_allowed_packet
设置为合适的大小; innodb_buffer_pool_size
的值似乎没有影响。
我的服务器计算机运行 Windows Server 2003,并具有 2 GB RAM。我正在使用 MySQL 5.0.74-enterprise-nt。
BLOB 缓存在内存中,这就是为什么当您将 BLOB 插入数据库时,您将拥有 3 BLOB 副本。
您的 500 MB BLOB 占用了 RAM 中的 1,500 MB,这似乎达到了您的内存限制。
我不知道你使用哪个客户端/api,但是当尝试使用自己的 Java 和 Objective-C 客户端中的 blob 时,MySQL 似乎并不真正支持 blob 流。您需要足够的内存来多次将整个 blob 作为字节数组保存在 ram(服务器和客户端)中!迁移到 64 位 Linux 会有所帮助,但这不是理想的解决方案。
MySQL 不是为 BLOB 处理而设计的(对于小 BLOB 来说还可以:-)。它占用“BLOB”中存储/读取内存的两倍或三倍。
抱歉,您必须使用其他数据库(例如 PostgreSQL)才能获得真正的 BLOB 支持。