7

如何将巨大的 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。

4

2 回答 2

2

BLOB 缓存在内存中,这就是为什么在将BLOB 插入数据库时​​将拥有3 个副本的原因。

您的 500 MB BLOB 在 RAM 中占用 1,500 MB,这似乎达到了您的内存限制。

于 2009-06-03T15:47:34.613 回答
1

我不知道您使用哪个客户端/api,但是当尝试使用来自自己的 Java 和 Objective-C 客户端的 blob 时,MySQL 似乎并不真正支持 blob 流。您需要足够的内存来将整个 blob 作为字节数组多次保存在 ram(服务器和客户端)中!迁移到 64 位 linux 会有所帮助,但不是理想的解决方案。

MySQL 不是为 BLOB 处理而设计的(适用于小型 BOB :-)。它占用了要在“BLOB”中存储/读取的 ram 的两倍或三倍。

抱歉,您必须使用其他数据库(如 PostgreSQL)才能获得真正的 BLOB 支持。

于 2009-06-03T15:53:46.953 回答