{"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\/ro\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","title":{"rendered":"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/ac6eefbfb9d7cc28c3f2ca85c7d1adb2.jpg\" style=\"display:block;margin: 0 auto;\" \/>\u00cen p\u0103r\u021bile anterioare (<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>) am discutat despre globale ca fiind arbori, iar \u00een aceasta vom analiza globale ca m\u0103suri sparse.<\/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\">M\u0103sur\u0103 rar\u0103<\/a><\/noindex> \u2014 este un tip de mas\u0103 \u00een care majoritatea valorilor iau aceea\u0219i valoare.<\/p>\n<p>\u00cen practic\u0103, \u00eent\u00e2lnim adesea m\u0103suri sparse at\u00e2t de mari \u00eenc\u00e2t nu are sens s\u0103 ocup\u0103m memoria cu acelea\u0219i elemente. De aceea, este logic s\u0103 implement\u0103m m\u0103surile sparse astfel \u00eenc\u00e2t memoria s\u0103 nu fie consumat\u0103 pentru stocarea valorilor identice.<br \/>\n\u00cen unele limbaje de programare, m\u0103surile sparse sunt incluse direct \u00een limbaj, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jsoftware.com\/help\/dictionary\/d211.htm\">de exemplu \u00een J<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathworks.com\/help\/matlab\/ref\/sparse.html\">MATLAB<\/a><\/noindex>. \u00cen alte limbaje de programare, exist\u0103 biblioteci speciale care faciliteaz\u0103 implementarea lor. Pentru C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> \u0219i altele. <\/p>\n<p>Globale \u2014 candida\u021bi buni pentru implementarea m\u0103surilor sparse, deoarece:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>Stocheaz\u0103 valorile doar pentru nodurile specifice \u0219i nu stocheaz\u0103 valorile nedefinite;<\/li>\n<li>Interfa\u021ba de acces la valoarea unui nod este extrem de similar\u0103 cu modul \u00een care, \u00een multe limbaje de programare, se implementeaz\u0103 accesul la un element dintr-o mas\u0103 multidimensional\u0103.\n<pre><code class=\"bash\">Set ^a(1, 2, 3)=5\nScrie ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Globalul este o structur\u0103 destul de de baz\u0103 pentru stocarea datelor, av\u00e2nd astfel caracteristici de vitez\u0103 remarcabile (de la sute de mii p\u00e2n\u0103 la zeci de milioane de tranzac\u021bii pe secund\u0103, \u00een func\u021bie de hardware, vezi. <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/257501\/\">1<\/a><\/noindex>)<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p>Deoarece globalul este o structur\u0103 persistent\u0103, are sens s\u0103 realiz\u0103m m\u0103suri sparse pe acestea atunci c\u00e2nd \u0219tim din timp c\u0103 volumul de memorie RAM va fi insuficient.<\/p><\/blockquote>\n<p>\nUna dintre propriet\u0103\u021bile implement\u0103rilor m\u0103surilor sparse este returnarea unei valori implicite, dac\u0103 se face referire la o celul\u0103 nedefinit\u0103.<\/p>\n<p>Acest lucru poate fi realizat folosind func\u021bia <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex> \u00een COS. \u00cen acest exemplu este prezentat\u0103 o mas\u0103 tridimensional\u0103.<\/p>\n<pre><code>SET a = $GET(^a(x,y,z), defValue)<\/code><\/pre>\n<p>\n\u00cen ce tipuri de sarcini sunt necesare m\u0103surile sparse \u0219i cum pot ajuta globale?<\/p>\n<h2>Matricea de adiacen\u021b\u0103 (conexitate)<\/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\">Astfel de matrice<\/a><\/noindex> sunt utilizate pentru reprezentarea graficelor:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/a580c451610bcacbef154c161ef63939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste evident c\u0103 cu c\u00e2t graficul este mai mare, cu at\u00e2t mai multe zerouri vor ap\u0103rea \u00een matrice. Dac\u0103, de exemplu, lu\u0103m un grafic al unei re\u021bele sociale \u0219i \u00eel reprezent\u0103m sub form\u0103 de matrice similar\u0103, acesta va fi aproape complet format din zerouri, adic\u0103 va fi o m\u0103sur\u0103 rar\u0103.<\/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>\n\u00cen acest exemplu, salv\u0103m \u00een global\u0103 <strong>^m<\/strong> matricea de conectivitate, precum \u0219i num\u0103rul de leg\u0103turi pentru fiecare nod (cine este prieten cu cine \u0219i num\u0103rul de prieteni).<\/p>\n<p>Dac\u0103 num\u0103rul de elemente din graf nu dep\u0103\u0219e\u0219te 29 de milioane (acest num\u0103r este ob\u021binut prin \u00eenmul\u021bire 8 * <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache201512\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">dimensiunea maxim\u0103 a sirului<\/a><\/noindex>), atunci exist\u0103 o metod\u0103 \u0219i mai economic\u0103 de stocare a acestor matrice \u2014 \u0219iruri de bi\u021bi, deoarece implementarea lor optimizeaz\u0103 \u00een mod special golurile mari.<\/p>\n<p>Manipul\u0103rile cu \u0219irurile de bi\u021bi se realizeaz\u0103 prin func\u021bia <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\">; setarea bitului\nSET $BIT(rowID, positionID) = 1\n; ob\u021binerea bitului\nWrite $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>Tabelul de tranzi\u021bii al automatelor finite<\/h2>\n<p>\nDeoarece graficul de tranzi\u021bii al automatului finit este un grafic obi\u0219nuit, \u0219i tabelul de tranzi\u021bii al automatului finit este aceea\u0219i matrice de adiacen\u021b\u0103 despre care s-a vorbit mai sus.<\/p>\n<h2>Automatele celulare<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/b9fedb51cd1c8fced79ca221a925349c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCel mai cunoscut automat celular este <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)\">jocul \u201eVia\u021b\u0103\u201d<\/a><\/noindex>, care, din cauza regulilor sale (c\u00e2nd o celul\u0103 are mul\u021bi vecini \u2014 moare) reprezint\u0103 un vector rar.<\/p>\n<p>Stephen Wolfram consider\u0103 c\u0103 automatele celulare sunt <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">o nou\u0103 ramur\u0103 a \u0219tiin\u021bei.<\/a><\/noindex>\u00cen 2002, a publicat o carte de 1280 de pagini intitulat\u0103 \u201eA New Kind of Science\u201d, \u00een care argumenteaz\u0103 pe larg c\u0103 realiz\u0103rile \u00een domeniul automatelor celulare nu sunt izolate, ci foarte robuste \u0219i au o mare importan\u021b\u0103 pentru toate domeniile \u0219tiin\u021bei.<\/p>\n<p>S-a demonstrat c\u0103 orice algoritm realizabil pe un computer poate fi implementat prin intermediul unui automat celular. Automatele celulare sunt utilizate pentru modelarea mediilor \u0219i sistemelor dinamice, pentru solu\u021bionarea problemelor algoritmice \u0219i pentru alte scopuri.<\/p>\n<p>Dac\u0103 avem un c\u00e2mp imens \u0219i trebuie s\u0103 \u00eenregistr\u0103m toate st\u0103rile intermediare ale automatului celular, atunci este complet rezonabil s\u0103 folosim globale.<\/p>\n<h2>Cartografie<\/h2>\n<p>\nPrimul lucru care \u00eemi vine \u00een minte c\u00e2nd se vorbe\u0219te despre utilizarea vectorilor rari este sarcinile cartografice.<\/p>\n<p>\u00cen general, pe h\u0103r\u021bi exist\u0103 foarte mult spa\u021biu gol. Dac\u0103 harta este reprezentat\u0103 prin pixeli mari, atunci 71% din pixeli pe P\u0103m\u00e2nt vor fi ocupa\u021bi de ocean. Vector rar. Iar dac\u0103 ar fi reprezentate doar crea\u021biile omului, atunci spa\u021biul gol ar dep\u0103\u0219i 95%.<\/p>\n<p>Desigur, nimeni nu stocheaz\u0103 h\u0103r\u021bile sub form\u0103 de matrice raster, se folose\u0219te reprezentarea vectorial\u0103.<br \/>\nDar ce sunt h\u0103r\u021bile vectoriale? Ele reprezint\u0103 un cadru format din puncte, polilinii \u0219i poligoane.<br \/>\nPractic, este o baz\u0103 de date a punctelor \u0219i a leg\u0103turilor dintre ele.<\/p>\n<p>Una dintre cele mai ambi\u021bioase sarcini de cartografiere este misiunea de mapare a galaxiei noastre cu telescopul Gaia. Figurativ vorbind, galaxia noastr\u0103, la fel ca \u00eentreaga univers, este un vast aranjament rar: spa\u021bii enorme de vid, \u00een care exist\u0103 puncte mici rare \u2014 stele. Spa\u021biul gol reprezint\u0103 99,999999&#8230;&#8230;.%. Pentru stocarea h\u0103r\u021bii galaxiei noastre a fost aleas\u0103 o baz\u0103 de date global\u0103 \u2014 Cach\u00e9.<\/p>\n<p>Nu \u0219tiu structura exact\u0103 a globalelor \u00een acest proiect, pot presupune c\u0103 este ceva similar cu:<\/p>\n<pre><code class=\"bash\">Set ^galaxy(b, l, d) = 1; Num\u0103rul stelei conform catalogului, dac\u0103 exist\u0103\nSet ^galaxy(b, l, d, \"name\") = \"Soare\"\nSet ^galaxy(b, l, d, \"type\") = \"normal\"; op\u021biuni: blackhole, quazar, red_dwarf etc.\nSet ^galaxy(b, l, d, \"weight\") = 14E50\nSet ^galaxy(b, l, d, \"planetes\") = 7\nSet ^galaxy(b, l, d, \"planetes\", 1) = \"Mercur\"\nSet ^galaxy(b, l, d, \"planetes\", 1, weight) = 1E20\n...\n<\/code><\/pre>\n<p>\n<i>Unde b, l, d \u2014 sunt <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wiki2.org\/wiki\/Sistemul_de_coordonate_galactice\">coordonatele galactice latitudine, longitudine<\/a><\/noindex> \u0219i distan\u021ba p\u00e2n\u0103 la Soare.<\/i><\/p>\n<p>Structura flexibil\u0103 a globalelor permite stocarea oric\u0103ror caracteristici necesare ale stelelor \u0219i planetelor, deoarece bazele pe globale sunt f\u0103r\u0103 schem\u0103 (scheme-less).<\/p>\n<p>Pentru stocarea h\u0103r\u021bii universului nostru, Cach\u00e9 a fost aleas\u0103 nu doar pentru flexibilitate, ci \u0219i pentru capacitatea sa de a salva foarte rapid fluxurile de date, cre\u00e2nd \u00een acela\u0219i timp globale indexate pentru c\u0103ut\u0103ri rapide.<\/p>\n<p>Dac\u0103 ne \u00eentoarcem la P\u0103m\u00e2nt, au fost create proiecte cartografice pe globale <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> \u0219i fork-ul OpenStreetMap \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>Recent, la <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">hackathonul Cach\u00e9<\/a><\/noindex> au fost implementate indicii geospa\u021biali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial<\/a><\/noindex>. A\u0219tept\u0103m de la autorii articolului detalii despre implementare.<\/p>\n<h3>Implementarea indicilor spa\u021biali pe globale \u00een OpenStreetMap XAPI<\/h3>\n<p>\nImaginile sunt preluate din <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">aceast\u0103 prezentare<\/a><\/noindex>.<\/p>\n<p>\u00centreaga glob\u0103 terestr\u0103 este \u00eemp\u0103r\u021bit\u0103 \u00een p\u0103trate, apoi \u00een subp\u0103trate \u0219i subp\u0103tratele \u00een sub-subp\u0103trate \u0219i a\u0219a mai departe. \u00cen general, ob\u021binem o structur\u0103 ierarhic\u0103 pentru stocarea c\u0103rora au fost create globale.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/239c54c201b8013f1897ecf1ccadcc9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen orice moment, putem solicita practic instantaneu p\u0103tratul necesar sau s\u0103-l elimin\u0103m, iar toate subp\u0103tratele vor fi de asemenea returnate sau \u0219terse.<\/p>\n<p>O schem\u0103 similar\u0103 pe globale poate fi realizat\u0103 \u00een mai multe moduri.<\/p>\n<p>Variant\u0103 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) = idPrimaPunctului\nSet ^m(a, b, a, c, d, a, b, c, d, a, b, a, c, d, a, b, c, d, a, 2) = idA douaPunctului\n...<\/code><\/pre>\n<p>\nVariant\u0103 2:<\/p>\n<pre><code class=\"bash\">Set ^m('abacdabcdabacdabcda', 1) = idPrimaPunctului\nSet ^m('abacdabcdabacdabcda', 2) = idA douaPunctului\n...<\/code><\/pre>\n<p>\n\u00cen ambele cazuri, este simplu s\u0103 cerem punctele aflate \u00een cadrul oric\u0103rui nivel pe COS\/M. Va fi ceva mai u\u0219or s\u0103 cur\u0103\u021b\u0103m buc\u0103\u021bile p\u0103trate de spa\u021biu de orice nivel \u00een prima variant\u0103, dar rareori este necesar.<\/p>\n<p>Un exemplu al uneia dintre p\u0103tr\u0103\u021bile de nivel inferior:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/1fba7eb9253c6af9206cb168c6d43f2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIat\u0103 c\u00e2teva globale din proiectul XAPI: reprezentarea indexului pe globale:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/3a80dd4c3fb23d0f2d3094703966f74b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGlobal <strong>^way<\/strong> este folosit pentru stocarea punctelor <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">polilinie<\/a><\/noindex> (drumuri, r\u00e2uri mici etc.) \u0219i poligoane (zone \u00eenchise: cl\u0103diri, p\u0103duri etc.).<\/p>\n<h2>O clasificare general\u0103 a utiliz\u0103rii matricilor sparse pe globale.<\/h2>\n<p><\/p>\n<ol>\n<li>Stoc\u0103m coordonatele anumitor obiecte \u0219i st\u0103rile acestora (cartografiere, automate celulare)<\/li>\n<li>Stoc\u0103m matrice sparse.<\/li>\n<\/ol>\n<p>\nPentru cazul 2) la interogarea unei coordonate specifice, unde elementul nu are o valoare atribuit\u0103, trebuie s\u0103 ob\u021binem valoarea implicit\u0103 a elementului din matricea rar\u0103.<\/p>\n<h2>Beneficiile pe care le ob\u021binem prin stocarea matricilor multidimensionale pe globale<\/h2>\n<p>\n<b>\u0218tergere rapid\u0103 \u0219i\/sau extragerea buc\u0103\u021bilor de spa\u021biu, care sunt multiplu de linii, plane, cuburi etc.<\/b> \u00cen cazurile \u00een care sunt folosite indec\u0219i \u00eentregi, poate fi util\u0103 posibilitatea de a \u0219terge rapid \u0219i\/sau de a extrage buc\u0103\u021bi de spa\u021biu, care sunt multiplu de linii, plane, cuburi etc.<\/p>\n<p>Comanda <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex> putem \u0219terge at\u00e2t un element individual, c\u00e2t \u0219i o linie, \u0219i chiar un \u00eentreg plan. Datorit\u0103 propriet\u0103\u021bilor globelor, acest lucru se \u00eent\u00e2mpl\u0103 foarte repede \u2014 de mii de ori mai repede dec\u00e2t \u0219tergerea pe elemente.<\/p>\n<p>\u00cen imagine este prezentat\u0103 o matrice tridimensional\u0103 \u00een global <strong>^a<\/strong> \u0219i diferite tipuri de \u0219tergeri.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 s\u0103bii de tip clepsidr\u0103 pentru stocarea datelor. M\u0103suri sparse. Partea 3\" src=\"\/wp-content\/uploads\/2019\/07\/cc85ee59d42595df0d72480d3e533a12.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru extragerea buc\u0103\u021bilor de spa\u021biu dup\u0103 indec\u0219i cunoscu\u021bi, putem folosi comanda <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>Extragerea unei coloane a matricei \u00eentr-o variabil\u0103 Column:<\/p>\n<pre><code class=\"bash\">; S\u0103 definim o matrice rar\u0103 tridimensional\u0103 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; S\u0103 afi\u0219\u0103m variabila Column\nZwrite Column\n<\/code><\/pre>\n<p>\nConcluzie:<\/p>\n<pre><code class=\"bash\">Column(0)=1\nColumn(2)=1\n<\/code><\/pre>\n<p>\nCe este interesant este c\u0103 \u00een variabila Column am ob\u021binut de asemenea o matrice rar\u0103, la care trebuie s\u0103 ne referim \u0219i prin <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex>, deoarece valorile implicite nu sunt stocate \u00een ea.<\/p>\n<p>Extragerea buc\u0103\u021bilor de spa\u021biu poate fi realizat\u0103 \u0219i printr-un mic program folosind func\u021bia <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>. Aceasta este \u00een special convenabil\u0103 \u00een spa\u021biile ale c\u0103ror indec\u0219i nu sunt cuantiza\u021bi (cartografie).<\/p>\n<h2>Concluzie<\/h2>\n<p>\nTimpurile actuale impun noi sarcini ambi\u021bioase. Grafurile pot consta din miliarde de v\u00e2rfuri, h\u0103r\u021bile din miliarde de puncte, iar cineva poate chiar dori s\u0103-\u0219i lanseze propria univers pe automate celulare (<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>C\u00e2nd volumul de date al array-urilor sparse nu mai poate fi stocat \u00een memoria opera\u021bional\u0103 \u0219i trebuie s\u0103 lucr\u0103m cu ele, ar trebui s\u0103 consider\u0103m posibilitatea implement\u0103rii unor astfel de proiecte pe globale \u0219i COS.<\/p>\n<p>V\u0103 mul\u021bumim pentru aten\u021bie! A\u0219tept\u0103m \u00eentreb\u0103rile \u0219i sugestiile dumneavoastr\u0103 \u00een comentarii.<\/p>\n<p><b>Declinarea<\/b>: <i>Aceast\u0103 articol\u0103 \u0219i comentariile mele la aceasta reprezint\u0103 opinia mea \u0219i nu au leg\u0103tur\u0103 cu pozi\u021bia oficial\u0103 a corpora\u021biei InterSystems.<\/i><br \/>\n<br \/>Sursa: <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.2.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\/ro\/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.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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 s\u0103bii-sfoi pentru stocarea datelor. Array-uri sparse. Partea 3 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/36632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}