{"id":36632,"date":"2019-10-31T22:12:47","date_gmt":"2019-10-31T19:12:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3\/"},"modified":"2019-10-31T22:12:47","modified_gmt":"2019-10-31T19:12:47","slug":"globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","title":{"rendered":"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/ac6eefbfb9d7cc28c3f2ca85c7d1adb2.jpg\" style=\"display:block;margin: 0 auto;\" \/>Nelle parti precedenti (<noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/263791\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/264173\/\">2<\/a><\/noindex>) abbiamo parlato dei globali come alberi; in questa parte esamineremo i globali come array sparsi.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2\">Array sparso<\/a><\/noindex> \u00e8 un tipo di array in cui la maggior parte dei valori assume lo stesso valore.<\/p>\n<p>Nella pratica, si trovano spesso array sparsi cos\u00ec enormi che non ha senso occupare memoria con elementi identici. Pertanto, ha senso implementare gli array sparsi in modo tale che la memoria non venga spesa per memorizzare valori identici.<br \/>\nIn alcuni linguaggi di programmazione, gli array sparsi sono parte del linguaggio stesso, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jsoftware.com\/help\/dictionary\/d211.htm\">ad esempio in J<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathworks.com\/help\/matlab\/ref\/sparse.html\">MATLAB<\/a><\/noindex>. In altri linguaggi di programmazione, ci sono librerie speciali che consentono la loro implementazione. Per C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> e altri. <\/p>\n<p>I globali sono buoni candidati per l'implementazione di array sparsi perch\u00e9:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>Memorizzano solo i valori di nodi specifici e non memorizzano i valori non definiti;<\/li>\n<li>L'interfaccia di accesso al valore di un nodo \u00e8 estremamente simile a come in molti linguaggi di programmazione \u00e8 implementato l'accesso a un elemento di un array multidimensionale.\n<pre><code class=\"bash\">Set ^a(1, 2, 3)=5\nWrite ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Il global \u00e8 una struttura di dati abbastanza a basso livello per memorizzare informazioni, quindi ha prestazioni eccellenti (da centinaia di migliaia a decine di milioni di transazioni al secondo, a seconda dell'hardware; vedi <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/257501\/\">1<\/a><\/noindex>)<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p>Poich\u00e9 il global \u00e8 una struttura persistente, ha senso utilizzare array sparsi quando si sa in anticipo che la quantit\u00e0 di memoria RAM sar\u00e0 insufficiente.<\/p><\/blockquote>\n<p>\nUna delle propriet\u00e0 delle implementazioni di array sparsi \u00e8 il ritorno di un certo valore predefinito quando si accede a una cella non definita.<\/p>\n<p>Questo pu\u00f2 essere implementato utilizzando la funzione <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex> in COS. In questo esempio, \u00e8 considerato un array tridimensionale.<\/p>\n<pre><code>SET a = $GET(^a(x,y,z), defValue)<\/code><\/pre>\n<p>\nIn quali compiti sono necessari gli array sparsi e come possono i globali essere utili?<\/p>\n<h2>Matrice di adiacenza (connettivit\u00e0)<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0_%D1%81%D0%BC%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">Tali matrici<\/a><\/noindex> vengono utilizzate per rappresentare grafi:<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/a580c451610bcacbef154c161ef63939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 evidente che pi\u00f9 grande \u00e8 il grafo, pi\u00f9 zeri ci saranno nella matrice. Se, ad esempio, prendiamo un grafo di una rete sociale e lo rappresentiamo sotto forma di tale matrice, sar\u00e0 quasi interamente composto da zeri, cio\u00e8 sar\u00e0 un array sparso.<\/p>\n<pre><code class=\"bash\">Set ^m(id1, id2) = 1 \nSet ^m(id1, id3) = 1 \nSet ^m(id1, id4) = 1 \nSet ^m(id1) = 3 \nSet ^m(id2, id4) = 1 \nSet ^m(id2, id5) = 1 \nSet ^m(id2) = 2\n....\n<\/code><\/pre>\n<p>\nIn questo esempio memorizziamo nel global <strong>^m<\/strong> la matrice di adiacenza, cos\u00ec come il numero di spigoli per ciascun nodo (chi \u00e8 amico di chi e il numero di amici).<\/p>\n<p>Se il numero di elementi nel grafo non \u00e8 superiore a 29 milioni (questo numero \u00e8 preso come prodotto di 8 * <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache201512\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">la dimensione massima della stringa<\/a><\/noindex>), esiste un modo ancora pi\u00f9 economico per memorizzare tali matrici: le stringhe di bit, poich\u00e9 la loro implementazione ottimizza in modo speciale i grandi intervalli vuoti.<\/p>\n<p>Le operazioni sulle stringhe di bit vengono eseguite dalla funzione <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fbit\">$BIT<\/a><\/noindex>. <\/p>\n<pre><code class=\"bash\">; impostazione del bit\nSET $BIT(rowID, positionID) = 1\n; ottenimento del bit\nWrite $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>Tabella delle transizioni di un automa finito<\/h2>\n<p>\nPoich\u00e9 il grafo delle transizioni di un automa finito \u00e8 un normale grafo, anche la tabella delle transizioni \u00e8 la stessa matrice di adiacenza di cui si \u00e8 parlato sopra.<\/p>\n<h2>Automati cellulari<\/h2>\n<p>\n<img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/b9fedb51cd1c8fced79ca221a925349c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl pi\u00f9 noto automa cellulare \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%96%D0%B8%D0%B7%D0%BD%D1%8C_(%D0%B8%D0%B3%D1%80%D0%B0)\">il gioco \"Vita\"<\/a><\/noindex>, che a causa delle sue regole (quando una cellula ha molti vicini, muore) rappresenta una matrice sparsa.<\/p>\n<p>Stephen Wolfram ritiene che gli automi cellulari rappresentino <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">una nuova area della scienza<\/a><\/noindex>. Nel 2002 pubblica un libro di 1280 pagine intitolato \"A New Kind of Science\", in cui argomenta ampiamente che le scoperte nel campo degli automi cellulari non sono isolate, ma piuttosto robuste e hanno grande importanza in tutti i campi della scienza.<\/p>\n<p>\u00c8 stato dimostrato che qualsiasi algoritmo eseguibile su un computer pu\u00f2 essere realizzato tramite un automa cellulare. Gli automi cellulari vengono utilizzati per modellare ambienti e sistemi dinamici, per risolvere problemi algoritmici e per altri scopi.<\/p>\n<p>Se abbiamo un campo enorme e dobbiamo registrare tutti gli stati intermedi dell'automa cellulare, \u00e8 senz'altro ragionevole utilizzare variabili globali.<\/p>\n<h2>Cartografia<\/h2>\n<p>\nLa prima cosa che mi viene in mente quando si parla di utilizzare matrici sparse \u00e8 il problema della cartografia.<\/p>\n<p>Di solito, sulle mappe c'\u00e8 molto spazio vuoto. Se si rappresenta la mappa come grandi pixel, il 71% dei pixel della Terra sar\u00e0 occupato dall'oceano. Matrice sparsa. E se si raffigurano solo le opere create dall'uomo, lo spazio vuoto sar\u00e0 superiore al 95%.<\/p>\n<p>Certo, nessuno conserva le mappe sotto forma di matrici raster, si utilizza una rappresentazione vettoriale.<br \/>\nMa cosa rappresentano le mappe vettoriali? Sono una sorta di contorno e consistono in punti, linee poligonali e poligoni.<br \/>\nIn effetti, il database dei punti e delle loro connessioni.<\/p>\n<p>Una delle sfide pi\u00f9 ambiziose della mappatura \u00e8 la missione di mappatura della nostra galassia con il telescopio Gaia. In termini figurativi, la nostra galassia, cos\u00ec come l'intero universo, \u00e8 un insieme di spazi vuoti: enormi spazi di vuoto, in cui ci sono piccoli punti rari: le stelle. Lo spazio vuoto \u00e8 del 99,999999\u2026%. Per memorizzare la mappa della nostra galassia \u00e8 stata scelta una base di dati globale \u2014 Cach\u00e9.<\/p>\n<p>Non conosco la struttura esatta dei globali in questo progetto, ma posso supporre che sia qualcosa di simile a:<\/p>\n<pre><code class=\"bash\">Set ^galaxy(b, l, d) = 1; Numero della stella nel catalogo, se presente\nSet ^galaxy(b, l, d, \"name\") = \"Sole\"\nSet ^galaxy(b, l, d, \"type\") = \"normale\"; varianti blackhole, quasar, red_dwarf, ecc.\nSet ^galaxy(b, l, d, \"weight\") = 14E50\nSet ^galaxy(b, l, d, \"planetes\") = 7\nSet ^galaxy(b, l, d, \"planetes\", 1) = \"Mercurio\"\nSet ^galaxy(b, l, d, \"planetes\", 1, weight) = 1E20\n...\n<\/code><\/pre>\n<p>\n<i>Dove b, l, d sono <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wiki2.org\/wiki\/Galattico_sistema_di_coordiante\">coordinate galattiche di latitudine, longitudine<\/a><\/noindex> e distanza dal Sole.<\/i><\/p>\n<p>La struttura flessibile dei globali permette di mantenere tutte le caratteristiche necessarie delle stelle e dei pianeti, poich\u00e9 i database globali sono senza schema (scheme-less).<\/p>\n<p>La scelta di Cach\u00e9 per memorizzare la mappa del nostro universo \u00e8 stata motivata non solo dalla sua flessibilit\u00e0, ma anche dalla sua capacit\u00e0 di salvare molto rapidamente i flussi di dati, creando nel contempo globali indicizzati per una rapida ricerca.<\/p>\n<p>Tornando sulla Terra, sono stati creati progetti cartografici sui globali <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> e il fork di OpenStreetMap \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>Recentemente al <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">hackathon Cach\u00e9<\/a><\/noindex> sono stati implementati indici geospaziali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial.<\/a><\/noindex>Aspettiamo dai autori dell'articolo ulteriori dettagli sull'implementazione.<\/p>\n<h3>Implementazione degli indici spaziali nel globale di OpenStreetMap XAPI<\/h3>\n<p>\nLe immagini sono state prese da <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">questa presentazione<\/a><\/noindex>.<\/p>\n<p>L'intero pianeta Terra viene suddiviso in quadrati, poi in sottopartizioni, e le sottopartizioni in sotto-sottopartizioni, e cos\u00ec via. In generale, otteniamo una struttura gerarchica per la quale sono stati creati i globali.<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/239c54c201b8013f1897ecf1ccadcc9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn qualsiasi momento possiamo richiedere praticamente istantaneamente il quadrato desiderato o pulirlo, e tutte le sottopartizioni saranno restituite o rimosse.<\/p>\n<p>Una simile struttura sui globali pu\u00f2 essere implementata in diversi modi.<\/p>\n<p>Opzione 1:<\/p>\n<pre><code class=\"bash\">Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idPrimoPunto\nSet ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idSecondoPunto\n...<\/code><\/pre>\n<p>\nOpzione 2:<\/p>\n<pre><code class=\"bash\">Set ^m('abacdabcdabacdabcda', 1) = idPrimoPunto\nSet ^m('abacdabcdabacdabcda', 2) = idSecondoPunto\n...<\/code><\/pre>\n<p>\nIn entrambi i casi, non \u00e8 difficile richiedere i punti che si trovano all'interno di un quadrato di qualsiasi livello su COS\/M. Sar\u00e0 un po' pi\u00f9 facile pulire aree quadrate di qualsiasi livello nel primo caso, ma questo \u00e8 raramente necessario.<\/p>\n<p>Esempio di uno dei quadrati di basso livello:<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/1fba7eb9253c6af9206cb168c6d43f2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco alcuni globali dal progetto XAPI: visualizzazione dell'indice sui globali:<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/3a80dd4c3fb23d0f2d3094703966f74b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGlobale <strong>^way<\/strong> utilizzato per memorizzare i punti <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">polilinee<\/a><\/noindex> (strade, piccoli fiumi ecc.) e poligoni (aree chiuse: edifici, foreste ecc.).<\/p>\n<h2>Una classificazione grossolana dell'uso di matrici sparse nei globali.<\/h2>\n<p><\/p>\n<ol>\n<li>Memorizziamo le coordinate di determinati oggetti e i loro stati (mappatura, cellular automata)<\/li>\n<li>Memorizziamo matrici sparse.<\/li>\n<\/ol>\n<p>\nPer il caso 2) quando si richiede una coordinata specifica, dove all'elemento non \u00e8 stato assegnato un valore, dobbiamo ottenere il valore dell'elemento della matrice sparsa per impostazione predefinita.<\/p>\n<h2>I vantaggi che otteniamo dalla memorizzazione di matrici multidimensionali nei globali<\/h2>\n<p>\n<b>Cancellazione rapida e\/o estrazioni di aree dello spazio, multiple di righe, piani, cubi ecc.<\/b> Nei casi in cui vengono utilizzati indici interi, pu\u00f2 risultare utile la possibilit\u00e0 di cancellazione rapida e\/o estrazione di aree dello spazio, multiple di righe, piani, cubi ecc.<\/p>\n<p>Con il comando <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex> possiamo eliminare sia un singolo elemento che una riga, e persino un intero piano. Grazie alle propriet\u00e0 dei globali, questo avviene molto rapidamente \u2014 migliaia di volte pi\u00f9 veloce rispetto alla cancellazione elemento per elemento.<\/p>\n<p>In figura \u00e8 mostrato un array tridimensionale nel globale <strong>^a<\/strong> e diversi tipi di cancellazioni.<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono spade magiche per la memorizzazione dei dati. Array sparsi. Parte 3\" src=\"\/wp-content\/uploads\/2019\/07\/cc85ee59d42595df0d72480d3e533a12.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer estrarre aree dello spazio in base a indici noti, \u00e8 possibile utilizzare il comando <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_cmerge\">Merge<\/a><\/noindex>.<\/p>\n<p>Estrazione di una colonna della matrice nella variabile Column:<\/p>\n<pre><code class=\"bash\">; Definiamo una matrice sparsa tridimensionale 3x3x3\nSet ^a(0,0,0)=1,^a(2,2,0)=1,^a(2,0,1)=1,^a(0,2,1)=1,^a(2,2,2)=1,^a(2,1,2)=1\nUnisci Column = ^a(2,2)\n; Visualizziamo la variabile Column\nZwrite Column\n<\/code><\/pre>\n<p>\nConclusione:<\/p>\n<pre><code class=\"bash\">Column(0)=1\nColumn(2)=1\n<\/code><\/pre>\n<p>\n\u00c8 interessante notare che nella variabile Column abbiamo anch'essa ottenuto una matrice sparsa, alla quale bisogna accedere attraverso <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex>, poich\u00e9 i valori predefiniti non sono memorizzati in essa.<\/p>\n<p>L'estrazione di aree dello spazio pu\u00f2 anche essere effettuata tramite un piccolo programma che utilizza la funzione <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>. Questo \u00e8 particolarmente utile in spazi i cui indici non sono quantizzati (cartografia).<\/p>\n<h2>Conclusione<\/h2>\n<p>\nI tempi attuali pongono nuove sfide ambiziose. I grafi possono contenere miliardi di vertici, le mappe miliardi di punti, e qualcuno potrebbe anche voler avviare il proprio universo su automi cellulari (<noindex><a rel=\"nofollow\" href=\"http:\/\/lenta.ru\/news\/2009\/08\/28\/universe\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.worldscientific.com\/worldscibooks\/10.1142\/4702\">2<\/a><\/noindex>).<\/p>\n<p>Quando il volume dei dati di array sparsi non pu\u00f2 pi\u00f9 essere contenuto nella memoria RAM e bisogna comunque lavorarci, \u00e8 opportuno considerare la possibilit\u00e0 di realizzare progetti simili su globali e COS.<\/p>\n<p>Grazie per la vostra attenzione! Aspettiamo le vostre domande e commenti.<\/p>\n<p><b>Avviso<\/b>: <i>Questo articolo e i miei commenti sono la mia opinione e non riflettono la posizione ufficiale della societ\u00e0 InterSystems.<\/i><br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/268465\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 (1, 2) \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 \u043a\u0430\u043a \u043e \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u0445, \u0432 \u044d\u0442\u043e\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044b \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27432,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36632","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.1.1 - 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\/it\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u0427\u0430\u0441\u0442\u044c 3 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3\" \/>\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=\"2019-10-31T19:12:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:12:47+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\udd47Globali \u2014 strumenti preziosi per l'archiviazione dei dati. Array sparsi. Parte 3 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","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\u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u0427\u0430\u0441\u0442\u044c 3 | ProHoster","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","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":"2019-10-31T19:12:47+00:00","article:modified_time":"2019-10-31T19:12:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36632","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":"2026-01-22 04:12:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:41:52","updated":"2026-01-22 04:12:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36632","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=36632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}