Saltar a contenido

snappy: Enlaces FFI de LuaJIT para Snappy, un compresor/descompresor rápido (https://code.google.com/p/snappy/)

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-snappy

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-snappy

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-snappy v1.0 lanzado el 01 de octubre de 2014.


lua-resty-snappy proporciona enlaces FFI de LuaJIT a Snappy, un compresor/descompresor rápido (https://code.google.com/p/snappy/).

API de Lua

Códigos de Error

  SNAPPY_OK               = 0,
  SNAPPY_INVALID_INPUT    = 1,
  SNAPPY_BUFFER_TOO_SMALL = 2

string,len snappy.compress(input)

Comprime input con el algoritmo Snappy y devuelve los datos comprimidos y su longitud. En caso de error, esto devolverá nil y un código de error.

Ejemplo
local snappy    = require "resty.snappy"
local comp, err = snappy.compress("test")
if comp then
    -- hacer algo con los datos comprimidos y la longitud
    -- (la longitud se almacena en el valor de err)...
else
    if err == 1 then
        print "Entrada no válida"
    elseif err == 2 then
        print "Buffer demasiado pequeño"
    end
end

string,len snappy.uncompress(compressed)

Descomprime compressed con el algoritmo Snappy y devuelve los datos descomprimidos y su longitud. En caso de error, esto devolverá nil y un código de error.

Ejemplo
local snappy      = require "resty.snappy"
local uncomp, err = snappy.uncompress(snappy.compress("test"))

number snappy.max_compressed_length(source_length)

Devuelve la longitud máxima posible como un número de bytes de datos comprimidos cuando se da la longitud source_length descomprimida. Esto se utiliza para crear un buffer para comprimir, pero también se puede usar en una medición rápida (y puede no tener nada que ver con la longitud final de salida comprimida, además de que no puede ser mayor que lo que esta función devuelve).

Ejemplo
local snappy = require "resty.snappy"
local number = snappy.max_compressed_length(1000)

number snappy.uncompressed_length(compressed)

Esta es una forma más rápida (que usar snappy.uncompress) para determinar cuántos bytes tendrá los datos comprimidos cuando se descompriman.

Ejemplo
local snappy = require "resty.snappy"
local number = snappy.uncompressed_length(snappy.compress("test"))

boolean snappy.validate_compressed_buffer(compressed)

Esto se puede usar para verificar si los bytes comprimidos son en realidad bytes comprimidos por Snappy o algo más. Es decir, algo que se puede descomprimir con Snappy.

Ejemplo
local snappy = require "resty.snappy"
local bool   = snappy.validate_compressed_buffer(snappy.compress("test"))

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-snappy.