在 MySQL 中处理巨大的 Blob?

问题描述 投票:0回答:2

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

mysql blob
2个回答
2
投票

BLOB 缓存在内存中,这就是为什么当您将 BLOB 插入数据库时,您将拥有 3 BLOB 副本。

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


1
投票

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

MySQL 不是为 BLOB 处理而设计的(对于小 BLOB 来说还可以:-)。它占用“BLOB”中存储/读取内存的两倍或三倍。

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

© www.soinside.com 2019 - 2024. All rights reserved.