{"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\/hr\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","title":{"rendered":"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/ac6eefbfb9d7cc28c3f2ca85c7d1adb2.jpg\" style=\"display:block;margin: 0 auto;\" \/>U prethodnim delovima (<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>) govorili smo o globalima kao o stablima, u ovom delu \u0107emo razmotriti globale kao retke nizove.<\/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\">Retki niz<\/a><\/noindex> je vrsta niza u kojem ve\u0107ina vrednosti ima istu vrednost.<\/p>\n<p>U praksi, \u010desto se susre\u0107u tako ogromni retki nizovi da nema smisla tro\u0161iti memoriju na iste elemente. Stoga ima smisla implementirati retke nizove tako da memorija ne bude tro\u0161ena na \u010duvanje istih vrednosti.<br \/>\nU nekim programskim jezicima retki nizovi su deo jezika, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jsoftware.com\/help\/dictionary\/d211.htm\">na primer u J<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathworks.com\/help\/matlab\/ref\/sparse.html\">MATLAB<\/a><\/noindex>. U drugim programskim jezicima postoje posebne biblioteke koje omogu\u0107avaju njihovu implementaciju. Za C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> i dr. <\/p>\n<p>Globali su dobri kandidati za implementaciju retkih nizova jer:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>\u010cuvaju vrednosti samo odre\u0111enih \u010dvorova i ne \u010duvaju vrednosti neodre\u0111enih;<\/li>\n<li>Interfejs za pristup vrednosti \u010dvora je izuzetno sli\u010dan na\u010dinu kako je u mnogim programskim jezicima implementiran pristup elementima vi\u0161edimenzionalnog niza.\n<pre><code class=\"bash\">Set ^a(1, 2, 3)=5\nWrite ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Global je dovoljno niskonivo struktura za skladi\u0161tenje podataka, stoga ima odli\u010dne karakteristike brzine (od stotina hiljada do desetina miliona transakcija u sekundi, u zavisnosti od hardvera, vidi. <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/257501\/\">1<\/a><\/noindex>)<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p>Budu\u0107i da je global perzistentna struktura, ima smisla praviti retke nizove na njima kada je unapred poznato da \u0107e kapacitet RAM-a biti nedovoljan.<\/p><\/blockquote>\n<p>\nJedna od osobina implementacija retkih nizova je vra\u0107anje nekog podrazumevanog vrednosti, ako se pristupa neodre\u0111enoj \u0107eliji.<\/p>\n<p>To se mo\u017ee implementirati kori\u0161\u0107enjem funkcije <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex> u COS. U ovom primeru razmatramo trodimenzionalni niz.<\/p>\n<pre><code>SET a = $GET(^a(x,y,z), defValue)<\/code><\/pre>\n<p>\nU kojim zadacima su potrebni retki nizovi i kako globali mogu pomo\u0107i?<\/p>\n<h2>Matrica susedstva (povezanosti)<\/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\">Takve matrice<\/a><\/noindex> se koriste za predstavljanje grafova:<\/p>\n<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/a580c451610bcacbef154c161ef63939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO\u010digledno je da \u0161to je graf ve\u0107i, to \u0107e vi\u0161e nula biti u matrici. Na primer, ako uzmemo graf dru\u0161tvene mre\u017ee i predstavimo ga u obliku sli\u010dne matrice, on \u0107e gotovo u potpunosti biti sa\u010dinjen od nula, tj. bi\u0107e re\u0111i niz.<\/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>\nU ovom primeru \u010duvamo u globalu <strong>^m<\/strong> matrica povezanosti, kao i broj bridova za svaki \u010dvor (tko se s kim dru\u017ei i broj prijatelja).<\/p>\n<p>Ako broj elemenata u grafu ne prelazi 29 milijuna (taj se broj uzima kao umno\u017eak 8 * <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache201512\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">maksimalna veli\u010dina niza<\/a><\/noindex>), postoji jo\u0161 ekonomi\u010dniji na\u010din pohrane takvih matrica \u2014 bitni nizovi, jer se u njihovoj implementaciji posebno optimiziraju veliki prazni prostori.<\/p>\n<p>Manipulacije s bitnim nizovima izvode se funkcijom <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\">; postavljanje bita\nSET $BIT(rowID, positionID) = 1\n; dobivanje bita\nWrite $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>Tablica prijelaza kona\u010dnog automata<\/h2>\n<p>\nBudu\u0107i da je graf prijelaza kona\u010dnog automata obi\u010dan graf, tako je i tablica prijelaza kona\u010dnog automata ista ona matrica susjednosti o kojoj je ranije bilo rije\u010di.<\/p>\n<h2>\u0106elijski automati<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/b9fedb51cd1c8fced79ca221a925349c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNajpoznatiji \u0107elijski automat je <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)\">igra '\u017divot'<\/a><\/noindex>, koja zbog svojih pravila (kada \u0107elija ima mnogo susjeda \u2014 umire) predstavlja rijetki niz.<\/p>\n<p>Stephen Wolfram smatra da su \u0107elijski automati <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">nova grana znanosti<\/a><\/noindex>. Godine 2002. objavljuje knjigu od 1280 stranica 'A New Kind of Science', gdje \u0161iroko argumentira da dostignu\u0107a u podru\u010dju \u0107elijskih automata nisu izolirana, ve\u0107 su vrlo stabilna i imaju veliku va\u017enost za sve grane znanosti.<\/p>\n<p>Dokazano je da se svaki algoritam koji se mo\u017ee izvr\u0161iti na ra\u010dunalu mo\u017ee realizirati pomo\u0107u \u0107elijskog automata. \u0106elijski automati se koriste za modeliranje dinami\u010dkih okru\u017eenja i sustava, za rje\u0161avanje algoritamskih zadataka i druge svrhe.<\/p>\n<p>Ako imamo ogroman teren i trebamo zapisati sve me\u0111ustanja \u0107elijskog automata, sasvim je razborito koristiti globalne varijable.<\/p>\n<h2>Kartografija<\/h2>\n<p>\nPrvo \u0161to mi pada na pamet kada se govori o upotrebi rijetkih nizova su kartografski zadaci.<\/p>\n<p>Op\u0107enito, na kartama ima jako puno praznog prostora. Ako bismo kartu predstavljali velikim pikselima, 71% piksel\u00e2 Zemlje bi bilo zauzeto oceanom. Rijetki niz. A ako prikazujemo samo djela ljudskih ruku, tada \u0107e praznog prostora biti vi\u0161e od 95%.<\/p>\n<p>Naravno, nitko ne pohranjuje karte u obliku rasternih nizova, ve\u0107 se koristi vektorsko predstavljanje.<br \/>\nAli \u0161to predstavljaju vektorske karte? To je neka okvir i polilinije i poligoni koji se sastoje od to\u010daka.<br \/>\nZapravo, baza podataka to\u010daka i veza izme\u0111u njih.<\/p>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u0430\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043c\u0438\u0441\u0441\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0439 \u0433\u0430\u043b\u0430\u043a\u0442\u0438\u043a\u0438 \u0442\u0435\u043b\u0435\u0441\u043a\u043e\u043f\u043e\u043c \u0413\u0430\u0439\u044f. \u041e\u0431\u0440\u0430\u0437\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u0448\u0430 \u0433\u0430\u043b\u0430\u043a\u0442\u0438\u043a\u0430, \u043a\u0430\u043a \u0438 \u0432\u0441\u044f \u0432\u0441\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0435\u0441\u0442\u044c \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432: \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0443\u0441\u0442\u043e\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0440\u0435\u0434\u043a\u0438\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u2014 \u0437\u0432\u0451\u0437\u0434\u044b. \u041f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 99,999999&#8230;&#8230;.%. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u0448\u0435\u0439 \u0433\u0430\u043b\u0430\u043a\u0442\u0438\u043a\u0438 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 \u2014 Cach\u00e9.<\/p>\n<p>Ne znam to\u010dnu strukturu global\u00e2 u ovom projektu, mogu pretpostaviti da je to ne\u0161to sli\u010dno:<\/p>\n<pre><code class=\"bash\">Set ^galaxy(b, l, d) = 1; \u041d\u043e\u043c\u0435\u0440 \u0437\u0432\u0435\u0437\u0434\u044b \u043f\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\nSet ^galaxy(b, l, d, &quot;name&quot;) = &quot;Sun&quot;\nSet ^galaxy(b, l, d, &quot;type&quot;) = &quot;normal&quot; ; \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b blackhole, quazar, red_dwarf \u0438 \u0442.\u0434.\nSet ^galaxy(b, l, d, &quot;weight&quot;) = 14E50\nSet ^galaxy(b, l, d, &quot;planetes&quot;) = 7\nSet ^galaxy(b, l, d, &quot;planetes&quot;, 1) = &quot;Mercury&quot;\nSet ^galaxy(b, l, d, &quot;planetes&quot;, 1, weight) = 1E20\n...\n<\/code><\/pre>\n<p>\n<i>Gdje b, l, d \u2014 to su <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wiki2.org\/wiki\/\u0413\u0430\u043b\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f_\u0441\u0438\u0441\u0442\u0435\u043c\u0430_\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\">galakti\u010dke koordinate \u0161irina, du\u017eina<\/a><\/noindex> i udaljenost do Sunca.<\/i><\/p>\n<p>Fleksibilna struktura global\u00e2 omogu\u0107ava pohranu svih potrebnih karakteristika zvijezda i planeta, budu\u0107i da baze na globalima nemaju shemu (scheme-less).<\/p>\n<p>Za pohranu karte na\u0161eg svemira Cach\u00e9 je odabrana ne samo zbog fleksibilnosti, ve\u0107 i zbog sposobnosti vrlo brzo pohranjivati tok podataka, pri \u010demu se istovremeno stvaraju indeksni globali za brzu pretragu.<\/p>\n<p>Vratimo li se zemlji, na globalima su stvoreni kartografski projekti <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> i fork OpenStreetMap \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>Nedavno su na <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">Cach\u00e9 hackathonu<\/a><\/noindex> proveli su se geoprostoreindeksi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial<\/a><\/noindex>. O\u010dekujemo od autora \u010dlanka detalje implementacije.<\/p>\n<h3>Implementacija prostornog indeksa na globalu u OpenStreetMap XAPI<\/h3>\n<p>\nSlike su preuzete iz <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">ove prezentacije<\/a><\/noindex>.<\/p>\n<p>Cijela zemaljska kugla dijeli se na kvadrate, zatim podkvadrate, a podkvadrati na pod-podkvadrate i tako dalje. Uglavnom, dobivamo hijerarhijsku strukturu za pohranu kojoj su stvoreni globali.<\/p>\n<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/239c54c201b8013f1897ecf1ccadcc9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU bilo kojem trenutku mo\u017eemo prakti\u010dki odmah zatra\u017eiti potrebni kvadrat ili ga o\u010distiti, pri \u010demu \u0107e svi podkvadrati tako\u0111er biti vra\u0107eni ili o\u010di\u0161\u0107eni.<\/p>\n<p>Sli\u010dnu shemu na globalima mogu\u0107e je realizirati na nekoliko na\u010dina.<\/p>\n<p>Opcija 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) = idPrveTo\u010dke\nSet ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idDrugeTo\u010dke\n...<\/code><\/pre>\n<p>\nOpcija 2:<\/p>\n<pre><code class=\"bash\">Set ^m('abacdabcdabacdabcda', 1) = idPrveTo\u010dke\nSet ^m('abacdabcdabacdabcda', 2) = idDrugeTo\u010dke\n...<\/code><\/pre>\n<p>\nU oba slu\u010daja nije te\u0161ko zatra\u017eiti to\u010dke unutar kvadrata bilo kojeg nivoa na COS\/M. Bit \u0107e ne\u0161to lak\u0161e o\u010distiti kvadratne dijelove prostora bilo kojeg nivoa u prvom slu\u010daju, no to je rijetko potrebno.<\/p>\n<p>Primjer jednog od kvadrati\u0107a donjeg nivoa:<\/p>\n<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/1fba7eb9253c6af9206cb168c6d43f2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEvo nekoliko globalnih varijabli iz projekta XAPI: prikaz indeksa na globalima:<\/p>\n<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/3a80dd4c3fb23d0f2d3094703966f74b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGlobalna varijabla <strong>^way<\/strong> koristi se za pohranu to\u010daka <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">polilinija<\/a><\/noindex> (puteva, malih rijeka i sl.) i poligona (zatvorene povr\u0161ine: zgrade, \u0161ume itd.).<\/p>\n<h2>Gruba klasifikacija kori\u0161tenja rijetkih nizova na globalima.<\/h2>\n<p><\/p>\n<ol>\n<li>Pohranjujemo koordinate odre\u0111enih objekata i njihova stanja (mapiranje, stani\u010dni automati)<\/li>\n<li>Pohranjujemo rijetke matrice.<\/li>\n<\/ol>\n<p>\nZa slu\u010daj 2) pri zahtjevu za odre\u0111enom koordinatom, gdje elementu nije dodijeljena vrijednost, trebamo dobiti zadanu vrijednost elementa rijetkog niza.<\/p>\n<h2>Bodovi koje dobijamo prilikom pohrane vi\u0161edimenzionalnih matrica u globalima<\/h2>\n<p>\n<b>Brzo brisanje i\/ili uzimanje dijelova prostora, vi\u0161ekratnih po redovima, ravninama, kockama itd.<\/b> Za slu\u010dajeve kada se koriste cijeli brojevi kao indeksi, mo\u017ee biti korisna mogu\u0107nost brzog brisanja i\/ili uzimanja dijelova prostora, vi\u0161ekratnih po redovima, ravninama, kockama itd.<\/p>\n<p>Naredbom <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex> mo\u017eemo ukloniti kao pojedina\u010dni element, tako i redak, pa \u010dak i cijelu ravninu. Zahvaljuju\u0107i svojstvima globalnih varijabli, to se doga\u0111a vrlo brzo \u2014 tisu\u0107ama puta br\u017ee nego element po element.<\/p>\n<p>Na slici je prikazana trodimenzionalna matrica u globalnoj varijabli <strong>^a<\/strong> i razli\u010diti tipovi brisanja.<\/p>\n<p><img decoding=\"async\" alt=\"Globale - ma\u010devi-blagodati za pohranu podataka. Raspodijeljeni nizovi. Dio 3\" src=\"\/wp-content\/uploads\/2019\/07\/cc85ee59d42595df0d72480d3e533a12.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZa uzimanje dijelova prostora prema poznatim indeksima mo\u017ee se koristiti komanda <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>Uzimanje stupca matrice u varijablu Column:<\/p>\n<pre><code class=\"bash\">; Definirajmo trodimenzionalni rijetki niz 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; Ispi\u0161imo varijablu Column\nZwrite Column\n<\/code><\/pre>\n<p>\nIzvje\u0161taj:<\/p>\n<pre><code class=\"bash\">Column(0)=1\nColumn(2)=1\n<\/code><\/pre>\n<p>\n\u0160to je zanimljivo, u varijabli Column tako\u0111er imamo rijetki niz, na koji se treba obratiti tako\u0111er kroz <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex>, jer se u njemu ne pohranjuju zadane vrijednosti.<\/p>\n<p>Uzimanje dijelova prostora tako\u0111er se mo\u017ee raditi kroz malu aplikaciju kori\u0161tenjem funkcije <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>. Ovo je posebno zgodno u prostorima \u010diji su indeksi nekvantizirani (karta).<\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>\nSada\u0161nje vrijeme postavlja nove ambiciozne zadatke. Grafovi mogu imati milijarde \u010dvorova, karte milijarde to\u010daka, a netko \u010dak mo\u017ee po\u017eeljeti pokrenuti vlastiti svemir na stani\u010dnim automatima (<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>Kada volumen podataka rijetkih nizova vi\u0161e ne mo\u017ee stati u radnu memoriju, a potrebno je raditi s njima, valja razmotriti mogu\u0107nost implementacije sli\u010dnih projekata na globalima i COS.<\/p>\n<p>Hvala na pa\u017enji! O\u010dekujemo va\u0161a pitanja i sugestije u komentarima.<\/p>\n<p><b>Odricanje<\/b>: <i>Ovaj \u010dlanak i moji komentari su moje mi\u0161ljenje i nemaju veze s slu\u017ebenim stavom korporacije InterSystems.<\/i><br \/>\n<br \/>Izvor: <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.4 - 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\/hr\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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 \u010darobne ma\u010deve za pohranu podataka. Rijetki nizovi. Dio 3 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/36632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=36632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/36632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/27432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=36632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=36632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=36632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}