数据库与文件系统 - 对于非图像文件和字节数

问题描述:

我读过关于数据库与文件系统存储文件的许多讨论。这些讨论大多讨论图像和媒体文件。我的问题是:数据库与文件系统 - 对于非图像文件和字节数

1)相同的参数是否适用于存储.doc,.pdf,.xls,.txt?对于我应该注意的文档文件有什么特别之处? 2)如果我以二进制形式存储在数据库中,如果我的主机交换机器,会不会有endian问题?例如,我将数据插入到big-endian机器中,然后将其移植到小端机器上,然后尝试提取(例如,写入文件,将其发送到我的桌面,然后尝试打开)。

感谢您的任何指导!

1)是的,几乎相同的论点适用于存储PDF和什么......任何被压缩的东西也可以想到。

如果想要在不同字节序的主机之间移植,那么每个非文本文件格式都必须处理字节序问题。他们主要是通过定义文件中长度超过一个字节的所有二进制字段的字节序应该是什么。写入和读取格式的软件必须特别注意字节交换,如果它运行在相反端的平台上。图像与其他二进制文件格式没有区别。选择是任意的,但大端(网络字节顺序)是一种流行的选择,尤其是在网络软件中,因为C中的宏无处不在,几乎可以自动处理这些宏。

另一种定义二进制文件格式以便它们可以移植的方式是支持二进制字段的字节顺序,并在标题中包含一个标记以表明哪一个被使用。在打开文件时,读者请参考标记。通过这种方式,可以在写入文件的主机或具有相同字节序的其他主机(这是常见的情况)下稍微更高效地读取文件,而反向字节序的主机需要花费更多的努力。

至于数据库,假设您使用的字段类型像blob,当您阅读您所写的任何内容时,您将获得完全相同的字节流,因此您不必担心该字节的字节顺序数据库客户或服务器。

2)这取决于数据库。通过定义上述的磁盘格式,数据库可以使用与任何字节序兼容的底层磁盘格式。

尽管考虑(正确地)考虑将底层数据文件移动到不同字节顺序的数据库主机,但数据库并不经常针对其底层文件格式的可移植性。例如,根据this answer,MySQL的MyISAM不是可移植的。

虽然我不认为你需要担心这一点。如果数据库服务器被切换到不同的字节序的主机,确保数据保持可读性是该过程的一个重要步骤,并且DBA处理任务(或许你自己?)不会忘记这么做,因为如果他们这样做忘了,那么什么都不会工作(也就是说,破坏不会局限于二进制BLOB!)