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