{"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 array sparsi 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 array sparsi 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, ci si imbatte spesso in array sparsi cos\u00ec vasti 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 integrante del linguaggio, <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 permettono di implementarli. Per C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> e altro. <\/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>Conservano solo i valori di nodi specifici e non memorizzano i valori non definiti;<\/li>\n<li>L'interfaccia di accesso ai valori dei nodi \u00e8 estremamente simile a come molti linguaggi di programmazione implementano l'accesso agli elementi di un array multidimensionale.\n<pre><code class=\"bash\">Set ^a(1, 2, 3)=5\nScrivi ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Global \u00e8 una struttura di basso livello per la memorizzazione dei dati, quindi presenta prestazioni straordinarie (da centinaia di migliaia a decine di milioni di transazioni al secondo a seconda dell'hardware). <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 Global \u00e8 una struttura persistente, ha senso utilizzare array sparsi solo quando si sa in anticipo che la memoria RAM sar\u00e0 insufficiente.<\/p><\/blockquote>\n<p>\nUna delle caratteristiche delle implementazioni degli array sparsi \u00e8 il ritorno di un valore predefinito se si accede a una cella non definita.<\/p>\n<p>Questo pu\u00f2 essere realizzato 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 aiutare i Global?<\/p>\n<h2>Matrice di adiacenza (di 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 array sparsi 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 quanto pi\u00f9 grande \u00e8 il grafo, tanto pi\u00f9 zeri ci saranno nella matrice. Se, ad esempio, si prende un grafo di una rete sociale e lo si rappresenta sotto forma di tale matrice, sar\u00e0 per lo pi\u00f9 composto da zeri, cio\u00e8 sar\u00e0 un array sparso.<\/p>\n<pre><code class=\"bash\">Imposta ^m(id1, id2) = 1 \nImposta ^m(id1, id3) = 1 \nImposta ^m(id1, id4) = 1 \nImposta ^m(id1) = 3 \nImposta ^m(id2, id4) = 1 \nImposta ^m(id2, id5) = 1 \nImposta ^m(id2) = 2\n....\n<\/code><\/pre>\n<p>\nIn questo esempio salviamo in globale <strong>^m<\/strong> la matrice di adiacenza, cos\u00ec come il numero di collegamenti per ciascun nodo (chi \u00e8 amico di chi e quanti amici ha).<\/p>\n<p>Se il numero di elementi nel grafo non supera i 29 milioni (questo numero \u00e8 considerato come il 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\">dimensione massima della stringa<\/a><\/noindex>), c'\u00e8 un modo ancora pi\u00f9 economico per memorizzare tali matrici \u2014 le stringhe di bit, poich\u00e9 nella loro implementazione vengono ottimizzati in modo speciale i grandi intervalli vuoti.<\/p>\n<p>Le operazioni con le stringhe di bit vengono effettuate 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\">; imposta il bit\nSET $BIT(rowID, positionID) = 1\n; ottieni il bit\nScrivi $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>Tabella di transizione dell'automa finito<\/h2>\n<p>\nPoich\u00e9 il grafo delle transizioni dell'automa finito \u00e8 un grafo ordinario, la tabella di transizione dell'automa finito \u00e8 la stessa matrice di adiacenza di cui si \u00e8 parlato sopra.<\/p>\n<h2>Automi cellulari<\/h2>\n<p>\n<img decoding=\"async\" alt=\"I globali sono array sparsi 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 \u2014 essa muore) rappresenta un array sparso.<\/p>\n<p>Stephen Wolfram, ritiene che gli automi cellulari siano una <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">nuova area della scienza<\/a><\/noindex>. Nel 2002 pubblica un libro di 1280 pagine intitolato \u00abA New Kind of Science\u00bb, in cui argomenta ampiamente che i progressi nel campo degli automi cellulari non sono isolati, ma molto robusti e di grande importanza per tutti i settori della scienza.<\/p>\n<p>\u00c8 stato dimostrato che qualsiasi algoritmo eseguibile su un computer pu\u00f2 essere realizzato attraverso un automa cellulare. Gli automi cellulari sono utilizzati per modellare ambienti dinamici e sistemi, per risolvere problemi algoritmici e per altri scopi.<\/p>\n<p>Se abbiamo un campo enorme e dobbiamo registrare tutti gli stati intermedi di un automa cellulare, ha senso utilizzare delle variabili globali.<\/p>\n<h2>Cartografia<\/h2>\n<p>\nLa prima cosa che mi viene in mente quando si parla di utilizzare array sparsi sono i problemi di cartografia.<\/p>\n<p>In genere, le mappe contengono molto spazio vuoto. Se si rappresenta la mappa come grandi pixel, il 71% dei pixel della Terra sar\u00e0 occupato dall'oceano. Un array sparso. E se si segnano solo le opere dell'uomo, lo spazio vuoto sar\u00e0 superiore al 95%.<\/p>\n<p>Certo, nessuno memorizza le carte come matrici raster; si utilizza una rappresentazione vettoriale.<br \/>\nMa cosa sono le carte vettoriali? Sono una sorta di cornice composta da punti, polilinee e poligoni.<br \/>\nIn realt\u00e0, \u00e8 un database di punti e delle connessioni tra di essi.<\/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 figurati, la nostra galassia, come l'intero universo, \u00e8 un vasto insieme di spazi vuoti: enormi spazi di vuoto in cui si trovano rare piccole punti \u2014 stelle. Lo spazio vuoto rappresenta il 99,999999....%. Per conservare la mappa della nostra galassia \u00e8 stato scelto un database globale \u2014 Cach\u00e9.<\/p>\n<p>Non conosco la struttura esatta dei globals in questo progetto; 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\") = \"Sun\"\nSet ^galaxy(b, l, d, \"type\") = \"normal\"; opzioni 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) = \"Mercury\"\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\/Galattica_sistema_coordate\">coordinate galattiche di latitudine, longitudine<\/a><\/noindex> e distanza dal Sole.<\/i><\/p>\n<p>La struttura flessibile dei globali consente di mantenere qualsiasi caratteristica necessaria delle stelle e dei pianeti, dato che le basi sui globali sono senza schema (scheme-less).<\/p>\n<p>La scelta di Cach\u00e9 per memorizzare la mappa del nostro universo si basa non solo sulla flessibilit\u00e0, ma anche sulla capacit\u00e0 di memorizzare rapidamente il flusso di dati, creando al contempo globali indicizzati per una ricerca veloce.<\/p>\n<p>Tornando alla Terra, sono stati creati progetti cartografici sui globali <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> e un fork di OpenStreetMap \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>Di recente, durante <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">un hackathon di Cach\u00e9<\/a><\/noindex> sono stati realizzati indici geospaziali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial<\/a><\/noindex>. Attendiamo dettagli sull'implementazione dagli autori dell'articolo.<\/p>\n<h3>Implementazione degli indici spaziali nel globale di OpenStreetMap XAPI<\/h3>\n<p>\nLe immagini sono tratte da <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">di questa presentazione.<\/a><\/noindex>.<\/p>\n<p>L'intero globo terrestre \u00e8 suddiviso in quadrati, poi in sottoquadrati, e i sottoquadrati in sotto-sottoquadrati, 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 array sparsi 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 necessario o eliminarlo, e tutti i sottoquadrati verranno restituiti o eliminati.<\/p>\n<p>Tale schema sui globali pu\u00f2 essere realizzato in diversi modi.<\/p>\n<p>Opzione 1:<\/p>\n<pre><code class=\"bash\">Imposta ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idPrimoPunto\nImposta ^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\">Imposta ^m('abacdabcdabacdabcda', 1) = idPrimoPunto\nImposta ^m('abacdabcdabacdabcda', 2) = idSecondoPunto\n...<\/code><\/pre>\n<p>\nIn entrambi i casi, non \u00e8 difficile su COS\/M richiedere punti situati all'interno di un quadrato di qualsiasi livello. Sar\u00e0 leggermente pi\u00f9 semplice pulire pezzi quadrati di spazio di qualsiasi livello nella prima opzione, ma \u00e8 raro che ci\u00f2 sia necessario.<\/p>\n<p>Ecco un esempio di uno dei quadratini di livello inferiore:<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono array sparsi 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 del progetto XAPI: presentazione dell'indice sui globali:<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono array sparsi 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> \u00e8 utilizzato per memorizzare punti <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">polilinee<\/a><\/noindex> (strade, fiumi minori, ecc.) e poligoni (aree delimitate: edifici, boschi, ecc.).<\/p>\n<h2>Una classificazione grossolana dell'uso di array sparsi sui globali.<\/h2>\n<p><\/p>\n<ol>\n<li>Memorizziamo le coordinate di alcuni oggetti e i loro stati (mappatura, automi cellulari)<\/li>\n<li>Memorizziamo matrici sparse.<\/li>\n<\/ol>\n<p>\nNel caso 2), quando si richiede una certa coordinata, dove all'elemento non \u00e8 stato assegnato un valore, dobbiamo ottenere il valore dell'elemento dell'array sparso per impostazione predefinita.<\/p>\n<h2>I bonus che otteniamo memorizzando matrici multidimensionali sui globali<\/h2>\n<p>\n<b>Eliminazione rapida e\/o estrazione di pezzi di spazio, multipli di righe, piani, cubi, ecc.<\/b> Nei casi in cui si utilizzano indici interi, pu\u00f2 risultare utile la possibilit\u00e0 di eliminazione rapida e\/o estrazione di pezzi di spazio, multipli 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\">Uccidi<\/a><\/noindex> Possiamo eliminare sia un singolo elemento che una riga, e persino un'intera faccia. Grazie alle propriet\u00e0 globali, questo avviene molto rapidamente \u2014 migliaia di volte pi\u00f9 veloce dell'eliminazione elemento per elemento.<\/p>\n<p>L'immagine mostra un array tridimensionale nella globale <strong>^a<\/strong> e diversi tipi di eliminazione.<\/p>\n<p><img decoding=\"async\" alt=\"I globali sono array sparsi 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 pezzi di 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 un array sparso 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>\nRisultato:<\/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 anche ottenuto un array sparso, a cui dobbiamo accedere anch'esso tramite <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 esso.<\/p>\n<p>L'estrazione di pezzi di spazio pu\u00f2 avvenire anche attraverso un piccolo programma utilizzando la funzione <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>. \u00c8 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 consistere in miliardi di nodi, le mappe in miliardi di punti, e qualcuno potrebbe addirittura 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 deve comunque essere elaborato, \u00e8 opportuno considerare l'implementazione di progetti simili su globali e COS.<\/p>\n<p>Grazie per l'attenzione! Attendiamo le vostre domande e commenti.<\/p>\n<p><b>Avvertenza<\/b>: <i>Questo articolo e i miei commenti sono solo il mio punto di vista e non rappresentano la posizione ufficiale della corporation 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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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.0.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:description\" content=\"\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\" \/>\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\udd47I globali sono spade affilate per la memorizzazione dei dati. Array sparsi. Parte 3 | ProHoster","description":"Nelle parti precedenti (1, 2) abbiamo parlato dei globali come alberi, in questa considereremo i globali come array sparsi. Un array sparso \u00e8 una particolare tipologia di array in cui la maggior parte dei valori assume lo stesso valore. Nella pratica, si incontrano cos\u00ec tanti array sparsi enormi che non ha senso occupare memoria con elementi identici. Pertanto, ha senso implementare gli array sparsi.","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:description":"\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","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}]}}