2016-04-04 12 views
4

Ich habe eine .NET WPF-Anwendung entwickelt, mit Datenspeicher von SQL Server Compact Edition behandelt. Ich habe festgestellt, dass ich die komprimierte SQL Server CE-Datei komprimiere, wenn ich sie auf 5% der ursprünglichen Dateigröße komprimiere.C# SQL Server Compact Edition: Sehr hohe Komprimierungsrate

Auf das Risiko, hier einige signifikante Ignoranz zu zeigen, ist dieses erwartete Verhalten? Es scheint, dass ich angesichts dieser massiven Größeneinsparung die Dateien bei jedem Speichern komprimieren sollte (ich habe die Auswirkungen auf die Leistung noch nicht berücksichtigt). Die Datenbankgröße kann von wenigen MB bis hin zu maximal 4 GB reichen, obwohl dies selten vorkommt. Werden meine Daten ineffizient gespeichert, oder warum erhalte ich so erhebliche Einsparungen, wenn ich komprimiere? Gibt es etwas, das ich tun kann, um immer diesen Speicherplatz zu erhalten, ohne die SQL Server CE-Datei extern komprimieren zu müssen?

+0

Dies ist die Art von Anfänger Frage, die ich erwarten würde. Keine Ignoranz, für die man sich schämen müsste. Dies ist kein "Ich kümmere mich nicht darum, eine Syntax in der Dokumentation nachzuschlagen". Die Antwort ist offensichtlich - aber nicht für einen Anfänger, nur für jemanden, der das Innenleben einer Datenbank kennt. Also, schämen Sie sich nicht, das ist eigentlich eine gute Frage. – TomTom

Antwort

2

Eine Datenbank sollte nicht komprimiert werden, da dies die Abfrageleistung stark beeinträchtigt. Ich werde dir ein Beispiel geben.

Wenn ein Feld 200 Byte lang ist, reserviert die Datenbank 200 Byte, um einen Wert für eine bestimmte Zeile zu speichern. Er kann die gesamte Zeilengröße berechnen und die Länge aller Felder hinzufügen.

Ein Komprimierungsalgorithmus könnte den tatsächlichen Wert in fast nichts komprimieren. Wenn eine Datenbank dies jedoch tun würde, könnte sie sich nicht auf die Berechnung der Position auf der Platte verlassen (Zeilennummer * Zeilengröße + Spaltenoffset). Es muss zuerst alles dekomprimieren, um den Wert einer bestimmten Spalte in einer bestimmten Zeile zu erhalten. Das wollen Sie aus Performance-Sicht nicht.

+1

Darüber hinaus haben Datenbanken oft viel Platz. Pre-Allocating einige Reserve für Einsätze usw. Indizes zum Beispiel sind nicht voll, so dass eine Einfügung nicht immer eine Seitenaufteilung (und sie sind in Seiten organisiert und zuzuteilen) auslösen. – TomTom

+0

Danke dafür. Könnten Sie mir vielleicht etwas dazu empfehlen? Mein Verständnis der SQL-Mechanik ist ziemlich begrenzt. –

Verwandte Themen