{"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\/da\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","title":{"rendered":"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/ac6eefbfb9d7cc28c3f2ca85c7d1adb2.jpg\" style=\"display:block;margin: 0 auto;\" \/>I tidligere afsnit (<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>) talte vi om globale variabler som tr\u00e6er, i dette afsnit vil vi se p\u00e5 globale variabler som sparsommelige arrays.<\/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\">Sparsomt array<\/a><\/noindex> er en type array, hvor st\u00f8rstedelen af v\u00e6rdierne har den samme v\u00e6rdi.<\/p>\n<p>I praksis st\u00f8der man ofte p\u00e5 s\u00e5 enorme sparsomme arrays, at det ikke giver mening at optage hukommelse med ens elementer. Derfor giver det mening at implementere sparsomme arrays, s\u00e5 der ikke bruges hukommelse p\u00e5 at gemme ensartede v\u00e6rdier.<br \/>\nI nogle programmeringssprog er sparsomme arrays en del af sproget, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jsoftware.com\/help\/dictionary\/d211.htm\">for eksempel i J<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathworks.com\/help\/matlab\/ref\/sparse.html\">MATLAB<\/a><\/noindex>. I andre programmeringssprog findes der specielle biblioteker, som g\u00f8r det muligt at implementere dem. For C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> og andre. <\/p>\n<p>Globale variabler er gode kandidater til at implementere sparsomme arrays, fordi:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>De opbevarer v\u00e6rdier for kun bestemte noder og gemmer ikke v\u00e6rdier for udefinerede;<\/li>\n<li>Adgangsinterfacet til en noders v\u00e6rdi er ekstremt lig det, der er implementeret i mange programmeringssprog for at f\u00e5 adgang til elementer i et multidimensionalt array.\n<pre><code class=\"bash\">Set ^a(1, 2, 3)=5\nWrite ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Globalen er en tilstr\u00e6kkelig lavniveaubygget struktur til datalagring, s\u00e5 de har fremragende hastighedsegenskaber (fra hundredtusinder til flere millioner transaktioner pr. sekund afh\u00e6ngigt af hardware, jf. <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/257501\/\">1<\/a><\/noindex>)<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p>Da globalen er en vedholdende struktur, giver det mening at lave sparsomme arrays p\u00e5 dem, n\u00e5r man p\u00e5 forh\u00e5nd ved, at m\u00e6ngden af RAM vil v\u00e6re utilstr\u00e6kkelig.<\/p><\/blockquote>\n<p>\nEt af egenskaberne ved implementationer af sparsomme arrays er returnering af en standardv\u00e6rdi, hvis man pr\u00f8ver at tilg\u00e5 en udefineret celle.<\/p>\n<p>Dette kan implementeres ved at bruge funktionen <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex> i COS. I dette eksempel er der betragtet et 3-dimensionelt array.<\/p>\n<pre><code>SET a = $GET(^a(x,y,z), defValue)<\/code><\/pre>\n<p>\nI hvilke opgaver er sparsomme arrays n\u00f8dvendige, og hvordan kan globale variabler hj\u00e6lpe?<\/p>\n<h2>Adjacensmatrix (sammenh\u00e6ng)<\/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\">S\u00e5danne matricer<\/a><\/noindex> bruges til at repr\u00e6sentere grafer:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/a580c451610bcacbef154c161ef63939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er tydeligt, at jo st\u00f8rre grafen er, desto flere nuller vil der v\u00e6re i matricen. For eksempel, hvis man tager et socialt netv\u00e6rksgraf og repr\u00e6senterer det som en s\u00e5dan matrix, vil den n\u00e6sten helt best\u00e5 af nuller, dvs. den vil v\u00e6re et sparsomt array.<\/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>\nI dette eksempel gemmer vi i globalen <strong>^m<\/strong> tilknytningsmatricen samt antallet af kanter ved hver node (hvem der er venner med hvem og antal venner).<\/p>\n<p>Hvis antallet af elementer i grafen ikke overstiger 29 millioner (det tal tages som produktet af 8 * <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache201512\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">maksimal l\u00e6ngde af strengen<\/a><\/noindex>), s\u00e5 findes der en endnu mere \u00f8konomisk metode til opbevaring af s\u00e5danne matricer - bitstrenge, da der i deres implementering specialoptimeres for store huller.<\/p>\n<p>Manipulationer med bitstrenge udf\u00f8res af funktionen <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\">; s\u00e6t bit\nSET $BIT(rowID, positionID) = 1\n; hent bit\nWrite $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>Overgangstabel for enautomater<\/h2>\n<p>\nDa grafen af overgangene for en automat er en almindelig graf, er overgangstabellen for automaten den samme som den adjacensmatrix, der blev n\u00e6vnt ovenfor.<\/p>\n<h2>Cellul\u00e6re automater<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/b9fedb51cd1c8fced79ca221a925349c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen mest kendte cellul\u00e6re automat er <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)\">spillet 'Liv'<\/a><\/noindex>, som p\u00e5 grund af sine regler (n\u00e5r en celle har mange naboer - d\u00f8r den) repr\u00e6senterer et sparsomt array.<\/p>\n<p>Stephen Wolfram mener, at cellul\u00e6re automater er en <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">ny videnskabsgren.<\/a><\/noindex>I 2002 udgiver han den 1280-sider lange bog 'A New Kind of Science', hvor han argumenterer for, at fremskridt inden for cellul\u00e6re automater ikke er isoleret, men meget robuste og har stor betydning for alle videnskabsomr\u00e5der.<\/p>\n<p>Det er bevist, at enhver algoritme, der kan udf\u00f8res p\u00e5 en computer, kan implementeres ved hj\u00e6lp af en cellul\u00e6r automat. Cellul\u00e6re automater bruges til modellering af dynamiske milj\u00f8er og systemer, til l\u00f8sning af algoritmiske problemer og andre form\u00e5l.<\/p>\n<p>Hvis vi har et k\u00e6mpestort felt, og vi skal registrere alle mellemtilstande i den cellul\u00e6re automat, er det ganske fornuftigt at bruge globale variabler.<\/p>\n<h2>Kartografi<\/h2>\n<p>\nDet f\u00f8rste, jeg kommer i tanker om, n\u00e5r det drejer sig om brugen af sparsomme arrays, er kartografiske opgaver.<\/p>\n<p>Som regel er der meget tomt rum p\u00e5 kort. Hvis kortet repr\u00e6senteres som store pixels, vil 71% af pixels p\u00e5 Jorden v\u00e6re d\u00e6kket af oceaner. Sparsomt array. Og hvis man kun registrerer menneskeskabte strukturer, vil der v\u00e6re over 95% tomt rum.<\/p>\n<p>Selvf\u00f8lgelig gemmer ingen kort som raster arrays; der anvendes vektorrepr\u00e6sentation.<br \/>\nMen hvad best\u00e5r vektorkort af? Det er en ramme best\u00e5ende af punkter, polylinjer og polygoner.<br \/>\nFaktisk er databasen med punkter og forbindelser mellem dem.<\/p>\n<p>En af de mest ambiti\u00f8se kortl\u00e6gningsopgaver er kortl\u00e6gningen af vores galakse med Gaia-teleskopet. Billedligt talt er vores galakse, ligesom hele universet, en sammenh\u00e6ngende, tyndt fordelt masse: enorme tomrum med sj\u00e6ldne sm\u00e5 punkter \u2013 stjerner. Tomrummet udg\u00f8r 99,999999...%. Til opbevaring af kortet over vores galakse blev der valgt en database p\u00e5 globaler \u2013 Cach\u00e9.<\/p>\n<p>Jeg kender ikke den n\u00f8jagtige struktur af globaler i dette projekt, men jeg kan antage, at det ligner noget som:<\/p>\n<pre><code class=\"bash\">Set ^galaxy(b, l, d) = 1; Stjernens nummer i kataloget, hvis det findes\nSet ^galaxy(b, l, d, \"name\") = \"Sol\"\nSet ^galaxy(b, l, d, \"type\") = \"normal\"; muligheder blackhole, quazar, red_dwarf osv.\nSet ^galaxy(b, l, d, \"weight\") = 14E50\nSet ^galaxy(b, l, d, \"planetes\") = 7\nSet ^galaxy(b, l, d, \"planetes\", 1) = \"Merkur\"\nSet ^galaxy(b, l, d, \"planetes\", 1, weight) = 1E20\n...\n<\/code><\/pre>\n<p>\n<i>Hvor b, l, d er <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wiki2.org\/wiki\/Galaktiske_koordinatsystem\">galaktiske koordinater for breddegrad, l\u00e6ngdegrad<\/a><\/noindex> og afstand til solen.<\/i><\/p>\n<p>Den fleksible struktur af globaler g\u00f8r det muligt at gemme alle n\u00f8dvendige egenskaber for stjerner og planeter, da databaser baseret p\u00e5 globaler er skema-frie (scheme-less).<\/p>\n<p>Cach\u00e9 blev valgt til at gemme kortet over vores univers, ikke kun p\u00e5 grund af sin fleksibilitet, men ogs\u00e5 p\u00e5 grund af dens evne til meget hurtigt at gemme datastreams, samtidig med at den opretter indeks globale for hurtig s\u00f8gning.<\/p>\n<p>Hvis vi vender tilbage til Jorden, s\u00e5 blev der oprettet kortl\u00e6gningsprojekter p\u00e5 globaler <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> og fork af OpenStreetMap \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>For nylig p\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">Cach\u00e9 hackathon<\/a><\/noindex> blev der implementeret geospatiale indekser <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial<\/a><\/noindex>. Vi ser frem til detaljer om implementeringen fra forfatterne af artiklen.<\/p>\n<h3>Implementeringen af rumlige indekser p\u00e5 globale i OpenStreetMap XAPI<\/h3>\n<p>\nBillederne er taget fra <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">denne pr\u00e6sentation<\/a><\/noindex>.<\/p>\n<p>Hele jorden opdeles i kvadrater, som derefter opdeles i underkvadrater, og underkvadraterne opdeles i under-underkvadrater og s\u00e5 videre. Samlet set f\u00e5r vi en hierarkisk struktur, hvor globaler er skabt til opbevaring.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/239c54c201b8013f1897ecf1ccadcc9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5r som helst kan vi praktisk talt \u00f8jeblikkeligt anmode om det \u00f8nskede kvadrat eller rydde det, og alle underkvadrater vil ogs\u00e5 blive returneret eller ryddet.<\/p>\n<p>En lignende ordning med globaler kan implementeres p\u00e5 flere m\u00e5der.<\/p>\n<p>Variant 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) = idF\u00f8rstePunkt\nSet ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idAndetPunkt\n...<\/code><\/pre>\n<p>\nVariant 2:<\/p>\n<pre><code class=\"bash\">Set ^m('abacdabcdabacdabcda', 1) = idF\u00f8rstePunkt\nSet ^m('abacdabcdabacdabcda', 2) = idAndetPunkt\n...<\/code><\/pre>\n<p>\nI begge tilf\u00e6lde er det let at anmode om punkter, der befinder sig i et kvadrat p\u00e5 ethvert niveau p\u00e5 COS\/M. Det vil v\u00e6re lidt lettere at rydde kvadratiske stykker rum p\u00e5 ethvert niveau i det f\u00f8rste tilf\u00e6lde, men det er sj\u00e6ldent n\u00f8dvendigt.<\/p>\n<p>Eksempel p\u00e5 en af de nederste kvadrater:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/1fba7eb9253c6af9206cb168c6d43f2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer er nogle globaler fra projektet XAPI: indekspr\u00e6sentationen p\u00e5 globalerne:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/3a80dd4c3fb23d0f2d3094703966f74b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGlobal <strong>^way<\/strong> brugt til at gemme punkter <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">polyliner<\/a><\/noindex> (veje, sm\u00e5 floder osv.) og polygoner (lukkede omr\u00e5der: bygninger, skove osv.).<\/p>\n<h2>En grov klassificering af brugen af sparsomme matrixer p\u00e5 globalerne.<\/h2>\n<p><\/p>\n<ol>\n<li>Vi gemmer koordinater for visse objekter og deres tilstande (kortl\u00e6gning, celleautomater)<\/li>\n<li>Vi gemmer sparsomme matricer.<\/li>\n<\/ol>\n<p>\nI tilf\u00e6lde 2) ved anmodning om en bestemt koordinat, hvor elementet ikke har tildelt en v\u00e6rdi, skal vi modtage v\u00e6rdien af elementet i den sparsomme matrix som standard.<\/p>\n<h2>Bonusserne, som vi modtager ved at gemme flerdimensionale matricer i globalerne<\/h2>\n<p>\n<b>Hurtig sletning og\/eller udtr\u00e6k af rumstykker, der er multipla af r\u00e6kker, planer, kuber osv.<\/b> For tilf\u00e6lde, hvor der bruges heltalsindekser, kan det v\u00e6re nyttigt at have mulighed for hurtig sletning og\/eller udtr\u00e6k af rumstykker, der er multipla af r\u00e6kker, planer, kuber osv.<\/p>\n<p>Med kommandoen <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex> Vi kan slette s\u00e5vel et enkelt element som en r\u00e6kke, og endda et helt plan. Takket v\u00e6re egenskaberne ved globalerne sker dette meget hurtigt \u2014 tusinder af gange hurtigere end elementvis sletning.<\/p>\n<p>Illustrationen viser en tredimensionel matrix i globalen <strong>^a<\/strong> og forskellige typer sletninger.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 datalagringsskove. Sparsomme arrays. Del 3\" src=\"\/wp-content\/uploads\/2019\/07\/cc85ee59d42595df0d72480d3e533a12.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor at udtr\u00e6kke rumstykker efter kendte indekser kan kommandoen anvendes <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_cmerge\">Sammenflet<\/a><\/noindex>.<\/p>\n<p>Udtr\u00e6k af matrixkolonne til variablen Column:<\/p>\n<pre><code class=\"bash\">; Lad os definere en tredimensional sparsomme matrix 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\nMerge Column = ^a(2,2)\n; Vi udskriver variablen Column\nZwrite Column\n<\/code><\/pre>\n<p>\nOutput:<\/p>\n<pre><code class=\"bash\">Column(0)=1\nColumn(2)=1\n<\/code><\/pre>\n<p>\nInteressant er det, at variablen Column ogs\u00e5 endte med at v\u00e6re en sparsomme matrix, som ogs\u00e5 skal tilg\u00e5s via <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex>, da standardv\u00e6rdierne ikke gemmes i den.<\/p>\n<p>Udtr\u00e6k af rumstykker kan ogs\u00e5 g\u00f8res gennem et lille program med brug af funktionen <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>. Dette er is\u00e6r praktisk i rum, hvis indekser ikke er kvantiserede (kortl\u00e6gning).<\/p>\n<h2>Konklusion<\/h2>\n<p>\nNutidens tider stiller nye ambiti\u00f8se opgaver. Grafer kan best\u00e5 af milliarder af noder, kort kan indeholde milliarder af punkter, og nogen kunne endda \u00f8nske at starte deres egen univers p\u00e5 cellul\u00e6re automater (<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>N\u00e5r m\u00e6ngden af data i sparse arrays ikke l\u00e6ngere kan rummes i RAM, men det er n\u00f8dvendigt at arbejde med dem, b\u00f8r man overveje muligheden for at implementere s\u00e5danne projekter p\u00e5 globale og COS.<\/p>\n<p>Tak for din opm\u00e6rksomhed! Vi ser frem til dine sp\u00f8rgsm\u00e5l og \u00f8nsker i kommentarerne.<\/p>\n<p><b>Ansvarsfraskrivelse<\/b>: <i>Denne artikel og mine kommentarer til den er min mening og har ikke noget at g\u00f8re med den officielle position fra InterSystems.<\/i><br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Globale \u2014 datalagre i form af k\u00e6deindl\u00e6g. Sparse arrays. Del 3 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/36632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=36632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/36632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/27432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=36632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=36632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=36632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}