2016-04-04 12 views
4

SQL Server Compact Editionで処理されるデータ記憶域を持つ.NET WPFアプリケーションを開発しました。取得したSQL Server CEファイルを圧縮すると、元のファイルサイズの5%まで圧縮されることがあります。C#SQL Server Compact Edition:非常に高い圧縮率

ここにいくつかの重要な無知を示す危険性がありますが、これは予期された動作ですか?この大規模なサイズの節約を考えると、ファイルを保存するたびにファイルを圧縮する必要があります(これはパフォーマンスの影響をまだ考慮していません)。これはまれですが、データベースのサイズは数MBから最大4GBまでさまざまです。私のデータが非効率的に保管されているのですか、または圧縮すると、私はそのような大幅な節約を受けるのですか? SQL Server CEファイルを外部から圧縮せずに、このスペースを節約するために何かできることはありますか?

+0

これは私が期待する初心者の質問のタイプです。恥ずかしいことは無知ではない。これは「私はドキュメントの構文を調べるのに気にしない」という質問ではありません。答えは明白ですが、初心者ではなく、データベースの内部動作を知っている人のためだけです。だから、恥ずかしくないでください。これは実際には良い質問です。 – TomTom

答えて

2

データベースは、検索のパフォーマンスに大きく影響するため、圧縮しないでください。私はあなたに例を挙げます。

フィールドの長さが200バイトの場合、データベースは特定の行の値を保存するために200バイトを予約しました。すべてのフィールドの長さを加算した合計行サイズを計算することができます。

圧縮アルゴリズムは、実際の値をほとんど何も圧縮しないことがあります。しかし、データベースがそれを行うと、ディスク上の位置を計算することに頼ることはできませんでした(行番号*行サイズ+列オフセット)。最初に、特定の行の特定の列の値を取得するためにすべてを圧縮解除する必要があります。あなたはパフォーマンスの観点からそれを望んでいません。

+1

トップには、データベースにはしばしば空き領域があります。インサートなどの予約を事前割り当てするなどのように、インジケーションがいっぱいではないため、インサートは常にページ分割をトリガーするわけではありません(ページ内で編成され、割り当てられます)。 – TomTom

+0

ありがとうございます。あなたはおそらくこれについていくつかの読書をお勧めできますか? SQLのメカニックについての私の理解は非常に限られています。 –