Question

Dans mon application, j'ai besoin de stocker et de transmettre des données contenant de nombreuses valeurs de chaîne répétitives (pensez aux noms d'entité dans un document XML). J'ai deux solutions proposées:

  • A) créez une table de chaînes à stocker le long du document, puis utilisez des références d'index (à l'aide d'un codage sur plusieurs octets) dans le corps du document ou
  • B) Compressez simplement le document en utilisant gzip ou un algorithme de compression similaire.

Lequel va probablement mieux performer en termes de vitesse et de taille de données? (Évidemment, cela dépend de la qualité des implémentations, mais supposons que l’option A crée un tableau de chaînes de manière dynamique et code le corps du document de manière raisonnable).

En outre, si l'option B est recommandée, recommandez-vous une méthode de compression potentiellement plus appropriée, autre que gzip?

Était-ce utile?

La solution

gzip n’est un bon algorithme que lorsque le coût de la transmission / stockage n’est pas trop élevé comparé au coût du temps CPU. Vous pouvez obtenir de meilleurs taux de compression avec bzip2, 7zip et en particulier pour le langage naturel, avec divers algorithmes PPM . .

Bien sûr, ce n’est pas seulement le calcul (et le besoin en mémoire statique / dynamique) vs rapport de compression qui compte - différents formats de compression permettent des degrés divers de recherche efficace d’accès aléatoire, de décodage de flux à faible latence et de concaténation de données compressées (par exemple, cat a.gz b.gz | gunzip -c est identique à gunzip -c a.gz; gunzip -c b.gz

Autres conseils

Utiliser simplement gzip serait certainement le plus simple et probablement suffisant. Je vous recommande d'essayer la table des chaînes puis de gzipper pour voir si vous obtenez une compression légèrement meilleure qu'avec gzip seul.

Cela dépendra de nombreuses choses qui ne sont pas abordées dans votre message.

Pourquoi n’essayez-vous pas d’abord la méthode zip, car elle est facile à implémenter. Ensuite, s’il répond à vos besoins en termes de vitesse / compression, vous pouvez passer à la fonctionnalité suivante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top