{"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\/it\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","title":{"rendered":"Compressione dei dati in Apache Ignite. L'esperienza di Sberbank","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Compressione dei dati in Apache Ignite. L&#039;esperienza di Sberbank\" src=\"\/wp-content\/uploads\/2020\/05\/0e26c686b1f29e88e6be4b8df81ab668.jpg\" style=\"display:block;margin: 0 auto;\" \/>Quando si lavora con grandi volumi di dati, pu\u00f2 sorgere il problema della mancanza di spazio su disco. Uno dei modi per affrontare questo problema \u00e8 la compressione, che consente di aumentare le capacit\u00e0 di archiviazione utilizzando la stessa infrastruttura. In questo articolo, esamineremo come funziona la compressione dei dati in Apache Ignite. Verranno descritti solo i metodi di compressione implementati all'interno del prodotto. Altri metodi di compressione dei dati (in rete, in memoria), sia implementati che non, rimarranno al di fuori dell'ambito di questo articolo.<\/p>\n<p>Pertanto, quando la modalit\u00e0 persistence \u00e8 attivata, a seguito di modifiche ai dati nelle cache, Ignite inizia a scrivere su disco:<\/p>\n<ol>\n<li>Il contenuto delle cache<\/li>\n<li>Il diario delle scritture anticipate (Write Ahead Log, di seguito semplicemente WAL)<\/li>\n<\/ol>\n<p>\nPer la compressione del WAL esiste da tempo un meccanismo chiamato WAL compaction. Nella recente versione di Apache Ignite 2.8 sono stati introdotti altri due meccanismi che consentono di comprimere i dati su disco, il disk page compression per la compressione del contenuto delle cache e il WAL page snapshot compression per la compressione di alcune voci del WAL. Maggiori dettagli su questi tre meccanismi di seguito.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Compressore di pagine su disco<\/h3>\n<p><\/p>\n<h4>Come funziona<\/h4>\n<p>\nPer iniziare, diamo un'overview molto breve su come Ignite memorizza i dati. Viene utilizzata la memoria page-oriented. La dimensione della pagina \u00e8 impostata all'avvio del nodo e non pu\u00f2 essere modificata in seguito; inoltre, deve essere una potenza di due e multiplo della dimensione del blocco del file system. Le pagine vengono caricate nella RAM dal disco all'occorrenza, mentre la dimensione dei dati su disco pu\u00f2 superare la quantit\u00e0 di RAM allocata. In caso di insufficienza di spazio nella RAM per caricare una pagina dal disco, le vecchie pagine non pi\u00f9 utilizzate verranno espulse dalla RAM.<\/p>\n<p>I dati sul disco sono memorizzati come segue: per ogni partizione di ogni gruppo di cache viene creato un file separato; in questo file, in ordine crescente di indice, si trovano le pagine. L'identificatore completo della pagina contiene l'identificatore del gruppo di cache, il numero della partizione e l'indice della pagina nel file. In questo modo, tramite l'identificatore completo della pagina, possiamo determinare in modo univoco il file e l'offset nel file per ogni pagina. Maggiori dettagli sull'architettura della memoria page-oriented possono essere letti nell'articolo su 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 under the hood<\/a><\/noindex>.<\/p>\n<p>Il meccanismo di compressione delle pagine su disco, come suggerisce il nome, opera a livello di pagina. Quando questo meccanismo \u00e8 attivo, la gestione dei dati nella RAM avviene senza alcuna compressione, ma al momento del salvataggio delle pagine dalla RAM al disco, viene eseguita la compressione.<\/p>\n<p>Tuttavia, comprimere ogni pagina singolarmente non \u00e8 ancora una soluzione al problema; \u00e8 necessario ridurre la dimensione dei file finali contenenti i dati. Se la dimensione della pagina smette di essere fissa, non possiamo pi\u00f9 scrivere le pagine nel file una dopo l'altra, poich\u00e9 questo pu\u00f2 generare una serie di problemi:<\/p>\n<ul>\n<li>Non saremo in grado di calcolare l'offset della pagina utilizzando l'indice della pagina stessa per determinare la sua posizione nel file.<\/li>\n<li>Non \u00e8 chiaro come gestire le pagine che non si trovano alla fine del file e cambiano dimensione. Se la dimensione di una pagina diminuisce, lo spazio che ha liberato viene perso. Se la dimensione di una pagina aumenta, \u00e8 necessario cercare un nuovo spazio nel file per essa.<\/li>\n<li>Se la pagina si sposta di un numero di byte non multiplo della dimensione del blocco del file system, sar\u00e0 necessario coinvolgere un blocco del file system in pi\u00f9 per la lettura o la scrittura, il che pu\u00f2 portare a una degradazione delle prestazioni.<\/li>\n<\/ul>\n<p>\nPer non dover affrontare questi problemi a livello personale, la compressione delle pagine disco in Apache Ignite utilizza un meccanismo del file system chiamato file sparse. Un file sparse \u00e8 un file in cui alcune aree, riempite di zeri, possono essere contrassegnate come \u00abbuchi\u00bb. In questo modo, non verranno allocati blocchi del file system per memorizzare questi buchi, portando a un risparmio di spazio su disco.<\/p>\n<p>\u00c8 logico che, per liberare un blocco del filesystem, la dimensione del buco debba essere maggiore o uguale a quella del blocco del filesystem, il che impone un'ulteriore limitazione sulla dimensione della pagina in Apache Ignite: affinch\u00e9 la compressione produca qualche effetto, la dimensione della pagina deve essere rigorosamente superiore alla dimensione del blocco del filesystem. Se la dimensione della pagina \u00e8 uguale a quella del blocco, non saremo mai in grado di liberare alcun blocco, in quanto per poter liberare un singolo blocco la pagina compressa deve occupare 0 byte. Se invece la dimensione della pagina \u00e8 pari a quella di 2 o 4 blocchi, saremo in grado di liberare almeno un blocco se la nostra pagina si comprime almeno al 50% o al 75% rispettivamente.<\/p>\n<p>Pertanto, la descrizione finale del funzionamento del meccanismo \u00e8: quando una pagina viene scritta su disco, si prova a comprimere la pagina. Se la dimensione della pagina compressa consente di liberare uno o pi\u00f9 blocchi del filesystem, la pagina viene scritta in forma compressa, e nei luoghi dei blocchi liberati viene creato un \"buco\" (viene effettuata una chiamata di sistema) <code>fallocate()<\/code> con il flag \u00abpunch hole\u00bb). Se la dimensione della pagina compressa non consente di liberare i blocchi, la pagina viene mantenuta cos\u00ec com'\u00e8, in formato non compresso. Tutti gli offset delle pagine vengono calcolati come senza compressione, moltiplicando l'indice della pagina per la dimensione della pagina. Non \u00e8 necessaria alcuna rilocazione delle pagine manualmente. Gli offset delle pagine, cos\u00ec come senza compressione, si trovano ai confini dei blocchi del file system.<\/p>\n<p><img decoding=\"async\" alt=\"Compressione dei dati in Apache Ignite. L&#039;esperienza di Sberbank\" src=\"\/wp-content\/uploads\/2020\/05\/6a6c6ad83d3b8591f76b9343ff067746.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nNell'attuale implementazione, Ignite pu\u00f2 gestire file sparse solo su sistema operativo Linux, pertanto la compressione delle pagine disco pu\u00f2 essere attivata solo quando si utilizza Ignite su questo sistema operativo.<\/p>\n<p>Gli algoritmi di compressione che possono essere utilizzati per la compressione delle pagine disco: ZSTD, LZ4, Snappy. Inoltre, esiste una modalit\u00e0 operativa (SKIP_GARBAGE) in cui vengono eliminati solo gli spazi non utilizzati nella pagina senza applicare compressione sui dati rimanenti, riducendo cos\u00ec il carico sulla CPU rispetto agli algoritmi menzionati in precedenza.<\/p>\n<h4>Impatto sulle prestazioni <\/h4>\n<p>\nSfortunatamente, non ho effettuato misurazioni delle prestazioni in ambienti reali, poich\u00e9 non abbiamo intenzione di utilizzare questo meccanismo in produzione, ma possiamo riflettere teoricamente su dove potremmo perdere o guadagnare.<\/p>\n<p>Per questo, dobbiamo ricordare come avviene la lettura e la scrittura delle pagine quando vengono chiamate:<\/p>\n<ul>\n<li>Durante l'operazione di lettura, innanzitutto viene effettuata una ricerca nella RAM; se la ricerca non ha successo, la pagina viene caricata in RAM dal disco dallo stesso thread che esegue la lettura.<\/li>\n<li>Durante l'operazione di scrittura, la pagina in RAM viene contrassegnata come sporca, mentre il salvataggio fisico della pagina sul disco non avviene immediatamente nel thread che esegue la scrittura. Tutte le pagine sporche vengono salvate sul disco successivamente durante il processo di checkpoint da thread separati.<\/li>\n<\/ul>\n<p>\nIn questo modo, l'impatto sulle operazioni di lettura \u00e8:<\/p>\n<ul>\n<li>Positivo (IO del disco), grazie alla riduzione del numero di blocchi letti dal file system.<\/li>\n<li>Negativo (CPU), a causa del carico aggiuntivo necessario per il funzionamento del sistema operativo con file sparse. \u00c8 anche possibile che qui emerga implicitamente un'ulteriore operazione di I\/O per il salvataggio di una struttura pi\u00f9 complessa del file sparse (purtroppo non sono esperto in tutti i dettagli del funzionamento dei file sparse).<\/li>\n<li>Negativo (CPU), a causa della necessit\u00e0 di decomprimere le pagine.<\/li>\n<li>Nessuna influenza sulle operazioni di scrittura.<\/li>\n<li>Influenza sul processo di checkpoint (qui \u00e8 tutto simile alle operazioni di lettura):<\/li>\n<li>Positivo (disk IO), grazie alla riduzione del numero di blocchi scritti nel filesystem.<\/li>\n<li>Negativo (CPU, possibile disk IO), a causa del lavoro con i file sparse.<\/li>\n<li>Negativo (CPU), a causa della necessit\u00e0 di comprimere le pagine.<\/li>\n<\/ul>\n<p>\nQuale piatto della bilancia prevarr\u00e0? Questo dipende molto dall'ambiente, ma sono propenso a ritenere che la compressione delle pagine di disco porter\u00e0 pi\u00f9 probabilmente a una degradazione delle prestazioni nella maggior parte dei sistemi. Inoltre, i test su altri DBMS che utilizzano un approccio simile con file sparse mostrano un calo delle prestazioni con la compressione attivata.<\/p>\n<h4>Come attivare e configurare<\/h4>\n<p>\nCome gi\u00e0 accennato in precedenza, la versione minima di Apache Ignite che supporta la compressione delle pagine su disco \u00e8 la 2.8, ed \u00e8 supportata solo dal sistema operativo Linux. L'attivazione e la configurazione avvengono nel seguente modo:<\/p>\n<ul>\n<li>Nel class-path deve essere presente il modulo ignite-compression. Di default, si trova nella distribuzione di Apache Ignite nella directory libs\/optional e non \u00e8 incluso nel class-path. \u00c8 possibile semplicemente spostare la directory di un livello verso l'alto nella cartella libs, e quindi, avviando tramite ignite.sh, sar\u00e0 automaticamente incluso.<\/li>\n<li>La persistenza deve essere attivata (si attiva tramite <code>DataRegionConfiguration.setPersistenceEnabled(true))<\/code>.<\/li>\n<li>La dimensione della pagina deve essere maggiore della dimensione del blocco del file system (da configurare con <code>DataStorageConfiguration.setPageSize()<\/code> ).<\/li>\n<li>Per ogni cache di cui si desidera comprimere i dati, \u00e8 necessario configurare nella configurazione il metodo di compressione e (opzionalmente) il livello di compressione (metodi <code>CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()<\/code>).<\/li>\n<\/ul>\n<p><\/p>\n<h3>Compattazione WAL<\/h3>\n<p><\/p>\n<h4>Come funziona<\/h4>\n<p>\nChe cos'\u00e8 il WAL e a cosa serve? In breve: \u00e8 un registro che raccoglie tutti gli eventi che alla fine modificano lo spazio di memorizzazione delle pagine. Serve principalmente per consentire il ripristino in caso di guasto. Qualsiasi operazione, prima di restituire il controllo all'utente, deve prima registrare un evento nel WAL, in modo da avere la possibilit\u00e0 di riprodurre il registro e ripristinare tutte le operazioni per le quali l'utente ha ricevuto risposta positiva, anche se tali operazioni non sono ancora state riflesse nello spazio di memorizzazione delle pagine su disco (\u00e8 gi\u00e0 stato descritto che la registrazione effettiva nello spazio di memorizzazione delle pagine avviene tramite un processo chiamato \"checkpoint\" con un certo ritardo da parte di thread separati).<\/p>\n<p>Le registrazioni in WAL si suddividono in logiche e fisiche. Le logiche sono le chiavi e i valori stessi. Le fisiche riflettono le modifiche alle pagine nella memoria delle pagine. Se le registrazioni logiche possono essere utili anche per altri casi, quelle fisiche sono necessarie solo per il recupero in caso di crash e richiedono registrazioni solo dall'ultimo checkpoint riuscito. Qui non entreremo nei dettagli e non spiegheremo perch\u00e9 funziona in questo modo, ma chi \u00e8 interessato pu\u00f2 fare riferimento all'articolo gi\u00e0 menzionato sulla Wiki di Apache Ignite: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 under the hood<\/a><\/noindex>.<\/p>\n<p>\u041d\u0430 \u043e\u0434\u043d\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f put \u0432 \u043a\u044d\u0448 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0441\u0430\u043c\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 free-list&#8217;\u0430\u043c\u0438). \u041d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438 \u0434\u043e 90% \u043e\u0431\u044a\u0435\u043c\u0430 WAL \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u044b \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0447\u0435\u043a\u043f\u043e\u0438\u043d\u0442\u0430\u043c\u0438 \u2014 3 \u043c\u0438\u043d\u0443\u0442\u044b). \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u044b\u043b\u043e-\u0431\u044b \u043e\u0442 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0438\u0445 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c WAL compaction, \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e zip \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e (\u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437).<\/p>\n<p>Il WAL fisico \u00e8 costituito da pi\u00f9 segmenti (di default 10) di dimensione fissa (di default 64 MB), che vengono sovrascritti in modo circolare. Una volta che il segmento attuale \u00e8 pieno, viene assegnato il segmento successivo e il segmento pieno viene copiato in archivio da un flusso separato. La compattazione del WAL lavora gi\u00e0 con i segmenti archiviati. Inoltre, da un flusso separato, monitora l'esecuzione del checkpoint e inizia la compressione dei segmenti archiviati, per i quali le registrazioni fisiche non sono pi\u00f9 necessarie.<\/p>\n<p><img decoding=\"async\" alt=\"Compressione dei dati in Apache Ignite. L&#039;esperienza di Sberbank\" src=\"\/wp-content\/uploads\/2020\/05\/ca8690ba7a350df9530f2ccf01c90975.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>Impatto sulle prestazioni<\/h4>\n<p>\nPoich\u00e9 la compattazione del WAL funziona in un flusso separato, non ci dovrebbe essere un impatto diretto sulle operazioni in corso. Tuttavia, fornisce comunque un carico di lavoro aggiuntivo sulla CPU (compressione) e sul disco (lettura di ogni segmento WAL dall'archivio e scrittura dei segmenti compressi), quindi se il sistema opera al limite delle capacit\u00e0, ci\u00f2 porter\u00e0 anche a una degradazione delle prestazioni.<\/p>\n<h4>Come attivare e configurare<\/h4>\n<p>\n\u00c8 possibile attivare la compattazione del WAL utilizzando la propriet\u00e0 <code>WalCompactionEnabled<\/code> in <code>DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)<\/code>). Inoltre, con il metodo DataStorageConfiguration.setWalCompactionLevel() \u00e8 possibile impostare il livello di compressione, se il valore predefinito (BEST_SPEED) non \u00e8 soddisfacente.<\/p>\n<h3>Compressione dello snapshot della pagina WAL<\/h3>\n<p><\/p>\n<h4>Come funziona<\/h4>\n<p>\nIn precedenza abbiamo gi\u00e0 chiarito che le registrazioni WAL si dividono in logiche e fisiche. Per ogni modifica a ciascuna pagina nella memoria di pagina viene creata una registrazione fisica WAL. Le registrazioni fisiche, a loro volta, si suddividono in due sottotipi: la registrazione dello snapshot della pagina e la registrazione delta. Ogni volta che modifichiamo qualcosa su una pagina e la portiamo da uno stato pulito a uno sporco, viene salvata una copia completa di questa pagina nel WAL (registrazione dello snapshot della pagina). Anche se abbiamo modificato solo un byte, nel WAL verr\u00e0 salvata una registrazione di dimensioni leggermente superiori a quelle della pagina. Se modifichiamo qualcosa su una pagina gi\u00e0 sporca, nel WAL si genera una registrazione delta, che riflette solo le modifiche rispetto allo stato precedente della pagina, ma non l'intera pagina. Poich\u00e9 il reset dello stato delle pagine da sporco a pulito avviene durante il checkpoint, subito dopo l'inizio del checkpoint quasi tutte le registrazioni fisiche consisteranno solo in snapshot delle pagine (dato che tutte le pagine sono pulite subito dopo l'inizio del checkpoint). Poi, man mano che ci si avvicina al checkpoint successivo, la parte di registrazioni delta inizia a crescere e poi si azzera all'inizio del checkpoint successivo. Le misurazioni in alcuni test sintetici hanno mostrato che la parte degli snapshot delle pagine nel volume totale delle registrazioni fisiche raggiunge il 90%.<\/p>\n<p>L'idea della compressione delle istantanee delle pagine WAL consiste nel comprimere le istantanee delle pagine utilizzando uno strumento di compressione delle pagine gi\u00e0 esistente (vedi compressione delle pagine su disco). In questo caso, le registrazioni WAL vengono salvate in modo sequenziale in modalit\u00e0 append-only e non \u00e8 necessaria l'associazione delle registrazioni ai confini dei blocchi del file system. Pertanto, a differenza del meccanismo di compressione delle pagine su disco, qui non abbiamo affatto bisogno di file sparsi; di conseguenza, questo meccanismo funzioner\u00e0 non solo su sistemi operativi Linux. Inoltre, non \u00e8 pi\u00f9 importante quanto siamo riusciti a comprimere una pagina. Anche se liberiamo 1 byte, \u00e8 gi\u00e0 un risultato positivo e possiamo salvare i dati compressi nel WAL, a differenza della compressione delle pagine su disco, dove salviamo la pagina compressa solo se liberiamo pi\u00f9 di 1 blocco del file system.<\/p>\n<p>Le pagine sono dati facilmente comprimibili, la loro percentuale nel volume totale del WAL \u00e8 molto alta; pertanto, mantenendo il formato del file WAL, possiamo ottenere una significativa riduzione della sua dimensione. La compressione delle registrazioni logiche richiederebbe invece una modifica del formato e la perdita della compatibilit\u00e0, ad esempio per i consumatori esterni a cui potrebbero interessare le registrazioni logiche, senza portare a una riduzione significativa del volume del file.<\/p>\n<p>Come per la compressione delle pagine del disco, possono essere utilizzati algoritmi di compressione ZSTD, LZ4, Snappy anche per la compressione degli snapshot delle pagine WAL, cos\u00ec come la modalit\u00e0 SKIP_GARBAGE.<\/p>\n<h4>Impatto sulle prestazioni<\/h4>\n<p>\nCome \u00e8 facile notare, l'abilitazione diretta della compressione degli snapshot delle pagine WAL influisce solo sui flussi che scrivono dati nella memoria a pagina, cio\u00e8 su quelli flussi che modificano i dati nei cache. La lettura delle registrazioni fisiche WAL avviene solo una volta, al momento dell'avvio del nodo dopo un crash (e solo nel caso di un crash durante il checkpoint).<\/p>\n<p>I flussi che modificano i dati sono influenzati nel seguente modo: otteniamo un effetto negativo (CPU) a causa della necessit\u00e0 di comprimere la pagina ogni volta prima di scriverla su disco e un effetto positivo (disk IO) grazie alla riduzione della quantit\u00e0 di dati scritti. Di conseguenza, qui tutto \u00e8 semplice: se la performance del sistema \u00e8 limitata dalla CPU, si ottiene una leggera degradazione, se dal disco \u2014 un miglioramento.<\/p>\n<p>Indirectly, la riduzione della dimensione del WAL influisce anche (positivamente) sui flussi che archiviano i segmenti WAL e sui flussi di compattazione del WAL.<\/p>\n<p>I test di prestazione reali nel nostro ambiente su dati sintetici hanno mostrato un lieve aumento (il throughput \u00e8 aumentato del 10%-15%, la latenza si \u00e8 ridotta del 10%-15%).<\/p>\n<h4>Come attivare e configurare<\/h4>\n<p>\nVersione minima di Apache Ignite: 2.8. L'attivazione e la configurazione vengono eseguite nel seguente modo:<\/p>\n<ul>\n<li>Nel class-path deve essere presente il modulo ignite-compression. Di default, si trova nella distribuzione di Apache Ignite nella directory libs\/optional e non \u00e8 incluso nel class-path. \u00c8 possibile semplicemente spostare la directory di un livello verso l'alto nella cartella libs, e quindi, avviando tramite ignite.sh, sar\u00e0 automaticamente incluso.<\/li>\n<li>La persistenza deve essere attivata (si attiva tramite <code>DataRegionConfiguration.setPersistenceEnabled(true)<\/code>).<\/li>\n<li>Deve essere impostata la modalit\u00e0 di compressione utilizzando il metodo <code>DataStorageConfiguration.setWalPageCompression()<\/code>, per default la compressione \u00e8 disabilitata (modalit\u00e0 DISABLED).<\/li>\n<li>Facoltativamente, puoi impostare il grado di compressione utilizzando il metodo <code>DataStorageConfiguration.setWalPageCompression()<\/code>, valori consentiti per ciascuna modalit\u00e0 possono essere trovati nella javadoc del metodo.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Conclusione<\/h3>\n<p>\nI meccanismi di compressione dei dati in Apache Ignite possono essere utilizzati in modo indipendente l'uno dall'altro, ma \u00e8 consentito anche qualsiasi loro combinazione. Comprendere i principi del loro funzionamento permetter\u00e0 di stabilire quanto siano adatti alle vostre esigenze nel vostro ambiente e quali compromessi dovrete accettare nel loro utilizzo. La compressione delle pagine disco \u00e8 progettata per comprimere lo storage principale e pu\u00f2 fornire un grado medio di compressione. La compressione dello snapshot delle pagine WAL dar\u00e0 un grado medio di compressione gi\u00e0 ai file WAL, aumentando probabilmente anche le prestazioni. La compattazione WAL non influir\u00e0 positivamente sulle prestazioni, ma ridurr\u00e0 al massimo la dimensione dei file WAL rimuovendo le registrazioni fisiche.<br \/>\n<br \/>Fonte: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/it\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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:description\" content=\"\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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Compressione dei dati in Apache Ignite. L'esperienza di Sber | ProHoster","description":"Quando si lavora con grandi volumi di dati, pu\u00f2 sorgere un problema acuto di mancanza di spazio sui dischi. Uno dei modi per risolvere questo problema \u00e8 la compressione, grazie alla quale, con la stessa attrezzatura, \u00e8 possibile aumentare la capacit\u00e0 di archiviazione. In questo articolo, esamineremo come funziona la compressione dei dati in Apache Ignite. Saranno descritte solo le funzioni implementate all'interno del prodotto.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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:description":"\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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=81936"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/81937"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=81936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=81936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=81936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}