【发布时间】:2011-09-26 14:07:40
【问题描述】:
我想使用 MYSQL 作为大量文件的存储系统。 我只想读取/写入存储在列中的一部分数据(数据存储为字节),因此我不必将整个文件加载到应用程序中(因为它可以大于 GB)。 因此,简而言之,我希望在 blob 列中进行随机读/写访问,而不会将整个数据加载到内存中。 是否有可用于执行这些操作的功能?谢谢。
【问题讨论】:
我想使用 MYSQL 作为大量文件的存储系统。 我只想读取/写入存储在列中的一部分数据(数据存储为字节),因此我不必将整个文件加载到应用程序中(因为它可以大于 GB)。 因此,简而言之,我希望在 blob 列中进行随机读/写访问,而不会将整个数据加载到内存中。 是否有可用于执行这些操作的功能?谢谢。
【问题讨论】:
您可以尝试这种方法。将文件的元数据(如路径、名称等)存储在数据库中,并将文件存储在目录下。 从数据库中,您可以获取文件路径并以随机访问模式读取文件。使用文件偏移量,您可以获得所需的存储数据子集。
【讨论】:
你可以使用例如MID() [1] 切割部分 BLOB;虽然我更喜欢将文件存储在文件系统中,而不是数据库中。 MySQL 在 BLOB 上的表现相当差。
[1] http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_mid
【讨论】:
MySQL 对待blobs the same as strings (more or less):
BLOB值被视为二进制字符串(字节字符串)。它们没有字符集,排序和比较是基于列值中字节的数值。
所以所有常用的字符串函数都适用于 blob。特别是,您可以使用 substring 来抓取 blob 的一部分。
也就是说,将数 GB 的数据文件作为 BLOB 存储在关系数据库中并不是最好的做法。您最好将文件的元数据存储在数据库中,并将文件本身留在文件系统中;文件系统非常擅长管理文件,关系数据库擅长处理结构化数据。
【讨论】: