現在、アップロードされたファイル(PDF、DOC、TXTなど)を画像タイプの列に格納するデータベーステーブル(SQL Server 2008 R2)があります。ユーザーがこのファイルをASP.NETアプリケーションからアップロードします。私のプロジェクトは、このテーブルが成長しているサイズを把握することです。その過程で、いくつかの質問を思いつきました。
データベース側では、画像の列タイプが多少減価償却されていることを発見しましたか?varbinary(max)に切り替えることでメリットが得られますか、それともファイルサイズの上限であるvarbinary(5767168)と言うべきでしょうか、それともスペース効率が高い限り、イメージタイプのままにしておくこともできます。心配している?
アプリケーション側では、バイト配列を圧縮したいと思います。Microsoftの組み込みGZipにより、ファイルが小さくなるのではなく大きくなることがありました。SharpZipLibに切り替えましたが、これははるかに優れていますが、それでも同じ問題が発生することがあります。大規模に実装する前に、平均的なファイル圧縮の節約を確認する方法はありますか?彼らが使用している基本的なアルゴリズムを見つけるのに苦労しています。
私自身のハフマンコードアルゴリズムを書く価値はありますか、それとも元のファイルよりも大きな圧縮ファイルが時々ある場合に同じ問題が発生しますか?
参考までに、重要な場合に備えて、私のアプリのコードは次のとおりです。
using ICSharpCode.SharpZipLib.GZip;
private static byte[] Compress(byte[] data)
{
MemoryStream output = new MemoryStream();
using (GZipOutputStream gzip = new GZipOutputStream(output))
{
gzip.IsStreamOwner = false;
gzip.Write(data, 0, data.Length);
gzip.Close();
}
return output.ToArray();
}
private static byte[] Decompress(byte[] data)
{
MemoryStream output = new MemoryStream();
MemoryStream input = new MemoryStream();
input.Write(data, 0, data.Length);
input.Position = 0;
using (GZipInputStream gzip = new GZipInputStream(input))
{
byte[] buff = new byte[64];
int read = gzip.Read(buff, 0, buff.Length);
while (read > 0)
{
output.Write(buff, 0, read);
read = gzip.Read(buff, 0, buff.Length);
}
gzip.Close();
}
return output.ToArray();
}
助けてくれてありがとう。:)