Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Compresión

Información sobre la compresión

La compresión es una característica clave de Web Risk. La compresión reduce de forma significativa los requisitos de ancho de banda, lo que es especialmente relevante para dispositivos móviles. El servidor de Web Risk actualmente admite la compresión Rice. Se pueden agregar más métodos de compresión en el futuro.

La compresión se configura con el campo supportedCompressions y CompressionType. Los clientes deben utilizar los tipos de compresión RICE y RAW. Web Risk usa el tipo COMPRESSION_TYPE_UNSPECIFIED cuando no se establece el tipo de compresión (se sustituye la compresión RAW).

El servidor de Web Risk también usará la compresión HTTP estándar para comprimir aún más respuestas, sin importar el tipo de compresión seleccionado, siempre que el cliente configure el encabezado de compresión HTTP correcto. Para obtener más información, consulta el artículo de Wikipedia sobre compresión HTTP.

Compresión Rice

Como se indicó, actualmente, el servidor Web Risk es compatible con la compresión Rice. Para obtener más información, consulta el artículo de Wikipedia Codificación de Golomb.

Compresión y descompresión

El objeto RiceDeltaEncoding representa los datos codificados de Rice-Golomb y se usa para enviar índices de eliminación comprimidos o prefijos de hash de 4 bytes comprimidos. Los prefijos de hash de más de 4 bytes no se comprimirán y, en su lugar, se entregarán en formato sin procesar.

Para los índices de eliminación, la lista de índices se ordena de forma ascendente y, luego, se codifica con delta mediante la codificación RICE. Para las adiciones, los prefijos de hash de 4 bytes se vuelven a interpretar como "uint32s" poco endian, se ordenan de forma ascendente y, luego, se codifican con delta mediante la codificación RICE. Ten en cuenta la diferencia en el formato de hash entre la compresión RICE y RAW: los hash sin procesar son bytes ordenados de manera lexicográfica, mientras que los hash de RICE son uint32s ordenados de manera ascendente (después de la descompresión).

Es decir, la lista de números enteros [1, 5, 7, 13] se codificará como 1 (el primer valor) y los deltas [4, 2, 6].

El primer valor se almacena en el campo firstValue y los deltas se codifican con un codificador de golomb-rice. El parámetro de Rice k (ver a continuación) se almacena en riceParameter. El campo numEntries contiene la cantidad de deltas que se codificó en el codificador de Rice (3 en nuestro ejemplo anterior, no 4). El campo encodedData contiene los deltas que se codificaron reales.

Codificador/codificador

En el codificador o codificador de codificador, todos los delta n se codifican como q y r, donde n = (q<<k) + r (o n = q * (2**k) + r). k es una constante y un parámetro del codificador o codificador de codificador. Los valores para q y r están codificados en la transmisión de bits con diferentes esquemas de codificación.

El cociente q se codifica en una codificación una entrada seguida de un 0. Es decir, 3 se codificarían como 1110, 4 como 11110 y 7 como 11111110. El q cociente se decodifica primero.

El r restante está codificado mediante codificación binaria truncada. Solo se escriben los caracteres k menos significativos de r (y, por lo tanto, se leen) del flujo de bits. El r restante se decodifica después de decodificar q.

Codificador/codificador de bits

El codificador de Rice se basa en un codificador/decodificador de bits en el que se pueden agregar bits individuales al codificador de bits. es decir, codificar un cociente q que podría tener solo dos bits.

El codificador de bits es una lista de bytes de 8 bits. Los bits se establecen desde el bit significativo importante en el primer byte hasta el bit más significativo en el primer byte. Si un byte ya tiene todos sus bits configurados, un nuevo byte, inicializado en cero, se agrega al final de la lista de bytes. Si el último byte no se usa por completo, los bits más altos se establecen en cero. Ejemplo:

Bits agregados BitEncoder después de agregar bits
[]
0 [00000000]
1 [00000010]
1 [00000110]
1,0,1 [00101110]
0,0,0 [00101110, 00000000]
1,1,0 [00101110, 00000110]