GoProg

 
Топ хэштегов


Архив

Наверно, многие из вас слышали про алгоритм сжатия Snappy, разработанный в недрах Google (в прошлом Zippy). На данный момент Snappy активно используется в таких проектах как Big Table, MapReduce, Apache Cassandra, LevelDB, RocksDB, Hadoop, Couchbase, Spark, InfluxDB, MariaDB ColumnStore. Чем же вызвана такая популярность алгоритма?

Скорость работы Snappy значительно опережает реализации таких алгоритмов, как LZO, LZF, FastLZ и QuickLZ, при отстающем, но сопоставимом уровне сжатия. Более того, при сравнении с наиболее быстрым режимом сжатия библиотеки zlib, Snappy продемонстрировала десятикратный выигрыш в скорости при тестировании наборов данных различного характера (от текстов до бинарных объектов), но при этом размер сжатых данных получался на 20-100% хуже. Для обычного текста уровень обеспечиваемого в Snappy сжатия составляет 1.5-1.7 раз, для HTML-файлов - 2-4 раза. Zlib в быстром режиме обеспечивает сжатие в текста в 2.6-2.8 раз, а HTML в 3-7 раз.

Таким образом Snappy ориентирован на максимальную пропускную способность алгоритма при снижении уровня сжатия в допустимых пределах, что и было целью разработчиков  из Google. Тем самым, они снизили потребление более дорогих вычислительных ресурсов.

Изначально библиотека для работы со Snappy была разработана на С/С++, на данный момент она портирована на все популярные языки. В том числе и на  Go.

Ниже приведен пример использования Snappy на Go:

package main

import (
  "fmt"
  
  "github.com/golang/snappy"
)

func main() {
  src := []byte("ABCCCCCCCCCCCCCCCCCCC")
  encoded := snappy.Encode(nil, src)
  fmt.Println(string(encoded)) // ABCF

  decoded, err := snappy.Decode(nil, encoded)
  if err != nil {
    panic(err)
  }
  
  // ABCCCCCCCCCCCCCCCCCCC
  fmt.Println(string(decoded)) 
}

#compression #Go #golang #IT #snappy #алгоритмы #сжатие #сжатиеданных



Новый комментарий: