python - 如何用 MySQL 分块检索一行数据
问题描述
我们的旧系统过去常常将大量二进制数据直接放入数据库,例如(我知道这是糟糕的设计,但兼容性是第一位的):
CREATE TABLE data_table (
id int PRIMARY KEY AUTO_INCREMENT,
data longblob
);
运行时,系统应该从数据库中检索一行数据(使用MySQL-python
)并对数据做一些事情:
# simplified, removed some error-handling logic
connection = MySQLdb.connect(host='xxx', port='xxx', user='xxx', passwd='xxx', db='xxx')
with connection.cursor(cursorclass=MySQLdb.cursors.DictCursor) as cursor:
cursor.execute('SELECT data FROM data_table WHERE id = %s', (123,))
data = cursor.fetchall()[0]['data']
# do some stuff with the data
问题来了:单行数据可能非常大(>1GB),而系统运行在内存限制为1GB的容器中,所以即使取单行也会导致OOM(Out Of Memory)错误,系统崩溃。
有没有办法将一行中的数据直接流式传输到外部存储,或者以块的形式检索数据以避免 OOM 错误?提前致谢。
编辑:我们使用的是 MySQL 5.7,但如果对解决此问题有帮助,升级 MySQL 版本也是可以接受的。
解决方案
推荐阅读
- php - 每当创建另一个自定义帖子类型时创建自定义帖子类型
- android - 如何在 Android 中创建 LeftSheet
- android - Ionic Framework 无法在 android 模拟器上运行
- java - 如何在 Android 中离线运行 Dokka
- java - 如何将字节中的负数添加到缓冲区中
- ajax - ajax成功响应后如何调整颜色框的大小
- java - 如何捕获 Spring Security Matchers 抛出的异常?
- google-cloud-platform - googlecompute 创建实例时出错:等待实例创建时超时
- hibernate - 如何更改 Hibernate 事务的隔离级别
- javascript - 如何访问本地 JSON 数组中的图像