{"id":81936,"date":"2020-05-18T01:42:37","date_gmt":"2020-05-17T23:42:37","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera"},"modified":"2020-05-18T01:42:37","modified_gmt":"2020-05-17T23:42:37","slug":"szhatie-dannyh-v-apache-ignite-opyt-sbera","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","title":{"rendered":"Compresi\u00f3n de datos en Apache Ignite. Experiencia de Sber.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Compresi\u00f3n de datos en Apache Ignite. Experiencia de Sber.\" src=\"\/wp-content\/uploads\/2020\/05\/0e26c686b1f29e88e6be4b8df81ab668.jpg\" style=\"display:block;margin: 0 auto;\" \/>Al trabajar con grandes vol\u00famenes de datos, a menudo surge el problema de la falta de espacio en los discos. Una de las soluciones a este problema es la compresi\u00f3n, que permite aumentar la capacidad de almacenamiento en el mismo hardware. En este art\u00edculo, veremos c\u00f3mo funciona la compresi\u00f3n de datos en Apache Ignite. Se describir\u00e1n \u00fanicamente los m\u00e9todos de compresi\u00f3n implementados dentro del producto. Otros m\u00e9todos de compresi\u00f3n de datos (por red, en memoria), tanto implementados como no, quedar\u00e1n fuera del alcance.<\/p>\n<p>As\u00ed que, con el modo de persistencia activado, como resultado de los cambios de datos en las cach\u00e9s, Ignite comienza a escribir en disco:<\/p>\n<ol>\n<li>El contenido de las cach\u00e9s<\/li>\n<li>Registro de escritura anticipada (Write Ahead Log, en adelante simplemente WAL)<\/li>\n<\/ol>\n<p>\nDesde hace tiempo existe un mecanismo para la compresi\u00f3n del WAL, llamado WAL compaction. En la reciente versi\u00f3n de Apache Ignite 2.8, se han introducido otros dos mecanismos que permiten comprimir datos en disco: la compresi\u00f3n de p\u00e1ginas de disco para comprimir el contenido de las cach\u00e9s y la compresi\u00f3n de instant\u00e1neas de p\u00e1ginas WAL para comprimir ciertos registros de WAL. A continuaci\u00f3n se detallan estos tres mecanismos.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Compresi\u00f3n de p\u00e1ginas de disco<\/h3>\n<p><\/p>\n<h4>\u00bfC\u00f3mo funciona?<\/h4>\n<p>\nPara comenzar, haremos un breve resumen de c\u00f3mo Ignite almacena los datos. Se utiliza memoria paginada para el almacenamiento. El tama\u00f1o de la p\u00e1gina se establece al iniciar el nodo y no puede ser cambiado en etapas posteriores; adem\u00e1s, el tama\u00f1o de la p\u00e1gina debe ser una potencia de dos y m\u00faltiplo del tama\u00f1o del bloque del sistema de archivos. Las p\u00e1ginas se cargan en RAM desde el disco seg\u00fan sea necesario, y el tama\u00f1o de los datos en disco puede exceder la cantidad de RAM asignada. En caso de que falte espacio en RAM para cargar una p\u00e1gina desde el disco, las p\u00e1ginas antiguas que ya no se utilizan ser\u00e1n expulsadas de la RAM.<\/p>\n<p>En el disco, los datos se almacenan de la siguiente manera: se crea un archivo separado para cada partici\u00f3n de cada grupo de cach\u00e9, en este archivo, las p\u00e1ginas se disponen una tras otra en orden creciente de \u00edndice. El identificador completo de cada p\u00e1gina contiene el identificador del grupo de cach\u00e9, el n\u00famero de partici\u00f3n y el \u00edndice de la p\u00e1gina en el archivo. De esta manera, mediante el identificador completo de la p\u00e1gina, podemos determinar de manera un\u00edvoca el archivo y el offset en el archivo para cada p\u00e1gina. Puedes leer m\u00e1s sobre la estructura de la memoria paginada en el art\u00edculo de Apache Ignite Wiki: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 detr\u00e1s de escena<\/a><\/noindex>.<\/p>\n<p>El mecanismo de compresi\u00f3n de p\u00e1ginas de disco, como se puede deducir por su nombre, funciona a nivel de p\u00e1gina. Al activar este mecanismo, el trabajo con los datos en RAM se realiza tal cual, sin ning\u00fan tipo de compresi\u00f3n, pero en el momento de guardar las p\u00e1ginas de RAM en el disco, se ejecuta su compresi\u00f3n.<\/p>\n<p>Sin embargo, comprimir cada p\u00e1gina de manera individual no es la soluci\u00f3n al problema; hay que encontrar la forma de reducir el tama\u00f1o de los archivos finales con los datos. Si el tama\u00f1o de la p\u00e1gina deja de ser fijo, ya no podemos escribir las p\u00e1ginas en el archivo una tras otra, ya que esto podr\u00eda generar una serie de problemas:<\/p>\n<ul>\n<li>No podremos calcular el offset donde se encuentra la p\u00e1gina en el archivo usando el \u00edndice de la p\u00e1gina.<\/li>\n<li>No est\u00e1 claro qu\u00e9 hacer con las p\u00e1ginas que no est\u00e1n al final del archivo y que cambian de tama\u00f1o. Si el tama\u00f1o de la p\u00e1gina se reduce, el espacio que ha liberado se pierde. Si el tama\u00f1o de la p\u00e1gina aumenta, hay que buscar un nuevo lugar en el archivo para ella.<\/li>\n<li>Si la p\u00e1gina se desplaza en un n\u00famero de bytes que no es m\u00faltiplo del tama\u00f1o del bloque del sistema de archivos, entonces para leer o escribir, se necesitar\u00e1 tocar un bloque del sistema de archivos m\u00e1s, lo que puede llevar a una degradaci\u00f3n del rendimiento.<\/li>\n<\/ul>\n<p>\nPara no enfrentar estos problemas a su nivel, la compresi\u00f3n de p\u00e1ginas de disco en Apache Ignite utiliza un mecanismo del sistema de archivos llamado archivos dispersos. Un archivo disperso es aqu\u00e9l en el que algunas regiones, llenas de ceros, pueden ser marcadas como \"hoys\". De este modo, no se asignan bloques del sistema de archivos para almacenar estos hoyos, logrando as\u00ed un ahorro de espacio en disco.<\/p>\n<p>L\u00f3gicamente, para liberar un bloque del sistema de archivos, el tama\u00f1o del hoyo debe ser mayor o igual al bloque del sistema de archivos, lo que impone una restricci\u00f3n adicional al tama\u00f1o de la p\u00e1gina en Apache Ignite: para que la compresi\u00f3n tenga alg\u00fan efecto, es necesario que el tama\u00f1o de la p\u00e1gina sea estrictamente mayor que el tama\u00f1o del bloque del sistema de archivos. Si el tama\u00f1o de la p\u00e1gina es igual al tama\u00f1o del bloque, nunca podremos liberar un solo bloque, ya que para liberar un bloque \u00fanico, la p\u00e1gina comprimida deber\u00eda ocupar 0 bytes. Sin embargo, si el tama\u00f1o de la p\u00e1gina es igual al tama\u00f1o de 2 o 4 bloques, ya podremos liberar al menos un bloque si nuestra p\u00e1gina se comprime al menos hasta un 50% o un 75% respectivamente.<\/p>\n<p>Por lo tanto, la descripci\u00f3n final del funcionamiento del mecanismo es la siguiente: Al grabar una p\u00e1gina en el disco, se intenta comprimir la p\u00e1gina. Si el tama\u00f1o de la p\u00e1gina comprimida permite liberar uno o m\u00e1s bloques del sistema de archivos, entonces la p\u00e1gina se graba en forma comprimida, y en el lugar de los bloques liberados se crea un \"hueco\" (se realiza una llamada al sistema con la bandera \"punch hole\"). <code>fallocate()<\/code> Si el tama\u00f1o de la p\u00e1gina comprimida no permite liberar bloques, la p\u00e1gina se guarda tal cual, en su forma no comprimida. Todos los offsets de las p\u00e1ginas se calculan de la misma manera que sin compresi\u00f3n, multiplicando el \u00edndice de la p\u00e1gina por el tama\u00f1o de la p\u00e1gina. No se requiere reubicaci\u00f3n de p\u00e1ginas por cuenta propia. Los offsets de las p\u00e1ginas, al igual que sin compresi\u00f3n, caen en los l\u00edmites de los bloques del sistema de archivos.<\/p>\n<p><img decoding=\"async\" alt=\"Compresi\u00f3n de datos en Apache Ignite. Experiencia de Sber.\" src=\"\/wp-content\/uploads\/2020\/05\/6a6c6ad83d3b8591f76b9343ff067746.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nEn la implementaci\u00f3n actual, Ignite puede trabajar con archivos dispersos solo en sistemas operativos Linux, por lo tanto, la compresi\u00f3n de p\u00e1ginas en disco solo puede habilitarse al usar Ignite en este sistema operativo.<\/p>\n<p>Los algoritmos de compresi\u00f3n que pueden usarse para la compresi\u00f3n de p\u00e1ginas en disco son: ZSTD, LZ4, Snappy. Adem\u00e1s, existe un modo de operaci\u00f3n (SKIP_GARBAGE) donde solo se descarta el espacio no utilizado en la p\u00e1gina sin aplicar compresi\u00f3n a los datos restantes, lo que reduce la carga en la CPU en comparaci\u00f3n con los algoritmos mencionados anteriormente.<\/p>\n<h4>Impacto en el rendimiento <\/h4>\n<p>\nDesafortunadamente, no he realizado mediciones reales de rendimiento ni en los entornos reales, ya que no planeamos utilizar este mecanismo en producci\u00f3n, pero se puede razonar te\u00f3ricamente sobre d\u00f3nde perder\u00edamos y d\u00f3nde ganar\u00edamos.<\/p>\n<p>Para ello, necesitamos recordar c\u00f3mo se realizan las lecturas y escrituras de p\u00e1ginas al acceder a ellas:<\/p>\n<ul>\n<li>Al realizar una operaci\u00f3n de lectura, primero se busca en la RAM, y si la b\u00fasqueda no tiene \u00e9xito, la p\u00e1gina se carga en la RAM desde el disco con el mismo hilo que realiza la lectura.<\/li>\n<li>Al realizar una operaci\u00f3n de escritura, la p\u00e1gina en la RAM se marca como sucia; sin embargo, la salvaguarda f\u00edsica de la p\u00e1gina en el disco no ocurre de inmediato en el hilo que est\u00e1 realizando la escritura. Todas las p\u00e1ginas sucias se guardan en el disco m\u00e1s tarde durante el proceso de chequeo por otros hilos.<\/li>\n<\/ul>\n<p>\nPor lo tanto, el impacto en las operaciones de lectura es:<\/p>\n<ul>\n<li>Positivo (disk IO), debido a la reducci\u00f3n en la cantidad de bloques le\u00eddos del sistema de archivos.<\/li>\n<li>Negativa (CPU), debido a la carga adicional necesaria para que el sistema operativo trabaje con archivos sparse. Tambi\u00e9n es posible que aparezcan en este contexto operaciones IO adicionales para guardar una estructura m\u00e1s compleja de archivos sparse (lamentablemente, no estoy familiarizado con todos los detalles del funcionamiento de los archivos sparse).<\/li>\n<li>Negativa (CPU), debido a la necesidad de descompresi\u00f3n de p\u00e1ginas.<\/li>\n<li>No hay influencia en las operaciones de escritura.<\/li>\n<li>Influencia en el proceso de checkpoint (aqu\u00ed todo es similar a las operaciones de lectura):<\/li>\n<li>Positiva (disk IO), gracias a la reducci\u00f3n en la cantidad de bloques escritos en el sistema de archivos.<\/li>\n<li>Negativa (CPU, posiblemente disk IO), debido al trabajo con archivos sparse.<\/li>\n<li>Negativa (CPU), debido a la necesidad de compresi\u00f3n de p\u00e1ginas.<\/li>\n<\/ul>\n<p>\n\u00bfQu\u00e9 balanza pesar\u00e1 m\u00e1s? Todo depende mucho del entorno, pero tiendo a pensar que la compresi\u00f3n de p\u00e1ginas de disco llevar\u00e1 a una degradaci\u00f3n del rendimiento en la mayor\u00eda de los sistemas. Especialmente considerando que las pruebas en otras bases de datos que utilizan un enfoque similar con archivos sparse muestran una ca\u00edda en el rendimiento con la compresi\u00f3n activada.<\/p>\n<h4>C\u00f3mo habilitar y configurar<\/h4>\n<p>\nComo se mencion\u00f3 anteriormente, la versi\u00f3n m\u00ednima de Apache Ignite que admite la compresi\u00f3n de p\u00e1ginas de disco es 2.8 y solo se soporta en el sistema operativo Linux. La habilitaci\u00f3n y configuraci\u00f3n se realiza de la siguiente manera:<\/p>\n<ul>\n<li>En el class-path debe estar el m\u00f3dulo ignite-compression. Por defecto, se encuentra en el distribuidor de Apache Ignite en el directorio libs\/optional y no se incluye en el class-path. Se puede simplemente mover el directorio un nivel hacia arriba dentro de libs y entonces al ejecutar a trav\u00e9s de ignite.sh se incluir\u00e1 autom\u00e1ticamente.<\/li>\n<li>La persistencia debe estar habilitada (se habilita con <code>DataRegionConfiguration.setPersistenceEnabled(true))<\/code>.<\/li>\n<li>El tama\u00f1o de p\u00e1gina debe ser mayor que el tama\u00f1o del bloque del sistema de archivos (se puede establecer usando <code>DataStorageConfiguration.setPageSize()<\/code> ).<\/li>\n<li>Para cada cach\u00e9 cuyos datos deben ser comprimidos, es necesario en la configuraci\u00f3n establecer el m\u00e9todo de compresi\u00f3n y (opcionalmente) el nivel de compresi\u00f3n (m\u00e9todos <code>CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()<\/code>).<\/li>\n<\/ul>\n<p><\/p>\n<h3>Compactaci\u00f3n WAL<\/h3>\n<p><\/p>\n<h4>\u00bfC\u00f3mo funciona?<\/h4>\n<p>\n\u00bfQu\u00e9 es WAL y para qu\u00e9 se necesita? En resumen: es un registro en el que se registran todos los eventos que modifican en \u00faltima instancia el almacenamiento de p\u00e1ginas. Su principal finalidad es la posibilidad de recuperaci\u00f3n en caso de ca\u00edda. Cualquier operaci\u00f3n, antes de devolver el control al usuario, debe primero registrar el evento en WAL, para poder reproducir el registro en caso de ca\u00edda y restaurar todas las operaciones por las que el usuario recibi\u00f3 una respuesta exitosa, incluso si estas operaciones no se hab\u00edan reflejado a\u00fan en el almacenamiento de p\u00e1ginas en el disco (como se describi\u00f3 anteriormente, la grabaci\u00f3n real en el almacenamiento de p\u00e1ginas se realiza en un proceso llamado<\/p>\n<p>Las entradas en WAL se dividen en l\u00f3gicas y f\u00edsicas. Las l\u00f3gicas son las propias claves y valores. Las f\u00edsicas reflejan los cambios en las p\u00e1ginas del almacenamiento de p\u00e1ginas. Si las entradas l\u00f3gicas pueden ser \u00fatiles en otros casos, las entradas f\u00edsicas son necesarias \u00fanicamente para la recuperaci\u00f3n en caso de ca\u00edda y se necesitan registros desde el \u00faltimo chequeo exitoso. Aqu\u00ed no entraremos en detalles ni explicaremos por qu\u00e9 funciona de esta manera, pero quienes est\u00e9n interesados pueden consultar el art\u00edculo mencionado en Apache Ignite Wiki: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 detr\u00e1s de escena<\/a><\/noindex>.<\/p>\n<p>A menudo, varias grabaciones f\u00edsicas corresponden a una sola grabaci\u00f3n l\u00f3gica. Es decir, por ejemplo, una operaci\u00f3n put en la cach\u00e9 afecta a varias p\u00e1ginas en la memoria de p\u00e1ginas (la p\u00e1gina con los datos, las p\u00e1ginas con los \u00edndices, las p\u00e1ginas con las listas libres). En algunas pruebas sint\u00e9ticas, observ\u00e9 que las grabaciones f\u00edsicas ocupaban hasta el 90% del tama\u00f1o del archivo WAL. Sin embargo, estas se mantienen durante un tiempo muy corto (por defecto, el intervalo entre puntos de control es de 3 minutos). Ser\u00eda l\u00f3gico deshacerse de estos datos una vez que pierden su relevancia. Esto es lo que realiza el mecanismo de compactaci\u00f3n WAL, eliminando las grabaciones f\u00edsicas y comprimiendo las grabaciones l\u00f3gicas restantes mediante zip, lo que reduce significativamente el tama\u00f1o del archivo (a veces en decenas de veces).<\/p>\n<p>El WAL f\u00edsico consta de varios segmentos (por defecto 10) de tama\u00f1o fijo (por defecto 64 MB), que se sobrescriben en un bucle. Una vez que el segmento actual est\u00e1 lleno, se le asigna el siguiente segmento, y el segmento lleno se copia en un archivo de archivo mediante un hilo separado. La compactaci\u00f3n de WAL ya funciona con los segmentos archivados. Tambi\u00e9n, mediante un hilo separado, supervisa la ejecuci\u00f3n del punto de control y comienza la compresi\u00f3n de los segmentos archivados, cuyas grabaciones f\u00edsicas ya no son necesarias.<\/p>\n<p><img decoding=\"async\" alt=\"Compresi\u00f3n de datos en Apache Ignite. Experiencia de Sber.\" src=\"\/wp-content\/uploads\/2020\/05\/ca8690ba7a350df9530f2ccf01c90975.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>Impacto en el rendimiento<\/h4>\n<p>\nDado que la compactaci\u00f3n de WAL funciona en un hilo separado, no deber\u00eda haber un impacto directo en las operaciones que se est\u00e1n realizando. Sin embargo, causa una carga adicional en segundo plano en la CPU (compresi\u00f3n) y en el disco (lectura de cada segmento WAL del archivo y escritura de los segmentos comprimidos), por lo que si el sistema est\u00e1 funcionando al l\u00edmite de sus capacidades, tambi\u00e9n llevar\u00e1 a una degradaci\u00f3n del rendimiento.<\/p>\n<h4>C\u00f3mo habilitar y configurar<\/h4>\n<p>\nSe puede habilitar la compactaci\u00f3n de WAL mediante la propiedad <code>WalCompactionEnabled<\/code> en <code>DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)<\/code>). Adem\u00e1s, con el m\u00e9todo DataStorageConfiguration.setWalCompactionLevel() se puede establecer el nivel de compresi\u00f3n, si no se est\u00e1 satisfecho con el valor predeterminado (BEST_SPEED).<\/p>\n<h3>Compresi\u00f3n de instant\u00e1neas de p\u00e1gina WAL<\/h3>\n<p><\/p>\n<h4>\u00bfC\u00f3mo funciona?<\/h4>\n<p>\nAnteriormente, ya hemos determinado que los registros WAL se dividen en l\u00f3gicos y f\u00edsicos. Por cada cambio en cada p\u00e1gina en la memoria de p\u00e1ginas se forma un registro f\u00edsico WAL. Los registros f\u00edsicos, a su vez, tambi\u00e9n se dividen en 2 subtipos: registro de instant\u00e1nea de p\u00e1gina y registro delta. Cada vez que cambiamos algo en una p\u00e1gina y la convertimos de un estado limpio a sucio, se guarda una copia completa de esta p\u00e1gina en WAL (registro de instant\u00e1nea de p\u00e1gina \u2014 instant\u00e1nea de la p\u00e1gina). Incluso si solo hemos cambiado un byte, en WAL se guardar\u00e1 un registro que ocupa poco m\u00e1s que el tama\u00f1o de la p\u00e1gina. Si cambiamos algo en una p\u00e1gina que ya est\u00e1 sucia, se forma un registro delta en WAL, que refleja solo los cambios en comparaci\u00f3n con el estado anterior de la p\u00e1gina, pero no la p\u00e1gina entera. Dado que el restablecimiento de las p\u00e1ginas de sucias a limpias se ejecuta durante el proceso de punto de control, pr\u00e1cticamente todos los registros f\u00edsicos consistir\u00e1n solo en instant\u00e1neas de p\u00e1ginas (ya que todas las p\u00e1ginas est\u00e1n limpias justo despu\u00e9s de comenzar el punto de control); luego, a medida que nos acercamos al siguiente punto de control, la proporci\u00f3n de registros delta comienza a crecer y se restablece al comienzo del siguiente punto de control. Las mediciones en algunas pruebas sint\u00e9ticas mostraron que la proporci\u00f3n de instant\u00e1neas de p\u00e1ginas en el volumen total de registros f\u00edsicos alcanza el 90%.<\/p>\n<p>La idea de la compresi\u00f3n de instant\u00e1neas de p\u00e1gina WAL consiste en comprimir las instant\u00e1neas de las p\u00e1ginas utilizando una herramienta de compresi\u00f3n de p\u00e1ginas ya existente (ver compresi\u00f3n de p\u00e1ginas en disco). En este caso, los registros WAL se almacenan secuencialmente en modo solo de anexado y no es necesaria la vinculaci\u00f3n de los registros a los l\u00edmites de los bloques del sistema de archivos, por lo que aqu\u00ed, a diferencia del mecanismo de compresi\u00f3n de p\u00e1ginas en disco, no necesitamos archivos dispersos, lo que significa que este mecanismo funcionar\u00e1 no solo en sistemas operativos Linux. Adem\u00e1s, ya no es importante cu\u00e1nto logremos comprimir la p\u00e1gina. Incluso si liberamos 1 byte, ya es un resultado positivo y podemos guardar en WAL los datos comprimidos, a diferencia de la compresi\u00f3n de p\u00e1ginas en disco, donde guardamos la p\u00e1gina comprimida solo si liberamos m\u00e1s de 1 bloque del sistema de archivos.<\/p>\n<p>Las p\u00e1ginas son datos que se comprimen bien, y su proporci\u00f3n en el volumen total de WAL es muy alta, por lo que sin cambiar el formato del archivo WAL, podemos lograr una reducci\u00f3n significativa de su tama\u00f1o. La compresi\u00f3n de los registros l\u00f3gicos requerir\u00eda cambiar el formato y perder la compatibilidad, por ejemplo, para los consumidores externos que pueden estar interesados en los registros l\u00f3gicos, y no traer\u00eda una disminuci\u00f3n significativa en el volumen del archivo.<\/p>\n<p>Al igual que para la compresi\u00f3n de p\u00e1ginas de disco, se pueden utilizar algoritmos de compresi\u00f3n ZSTD, LZ4, Snappy, as\u00ed como el modo SKIP_GARBAGE para la compresi\u00f3n de instant\u00e1neas de p\u00e1ginas WAL.<\/p>\n<h4>Impacto en el rendimiento<\/h4>\n<p>\nComo puede notarse, la inclusi\u00f3n directa de la compresi\u00f3n de instant\u00e1neas de p\u00e1ginas WAL afecta solo a los flujos que escriben datos en la memoria de p\u00e1ginas, es decir, a aquellos flujos que modifican datos en las cach\u00e9s. La lectura de los registros f\u00edsicos WAL ocurre solo una vez, en el momento de la recuperaci\u00f3n del nodo tras una ca\u00edda (y solo en caso de que haya una ca\u00edda durante el proceso de checkpoint).<\/p>\n<p>Para los flujos que modifican datos, esto afecta de la siguiente manera: obtenemos un efecto negativo (CPU) debido a la necesidad de comprimir la p\u00e1gina cada vez antes de escribir en el disco y un efecto positivo (disk IO) debido a la reducci\u00f3n de la cantidad de datos escritos. Por lo tanto, aqu\u00ed todo es simple: si el rendimiento del sistema se ve limitado por la CPU, experimentamos una ligera degradaci\u00f3n; si es por las entradas\/salidas del disco, obtenemos un aumento.<\/p>\n<p>Indirectamente, la reducci\u00f3n del tama\u00f1o de WAL tambi\u00e9n afecta (positivamente) a los flujos que archivan segmentos WAL y a los flujos de compactaci\u00f3n de WAL.<\/p>\n<p>Las pruebas de rendimiento en nuestro entorno con datos sint\u00e9ticos mostraron un peque\u00f1o aumento (el throughput aument\u00f3 entre un 10% y un 15%, y la latencia disminuy\u00f3 entre un 10% y un 15%).<\/p>\n<h4>C\u00f3mo habilitar y configurar<\/h4>\n<p>\nLa versi\u00f3n m\u00ednima de Apache Ignite: 2.8. La activaci\u00f3n y configuraci\u00f3n se realiza de la siguiente manera:<\/p>\n<ul>\n<li>En el class-path debe estar el m\u00f3dulo ignite-compression. Por defecto, se encuentra en el distribuidor de Apache Ignite en el directorio libs\/optional y no se incluye en el class-path. Se puede simplemente mover el directorio un nivel hacia arriba dentro de libs y entonces al ejecutar a trav\u00e9s de ignite.sh se incluir\u00e1 autom\u00e1ticamente.<\/li>\n<li>La persistencia debe estar habilitada (se habilita con <code>DataRegionConfiguration.setPersistenceEnabled(true)<\/code>).<\/li>\n<li>Se debe establecer el modo de compresi\u00f3n mediante el m\u00e9todo <code>DataStorageConfiguration.setWalPageCompression()<\/code>, de manera predeterminada la compresi\u00f3n est\u00e1 desactivada (modo DISABLED).<\/li>\n<li>Opcionalmente, se puede establecer el grado de compresi\u00f3n mediante el m\u00e9todo <code>DataStorageConfiguration.setWalPageCompression()<\/code>, los valores permitidos para cada uno de los modos se pueden ver en la javadoc del m\u00e9todo.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>\nLos mecanismos de compresi\u00f3n de datos en Apache Ignite discutidos pueden usarse de manera independiente entre s\u00ed, pero tambi\u00e9n se permiten todas sus combinaciones. Comprender los principios de su funcionamiento permitir\u00e1 determinar qu\u00e9 tan adecuados son para sus tareas en su entorno y qu\u00e9 sacrificios deber\u00e1n hacerse al utilizarlos. La compresi\u00f3n de p\u00e1ginas en disco est\u00e1 dise\u00f1ada para comprimir el almacenamiento principal y puede proporcionar un grado medio de compresi\u00f3n. La compresi\u00f3n instant\u00e1nea de p\u00e1ginas WAL ofrecer\u00e1 un grado medio de compresi\u00f3n de los archivos WAL, y probablemente mejorar\u00e1 el rendimiento. La compactaci\u00f3n WAL no afectar\u00e1 positivamente al rendimiento, pero reducir\u00e1 al m\u00e1ximo el tama\u00f1o de los archivos WAL eliminando registros f\u00edsicos.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sberbank\/blog\/502136\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0440\u043e \u0432\u0441\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0436\u0430\u0442\u0438\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81937,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81936","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u041e\u043f\u044b\u0442 \u0421\u0431\u0435\u0440\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T23:42:37+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T23:42:37+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Compresi\u00f3n de datos en Apache Ignite. Experiencia de Sber | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u041e\u043f\u044b\u0442 \u0421\u0431\u0435\u0440\u0430 | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T23:42:37+00:00","article:modified_time":"2020-05-17T23:42:37+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81936","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:47:30","updated":"2022-10-02 17:21:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/81936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=81936"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/81936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/81937"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=81936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=81936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=81936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}