0

ファイルを格納するためのデータベースとファイル システムに関する多くの議論を読みました。これらの議論のほとんどは、画像とメディア ファイルに関するものです。私の質問は:

1) .doc、.pdf、.xls、.txt の保存にも同じ引数が適用されますか? ドキュメント ファイルに関して特に注意すべきことはありますか?

2) バイナリとしてデータベースに保存する場合、ホストがマシンを交換するとエンディアンの問題は発生しますか? たとえば、ビッグ エンディアンのマシンでデータベースに挿入し、リトル エンディアンのマシンに移植してから、抽出を試みます (たとえば、ファイルに書き込み、デスクトップに送信してから開こうとします)。

ご指導ありがとうございます。

4

1 に答える 1

0

1) はい、ほとんど同じ議論が PDF などの保存にも当てはまります... 圧縮されているものも思い浮かびます。

テキスト以外のすべてのファイル形式は、異なるエンディアンのホスト間で移植できるようにする場合、エンディアンの問題に対処する必要があります。彼らは主に、ファイル内の 1 バイトより長いすべてのバイナリ フィールドのエンディアンを定義することによってそれを行います。フォーマットを読み書きするソフトウェアは、反対のエンディアンのプラットフォームで実行されている場合、バイト スワップに特別な注意を払う必要があります。イメージは、他のバイナリ ファイル形式と同じです。選択は任意ですが、ビッグ エンディアン (ネットワーク バイト オーダー) は、これをほぼ自動的に処理する C のマクロが遍在しているため、特にネットワーク ソフトウェアでは一般的な選択です。

バイナリ ファイル形式を定義してエンディアンに移植可能にするもう 1 つの方法は、バイナリ フィールドのいずれかのエンディアンをサポートし、どちらが使用されたかを示すマーカーをヘッダーに含めることです。ファイルを開くと、読者はマーカーを調べます。そうすれば、ファイルが書き込まれた同じホストまたは同じエンディアンを持つ他のホスト (一般的なケース) で、ファイルをわずかに効率的に読み取ることができますが、エンディアンが反対のホストはもう少し労力を費やす必要があります。

データベースに関しては、blob のようなフィールド タイプを使用していると仮定すると、書き込みとまったく同じバイトストリームが返されるため、データベース クライアントまたはサーバーのエンディアンを気にする必要はありません。 .

2)それはデータベースによって異なります。データベースは、上記のようにオンディスク形式を定義することにより、あらゆるエンディアンと互換性のある基本的なオンディスク形式を使用する場合があります。

ただし、基礎となるデータ ファイルを異なるエンディアンのデータベース ホストに移動することは (正しく) まれであることを考慮すると、データベースは基礎となるファイル形式の移植性を目指していることはあまりありません。この回答によると、たとえば、MySQL の MyISAM はエンディアン ポータブルではありません。

とはいえ、これはあまり気にする必要はないと思います。データベースサーバーが異なるエンディアンのホストに切り替えられた場合、データが読み取り可能であることを確認することはプロセスの重要なステップであり、タスクを処理する DBA (おそらく自分自身?) はそれを忘れることはありません。忘れてしまうと、何も機能しなくなります (つまり、破損はバイナリ BLOB に限定されません!)

于 2013-05-11T16:33:36.690 に答える