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

时间:2013-05-11 10:27:23

标签: database filesystems document endianness

我已经阅读了很多关于数据库与文件系统存储文件的讨论。这些讨论大多谈论图像和媒体文件。我的问题是:

1)相同的参数是否适用于存储.doc,.pdf,.xls,.txt?我应该注意哪些文档文件有什么特别之处?

2)如果我以二进制形式存储在数据库中,如果我的主机交换机器会有问题吗?例如,我在big-endian机器上插入数据库,它被移植到一个小端机器,然后我尝试提取(例如,写入文件,将其发送到我的桌面,然后尝试打开)。

感谢任何指导!

1 个答案:

答案 0 :(得分:0)

1)是的,几乎相同的参数适用于存储PDF等等......任何被压缩的内容也会浮现在脑海中。

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

定义二进制文件格式以便它们是字节式可移植的另一种方法是支持二进制字段的字节序,并在标题中包含一个标记来说明使用了哪一个。打开文件时,读者会查阅标记。这样,文件可以在写入它的同一主机或具有相同字节序的其他主机(这是常见情况)上稍微更有效地回读,而相反字节序的主机需要花费更多的精力。

对于数据库,假设您正在使用类似blob的字段类型,当您阅读时,您将获得相同的字节流,因此您不必担心数据库的字节顺序客户端或服务器。

2)这取决于数据库。数据库可以使用与任何字节顺序兼容的基础磁盘格式,方法是定义其磁盘格式,如上所述。

数据库通常不是为了实现其底层文件格式的可移植性,考虑(正确地)将底层数据文件移动到具有不同字节序的数据库主机是很少见的。例如,根据this answer,MySQL的MyISAM不是可移植的。

我认为你不必太担心这个问题。如果数据库服务器切换到不同字节序的主机,确保数据仍然可读是这个过程的重要一步,DBA处理任务(也许你自己?)不会忘记这样做,因为如果他们这样做忘记了,那么什么都行不通(也就是说,破损不仅限于二进制BLOB!)