6 Stimmen

Jede durchsuchbare Kompressionsbibliothek?

Ich bin auf der Suche nach einer allgemeinen Kompressionsbibliothek, die zufälligen Zugriff während der Dekompression unterstützt. Ich möchte Wikipedia in ein einziges komprimiertes Format komprimieren und gleichzeitig möchte ich einzelne Artikel daraus dekomprimieren/extrahieren.

Natürlich kann ich jeden Artikel einzeln komprimieren, aber das wird nicht viel Kompressionsrate ergeben. Ich habe gehört, dass eine LZO-komprimierte Datei aus vielen Chunks besteht, die separat dekomprimiert werden können, aber ich habe keine API+Dokumentation dafür gefunden. Ich kann auch den Z_FULL_FLUSH-Modus in zlib verwenden, aber gibt es noch eine bessere Alternative?

0voto

David Thornley Punkte 55244

Ich verwende leider MS Windows Vista, und ich kann den Datei-Explorer in Zip-Dateien schicken, als wären es normale Dateien. Vermutlich funktioniert es auch unter 7 (das ich gerne hätte). Ich glaube, ich habe das mit dem entsprechenden Dienstprogramm auch unter Ubuntu gemacht, aber ich bin mir nicht sicher. Ich könnte es auch auf Mac OSX testen, nehme ich an.

0voto

David Cary Punkte 4991

Wenn einzelne Artikel zu kurz sind, um eine vernünftige Komprimierung zu erreichen, ist der nächst einfachere Ansatz, einen Stapel von Wikipedia-Artikeln zu komprimieren - sagen wir 12 Artikel auf einmal, oder wie viele Artikel auch immer nötig sind, um ein Megabyte zu füllen. Dann komprimieren Sie jeden Stapel einzeln.

Im Prinzip führt dies zu einer besseren Komprimierung als die Komprimierung jedes einzelnen Artikels, aber zu einer schlechteren Komprimierung als die Komprimierung aller Artikel zusammen. Um Artikel 12 aus einem komprimierten Stapel zu extrahieren, muss der gesamte Stapel dekomprimiert werden (und die ersten 11 Artikel müssen dann weggeworfen werden), aber das ist immer noch viel, viel schneller als die halbe Wikipedia zu dekomprimieren.

Viele Komprimierungsprogramme zerlegen den Eingabestrom in eine Folge von "Blöcken" und komprimieren jeden Block von Grund auf, unabhängig von den anderen Blöcken. Sie können auch eine Stapelgröße wählen, die in etwa der Größe eines Blocks entspricht - größere Stapel erzielen keine bessere Komprimierungsrate und brauchen länger zum Dekomprimieren.

Ich habe mit verschiedenen Möglichkeiten experimentiert, die Dekodierung einer komprimierten Datenbank in der Mitte zu erleichtern. Leider haben die "cleveren" Techniken, die ich bisher angewandt habe, immer noch ein schlechteres Kompressionsverhältnis und benötigen mehr Operationen, um einen dekodierten Abschnitt zu erzeugen, als der viel einfachere "Batch"-Ansatz.

Für anspruchsvollere Techniken können Sie sich folgende Seiten ansehen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X