MySQL blob:如何仅获取存储数据的子集

Uma*_*mil 1 mysql blob

我想使用 MYSQL 作为大量文件的存储系统。我只想读/写存储在列中的一部分数据(数据存储为字节),所以我不必将整个文件加载到应用程序中(因为它可以大于 GB)。因此,简而言之,我希望在 blob 列中进行随机读/写访问,而无需将整个数据加载到内存中。是否有可用于执行这些操作的函数?谢谢你。

mu *_*ort 5

MySQL 将blob 视为与字符串相同(或多或少)

BLOB值被视为二进制字符串(字节字符串)。它们没有字符集,排序和比较是基于列值中字节的数值。

所以所有常用的字符串函数都适用于 blob。特别是,您可以使用substring仅抓取 blob 的一部分。

也就是说,将数 GB 数据文件作为 BLOB 存储在关系数据库中并不是最好的做法。您最好将文件的元数据存储在数据库中,而将文件本身留在文件系统中;文件系统非常擅长管理文件,关系数据库擅长处理结构化数据。

  • 我知道这不是最好的选择,但是使用 mysql 您可以获得很大的灵活性:MySQL 支持集群,因此您可以在服务器之间分发文件。您可以备份您的数据库并恢复。此外,数据库会自动处理锁定。以前我写了一个软件来按照你描述的方法处理大量文件:这是浪费时间,因为每次操作你都必须检查文件是否在那里,是否被锁定,系统是否正在执行操作在上面。备份和恢复很痛苦,因为你必须让数据库与文件系统同步等等...... (2认同)