{"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\/de\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","title":{"rendered":"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/ac6eefbfb9d7cc28c3f2ca85c7d1adb2.jpg\" style=\"display:block;margin: 0 auto;\" \/>In den vorherigen Teilen (<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>) haben wir \u00fcber globale Variablen als B\u00e4ume gesprochen, in diesem Teil betrachten wir globale Variablen als sp\u00e4rliche 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\">Sp\u00e4rliches Array<\/a><\/noindex> ist eine Art von Array, bei dem die meisten Werte denselben Wert annehmen.<\/p>\n<p>In der Praxis treffen wir oft auf so massive sp\u00e4rliche Arrays, dass es keinen Sinn macht, den Speicher mit identischen Elementen zu belegen. Daher ist es sinnvoll, sp\u00e4rliche Arrays so zu implementieren, dass kein Speicher f\u00fcr die Speicherung identischer Werte verschwendet wird.<br \/>\nIn einigen Programmiersprachen sind sp\u00e4rliche Arrays Teil der Sprache, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.jsoftware.com\/help\/dictionary\/d211.htm\">wie zum Beispiel in J<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.mathworks.com\/help\/matlab\/ref\/sparse.html\">MATLAB<\/a><\/noindex>. In anderen Programmiersprachen gibt es spezielle Bibliotheken, die es erm\u00f6glichen, sie zu implementieren. F\u00fcr C++ \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/eigen.tuxfamily.org\/dox-devel\/GettingStarted.html\">Eigen<\/a><\/noindex> usw. <\/p>\n<p>Globale Variablen sind gute Kandidaten f\u00fcr die Implementierung sp\u00e4rlicher Arrays, weil:<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<ol>\n<li>Sie speichern Werte nur f\u00fcr bestimmte Knoten und speichern keine Werte f\u00fcr undefinierte;<\/li>\n<li>Die Schnittstelle zum Zugriff auf den Wert eines Knotens \u00e4hnelt stark der Art und Weise, wie in vielen Programmiersprachen der Zugriff auf ein Element eines mehrdimensionalen Arrays implementiert ist.\n<pre><code class=\"bash\">Setze ^a(1, 2, 3)=5\nSchreibe ^a(1, 2, 3)<\/code><\/pre>\n<p>\n<\/li>\n<li>Global ist eine ausreichend low-level Struktur zur Speicherung von Daten, daher hat sie bemerkenswerte Geschwindigkeitsmerkmale (von Hunderttausenden bis zu Millionen von Transaktionen pro Sekunde, abh\u00e4ngig von der Hardware, siehe. <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 eine globale Variable eine persistente Struktur ist, ist es sinnvoll, sp\u00e4rliche Arrays auf ihnen zu machen, wenn im Voraus bekannt ist, dass der Speicher nicht ausreichen wird.<\/p><\/blockquote>\n<p>\nEine der Eigenschaften der Implementierungen sp\u00e4rlicher Arrays ist die R\u00fcckgabe eines bestimmten Standardwertes, wenn auf eine undefinierte Zelle zugegriffen wird.<\/p>\n<p>Dies kann durch die Verwendung der Funktion <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex> in COS realisiert werden. In diesem Beispiel wird ein dreidimensionales Array betrachtet.<\/p>\n<pre><code>SET a = $GET(^a(x,y,z), defValue)<\/code><\/pre>\n<p>\nIn welchen Aufgaben sind sp\u00e4rliche Arrays erforderlich und wie k\u00f6nnen globale Variablen helfen?<\/p>\n<h2>Nachbarschaftsmatrix (Konnektivit\u00e4t)<\/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\">Solche Matrizen<\/a><\/noindex> werden verwendet, um Graphen darzustellen:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/a580c451610bcacbef154c161ef63939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOffensichtlich gilt, je gr\u00f6\u00dfer der Graph, desto mehr Nullen werden in der Matrix vorhanden sein. Wenn man zum Beispiel ein Netzwerk-Graf und ihn in einer solchen Matrix darstellt, wird er fast ausschlie\u00dflich aus Nullen bestehen, d.h. er ist ein sp\u00e4rliches Array.<\/p>\n<pre><code class=\"bash\">Setze ^m(id1, id2) = 1 \nSetze ^m(id1, id3) = 1 \nSetze ^m(id1, id4) = 1 \nSetze ^m(id1) = 3 \nSetze ^m(id2, id4) = 1 \nSetze ^m(id2, id5) = 1 \nSetze ^m(id2) = 2\n....\n<\/code><\/pre>\n<p>\nIn diesem Beispiel speichern wir im Globalen <strong>^m<\/strong> die Verbindungs Matrix sowie die Anzahl der Kanten f\u00fcr jeden Knoten (wer mit wem befreundet ist und wie viele Freunde er hat).<\/p>\n<p>Falls jedoch die Anzahl der Elemente im Graphen 29 Millionen nicht \u00fcberschreitet (diese Zahl ergibt sich als Produkt von 8 * <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache201512\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">maximale Zeilenl\u00e4nge<\/a><\/noindex>), gibt es eine noch wirtschaftlichere Methode zur Speicherung solcher Matrizen \u2014 Bit-Strings, da bei ihrer Implementierung gro\u00dfe L\u00fccken speziell optimiert werden.<\/p>\n<p>Manipulationen mit Bit-Strings erfolgen durch die Funktion <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\">; Bit setzen\nSET $BIT(rowID, positionID) = 1\n; Bit abrufen\nWrite $BIT(rowID, positionID)\n<\/code><\/pre>\n<p><\/p>\n<h2>\u00dcbergangstabelle des endlichen Automaten<\/h2>\n<p>\nDa der \u00dcbergangsgraph des endlichen Automaten ein gew\u00f6hnlicher Graph ist, ist die \u00dcbergangstabelle des endlichen Automaten dieselbe Adjazenzmatrix, die oben erw\u00e4hnt wurde.<\/p>\n<h2>Zellul\u00e4re Automaten<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/b9fedb51cd1c8fced79ca221a925349c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer bekannteste zellul\u00e4re Automat ist <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)\">das Spiel 'Life'<\/a><\/noindex>, das aufgrund seiner Regeln (wenn eine Zelle viele Nachbarn hat, stirbt sie) ein sp\u00e4rliches Array darstellt.<\/p>\n<p>Stephen Wolfram ist der Ansicht, dass zellul\u00e4re Automaten eine <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/A_New_Kind_of_Science\">neue Wissenschaftsdisziplin<\/a><\/noindex>sind. Im Jahr 2002 ver\u00f6ffentlicht er das 1280-seitige Buch 'A New Kind of Science', in dem er ausf\u00fchrlich argumentiert, dass Errungenschaften im Bereich der zellul\u00e4ren Automaten nicht isoliert sind, sondern sehr stabil und von gro\u00dfer Bedeutung f\u00fcr alle wissenschaftlichen Bereiche.<\/p>\n<p>Es wurde bewiesen, dass jeder auf einem Computer ausf\u00fchrbare Algorithmus durch einen zellul\u00e4ren Automaten realisiert werden kann. Zellul\u00e4re Automaten werden zur Modellierung dynamischer Umgebungen und Systeme, zur L\u00f6sung algorithmischer Probleme und f\u00fcr andere Zwecke eingesetzt.<\/p>\n<p>Wenn wir ein riesiges Feld haben und alle Zwischenzust\u00e4nde des zellul\u00e4ren Automaten aufzeichnen m\u00fcssen, ist es durchaus sinnvoll, Globals zu verwenden.<\/p>\n<h2>Kartographie<\/h2>\n<p>\nDas erste, was mir in den Sinn kommt, wenn es um die Verwendung sp\u00e4rlicher Arrays geht, sind kartografische Aufgaben.<\/p>\n<p>In der Regel gibt es auf Karten sehr viel leeren Raum. Wenn man eine Karte als gro\u00dfe Pixel darstellt, werden 71 % der Pixel der Erde vom Ozean bedeckt. Daher ein sp\u00e4rliches Array. Wenn man nur die menschlichen Eingriffe darstellt, liegt der Anteil des leeren Raums sogar bei \u00fcber 95 %.<\/p>\n<p>Nat\u00fcrlich speichert niemand Karten in Form von Rasterarrays; es wird eine VektDarstellung verwendet.<br \/>\nAber was sind Vektorkarten? Es handelt sich um einen Rahmen, der aus Punkten, Polylinien und Polygonen besteht.<br \/>\nTats\u00e4chlich eine Datenbank von Punkten und den Beziehungen zwischen ihnen.<\/p>\n<p>Eine der ehrgeizigsten Aufgaben der Kartierung ist die Mission zur Kartierung unserer Galaxie mit dem Gaia-Teleskop. Bildlich gesprochen ist unsere Galaxie, ebenso wie das gesamte Universum, ein durchgehendes, d\u00fcnn besiedeltes Gef\u00fcge: riesige R\u00e4ume der Leere, in denen sich selten kleine Punkte \u2014 Sterne \u2014 befinden. Leere macht 99,999999\u2026%. F\u00fcr die Speicherung der Karte unserer Galaxie wurde eine Datenbank auf Globalen gew\u00e4hlt \u2014 Cach\u00e9.<\/p>\n<p>Ich kenne die genaue Struktur der Globals in diesem Projekt nicht, kann mir aber vorstellen, dass sie \u00e4hnlich ist wie:<\/p>\n<pre><code class=\"bash\">Set ^galaxy(b, l, d) = 1; Die Sternnummer im Katalog, falls vorhanden\nSet ^galaxy(b, l, d, \"name\") = \"Sonne\"\nSet ^galaxy(b, l, d, \"type\") = \"normal\"; Optionen sind blackhole, quasar, red_dwarf usw.\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>Wo b, l, d \u2013 das sind <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wiki2.org\/wiki\/Galaktisches_Koordinatensystem\">galaktische Koordinaten Breite, L\u00e4nge<\/a><\/noindex> und Entfernung zur Sonne.<\/i><\/p>\n<p>Die flexible Struktur der Globals erm\u00f6glicht es, alle erforderlichen Eigenschaften von Sternen und Planeten zu speichern, da die Datenbanken auf Globals schemalos sind.<\/p>\n<p>F\u00fcr die Speicherung der Karte unseres Universums wurde Cach\u00e9 nicht nur wegen der Flexibilit\u00e4t gew\u00e4hlt, sondern auch wegen der F\u00e4higkeit, Datenstr\u00f6me sehr schnell zu speichern und dabei gleichzeitig Index-Globals f\u00fcr eine schnelle Suche zu erstellen.<\/p>\n<p>Wenn wir zur Erde zur\u00fcckkehren, wurden auf Globals Kartierungsprojekte erstellt <noindex><a rel=\"nofollow\" href=\"http:\/\/wiki.openstreetmap.org\/wiki\/Xapi\">OpenStreetMap XAPI<\/a><\/noindex> und ein Fork von OpenStreetMap \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.fosm.org\/\">FOSM<\/a><\/noindex>.<\/p>\n<p>Vor kurzem wurden auf einem <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/267459\/\">Cach\u00e9-Hackathon<\/a><\/noindex> geowissenschaftliche Indizes umgesetzt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-ru\/spatialindex\">Geospatial<\/a><\/noindex>. Wir erwarten vom Autor des Artikels Details zur Umsetzung.<\/p>\n<h3>Implementierung r\u00e4umlicher Indizes auf Globals in OpenStreetMap XAPI<\/h3>\n<p>\nBilder stammen von <noindex><a rel=\"nofollow\" href=\"http:\/\/www.slideshare.net\/george.james\/fosdem-2010-gtm-and-openstreetmap\">dieser Pr\u00e4sentation<\/a><\/noindex>.<\/p>\n<p>Der gesamte Erdball wird in Quadrate unterteilt, dann in Unterquadrate, und die Unterquadrate in Unterunterquadrate und so weiter. Insgesamt erhalten wir eine hierarchische Struktur, f\u00fcr die Globals geschaffen wurden.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/239c54c201b8013f1897ecf1ccadcc9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJederzeit k\u00f6nnen wir fast sofort das ben\u00f6tigte Quadrat anfordern oder es l\u00f6schen, wobei alle Unterquadrate ebenfalls zur\u00fcckgegeben oder gel\u00f6scht werden.<\/p>\n<p>Ein \u00e4hnliches Schema auf Globals kann auf verschiedene Arten implementiert werden.<\/p>\n<p>Option 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) = idDerErstenPunkt\nSet ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idDerZweitenPunkt\n...<\/code><\/pre>\n<p>\nOption 2:<\/p>\n<pre><code class=\"bash\">Set ^m('abacdabcdabacdabcda', 1) = idErsterPunkt\nSet ^m('abacdabcdabacdabcda', 2) = idZweiterPunkt\n...<\/code><\/pre>\n<p>\nIn beiden F\u00e4llen ist es einfach, in COS\/M Punkte zu fordern, die sich in einem Quadrat beliebiger Stufen befinden. Es wird etwas einfacher sein, quadratische St\u00fccke des Raums beliebiger Stufen im ersten Fall zu reinigen, aber das ist selten n\u00f6tig.<\/p>\n<p>Ein Beispiel f\u00fcr eines der unteren Quadrat:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/1fba7eb9253c6af9206cb168c6d43f2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier sind einige Globals aus dem XAPI-Projekt: die Darstellung des Index in den Globals:<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/3a80dd4c3fb23d0f2d3094703966f74b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGlobal <strong>^way<\/strong> wird zur Speicherung von Punkten <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Polygonal_chain\">Polylinien<\/a><\/noindex> (Stra\u00dfen, kleine Fl\u00fcsse usw.) und Polygonen (geschlossene Bereiche: Geb\u00e4ude, W\u00e4lder usw.).<\/p>\n<h2>Rauhe Klassifizierung der Nutzung sporadischer Arrays in Globals.<\/h2>\n<p><\/p>\n<ol>\n<li>Wir speichern die Koordinaten bestimmter Objekte und deren Zust\u00e4nde (Kartierung, Zellular-Automaten)<\/li>\n<li>Wir speichern sp\u00e4rliche Matrizen.<\/li>\n<\/ol>\n<p>\nF\u00fcr den Fall 2) bei der Anfrage einer bestimmten Koordinate, wo dem Element kein Wert zugewiesen wurde, m\u00fcssen wir den Wert des Elements des sp\u00e4rlichen Arrays standardm\u00e4\u00dfig erhalten.<\/p>\n<h2>Die Vorteile, die wir erhalten, wenn wir mehrdimensionale Matrizen in den Globals speichern<\/h2>\n<p>\n<b>Schnelles L\u00f6schen und\/oder Abrufen von Raumst\u00fccken, die Vielfache von Zeilen, Ebenen, W\u00fcrfeln usw. sind.<\/b> F\u00fcr F\u00e4lle, in denen ganzzahlige Indizes verwendet werden, kann die M\u00f6glichkeit des schnellen L\u00f6schens und\/oder Abrufens von Raumst\u00fccken, die Vielfache von Zeilen, Ebenen, W\u00fcrfeln usw. sind, n\u00fctzlich sein.<\/p>\n<p>Befehl <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex> k\u00f6nnen wir sowohl ein einzelnes Element als auch eine Zeile und sogar eine ganze Ebene l\u00f6schen. Aufgrund der Eigenschaften von Globals geschieht dies sehr schnell \u2013 Tausende Male schneller als das elementweise L\u00f6schen.<\/p>\n<p>Das Bild zeigt ein dreidimensionales Array im Global <strong>^a<\/strong> und verschiedene Arten des L\u00f6schens.<\/p>\n<p><img decoding=\"async\" alt=\"Globale \u2014 Schwertk\u00e4mpfer zur Datenspeicherung. Sparse Arrays. Teil 3\" src=\"\/wp-content\/uploads\/2019\/07\/cc85ee59d42595df0d72480d3e533a12.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUm Raumst\u00fccke anhand bekannter Indizes abzufragen, kann der Befehl <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>Verwendung finden. Abruf einer Spalte der Matrix in die Variable Column:<\/p>\n<pre><code class=\"bash\">; Lasst uns ein dreidimensionales sp\u00e4rliches Array 3x3x3 festlegen\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; Geben wir die Variable Column aus\nZwrite Column\n<\/code><\/pre>\n<p>\nAusgabe:<\/p>\n<pre><code class=\"bash\">Column(0)=1\nColumn(2)=1\n<\/code><\/pre>\n<p>\nInteressanterweise haben wir in der Variable Column auch ein sp\u00e4rliches Array erhalten, auf das ebenfalls \u00fcber <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fget\">$GET<\/a><\/noindex>, zugegriffen werden muss, da die Standardwerte darin nicht gespeichert sind.<\/p>\n<p>Das Abrufen von Raumst\u00fccken kann auch \u00fcber ein kleines Programm unter Verwendung der Funktion <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex>erfolgen. Dies ist besonders bequem in R\u00e4umen, deren Indizes nicht quantisiert sind (Kartografie).<\/p>\n<h2>Fazit<\/h2>\n<p>\nDie gegenw\u00e4rtige Zeit stellt neue, ehrgeizige Aufgaben. Grafen k\u00f6nnen aus Milliarden von Knoten bestehen, Karten aus Milliarden von Punkten, und vielleicht m\u00f6chte jemand sogar sein eigenes Universum auf zellul\u00e4ren Automaten starten (<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>Wenn das Volumen der Daten sparsamer Arrays nicht mehr in den Arbeitsspeicher passt und man damit arbeiten muss, sollte man die M\u00f6glichkeit der Umsetzung solcher Projekte auf Globals und COS in Betracht ziehen.<\/p>\n<p>Danke f\u00fcr Ihre Aufmerksamkeit! Wir freuen uns auf Ihre Fragen und W\u00fcnsche in den Kommentaren.<\/p>\n<p><b>Haftungsausschluss<\/b>: <i>Dieser Artikel und meine Kommentare dazu sind meine pers\u00f6nliche Meinung und stehen nicht im Zusammenhang mit der offiziellen Position der InterSystems Corporation.<\/i><br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/268465\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 (1, 2) \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 \u043a\u0430\u043a \u043e \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u0445, \u0432 \u044d\u0442\u043e\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044b \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27432,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36632","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Globals \u2013 Sch\u00e4tze zur Datenspeicherung. Sparse Arrays. Teil 3 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-razrezhennye-massivy-chast-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/36632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=36632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/36632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/27432"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=36632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=36632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=36632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}