{"id":87758,"date":"2020-07-10T01:41:58","date_gmt":"2020-07-09T23:41:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye"},"modified":"2020-07-10T01:41:58","modified_gmt":"2020-07-09T23:41:58","slug":"kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","title":{"rendered":"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/4d853e314dfea596b45a6aff00238bea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>So sieht \u00dcberfl\u00fcssigkeit aus<\/em><\/p>\n<p><\/p>\n<p>Fehlerkorrekturcodes* werden in Computersystemen h\u00e4ufig verwendet, um die Zuverl\u00e4ssigkeit der Datenspeicherung zu erh\u00f6hen. Bei Yandex werden sie in vielen Projekten eingesetzt. Zum Beispiel erm\u00f6glicht der Einsatz von Fehlerkorrekturcodes anstelle von Replikation in unserem internen Objektspeicher, Millionen zu sparen, ohne die Zuverl\u00e4ssigkeit zu verringern. Doch trotz ihrer weit verbreiteten Anwendung sind verst\u00e4ndliche Beschreibungen, wie Fehlerkorrekturcodes funktionieren, \u00e4u\u00dferst selten. Diejenigen, die mehr dar\u00fcber erfahren m\u00f6chten, sto\u00dfen oft auf Folgendes (aus <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%B4_%D0%A0%D0%B8%D0%B4%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%BE%D0%BD%D0%B0\">Wikis<\/a><\/noindex>):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/c5e592acd8c1e113c099357d1ba48d5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mein Name ist Vadim, ich arbeite bei Yandex an der Entwicklung des internen Objektspeichers MDS. In diesem Artikel werde ich die theoretischen Grundlagen der Fehlerkorrekturcodes (Reed-Solomon-Codes und LRC) mit einfachen Worten erkl\u00e4ren. Ich werde erl\u00e4utern, wie sie funktionieren, ganz ohne komplizierte Mathematik und seltene Begriffe. Am Ende werde ich Beispiele f\u00fcr die Verwendung von Fehlerkorrekturcodes bei Yandex anf\u00fchren.<\/p>\n<p><\/p>\n<p>Einige mathematische Details werde ich nicht ausf\u00fchrlich behandeln, aber ich werde Links bereitstellen f\u00fcr diejenigen, die tiefer eintauchen m\u00f6chten. Ich m\u00f6chte auch darauf hinweisen, dass einige mathematische Definitionen nicht strikt sein k\u00f6nnen, da der Artikel nicht f\u00fcr Mathematiker, sondern f\u00fcr Ingenieure gedacht ist, die das Thema verstehen m\u00f6chten.<\/p>\n<p><\/p>\n<p>* In der englischen Literatur werden Fehlerkorrekturcodes h\u00e4ufig als Erasure Codes bezeichnet.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"1-sut-kodov-izbytochnosti\">1. Die Grundidee der Fehlerkorrekturcodes<\/h1>\n<p><\/p>\n<p>Die grundlegende Idee aller Fehlerkorrekturcodes ist ganz einfach: Daten so zu speichern (oder zu \u00fcbertragen), dass sie bei Fehlern (Festplattensch\u00e4den, \u00dcbertragungsfehlern usw.) nicht verloren gehen. <\/p>\n<p><\/p>\n<p>In den meisten* Fehlerkorrekturcodes werden Daten in n Datenbl\u00f6cke aufgeteilt, f\u00fcr die m Fehlerkorrekturbl\u00f6cke berechnet werden, sodass insgesamt n + m Bl\u00f6cke entstehen. Die Fehlerkorrekturcodes werden so konstruiert, dass man n Datenbl\u00f6cke wiederherstellen kann, indem man nur einen Teil der n + m Bl\u00f6cke verwendet. Im Folgenden werden wir uns ausschlie\u00dflich mit blockweisen Fehlerkorrekturcodes befassen, das hei\u00dft mit solchen, bei denen die Daten in Bl\u00f6cke unterteilt werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/1273b4643f915dd615026ec38ca56473.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Um alle n Datenbl\u00f6cke wiederherzustellen, ben\u00f6tigt man mindestens n aus n + m Bl\u00f6cken, da man n Bl\u00f6cke nicht erhalten kann, wenn man nur n-1 Block hat (in diesem Fall m\u00fcsste man 1 Block \"aus der Luft\" nehmen). Gen\u00fcgen n beliebige Bl\u00f6cke aus n + m Bl\u00f6cken zur Wiederherstellung aller Daten? Das h\u00e4ngt von der Art der Redundanzcodes ab. Zum Beispiel erm\u00f6glichen Reed-Solomon-Codes die Wiederherstellung aller Daten mit beliebigen n Bl\u00f6cken, w\u00e4hrend LRC-Redundanzcodes dies nicht immer tun.<\/p>\n<p><\/p>\n<h3 id=\"hranenie-dannyh\">Datenspeicherung<\/h3>\n<p><\/p>\n<p>In Datenspeichersystemen wird in der Regel jeder Datenblock und jeder Redundanzcode auf einer separaten Festplatte gespeichert. Somit k\u00f6nnen die urspr\u00fcnglichen Daten auch bei einem Ausfall einer beliebigen Festplatte trotzdem wiederhergestellt und gelesen werden. Die Daten k\u00f6nnen auch dann wiederhergestellt werden, wenn mehrere Festplatten gleichzeitig ausfallen.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh\">Daten\u00fcbertragung<\/h3>\n<p><\/p>\n<p>Redundanzcodes k\u00f6nnen zur zuverl\u00e4ssigen Daten\u00fcbertragung in einem unzuverl\u00e4ssigen Netzwerk verwendet werden. Die zu \u00fcbertragenden Daten werden in Bl\u00f6cke unterteilt, f\u00fcr die Redundanzcodes berechnet werden. Sowohl die Datenbl\u00f6cke als auch die Redundanzcodebl\u00f6cke werden \u00fcber das Netzwerk \u00fcbertragen. Bei Fehlern in beliebigen Bl\u00f6cken (bis zu einer bestimmten Anzahl von Bl\u00f6cken) k\u00f6nnen die Daten trotzdem fehlerfrei \u00fcber das Netzwerk \u00fcbertragen werden. Reed-Solomon-Codes beispielsweise werden f\u00fcr die Daten\u00fcbertragung \u00fcber optische Kommunikationsleitungen und in der Satellitenkommunikation verwendet.<\/p>\n<p><\/p>\n<p>* Es gibt auch Redundanzcodes, bei denen die Daten nicht in Bl\u00f6cke unterteilt werden, beispielsweise Hamming-Codes und CRC-Codes, die h\u00e4ufig f\u00fcr die Daten\u00fcbertragung in Ethernet-Netzwerken verwendet werden. Dies sind Codes zur fehlerkorrigierenden Codierung, die f\u00fcr die Fehlererkennung und nicht zur Fehlerkorrektur bestimmt sind (der Hamming-Code erlaubt auch teilweise Fehlerkorrekturen).<\/p>\n<p><\/p>\n<h1 id=\"2-kody-rida--solomona\">2. Reed-Solomon-Codes<\/h1>\n<p><\/p>\n<p>Die Reed-Solomon-Codes sind einer der am weitesten verbreiteten Redundanzcodes, die in den 1960er Jahren erfunden wurden und in den 1980er Jahren erstmals f\u00fcr die Serienproduktion von CDs weithin Anwendung fanden.<\/p>\n<p><\/p>\n<p>Zwei Schl\u00fcsselfragen f\u00fcr das Verst\u00e4ndnis der Reed-Solomon-Codes sind: 1) wie man Redundanzcodebl\u00f6cke erstellt; 2) wie man Daten mit Hilfe von Redundanzcodebl\u00f6cken wiederherstellt. Lassen Sie uns Antworten auf diese Fragen finden.<br \/>\nZur Vereinfachung nehmen wir im Folgenden an, dass n=6 und m=4. Andere Konstellationen werden analog betrachtet.<\/p>\n<p><\/p>\n<h3 id=\"kak-sozdavat-bloki-kodov-izbytochnosti\">Wie man Redundanzcodebl\u00f6cke erstellt<\/h3>\n<p><\/p>\n<p>Jeder Block von Redundanzcodes wird unabh\u00e4ngig von den anderen betrachtet. F\u00fcr die Berechnung jedes Blocks werden alle n Datenbl\u00f6cke verwendet. In der folgenden Abbildung sind X1-X6 die Datenbl\u00f6cke, P1\u2013P4 sind die Bl\u00f6cke der Redundanzcodes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/b4841e48a5f2f059376bb458a26c6235.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alle Datenbl\u00f6cke m\u00fcssen gleich gro\u00df sein, zur Ausrichtung k\u00f6nnen Null-Bits verwendet werden. Die resultierenden Redundanzcode-Bl\u00f6cke haben die gleiche Gr\u00f6\u00dfe wie die Datenbl\u00f6cke. Alle Datenbl\u00f6cke werden in W\u00f6rter unterteilt (z. B. 16 Bit). Angenommen, wir haben die Datenbl\u00f6cke in k W\u00f6rter unterteilt. Dann werden auch alle Redundanzcode-Bl\u00f6cke in k W\u00f6rter unterteilt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/fff9c998a760e3f05ef45497557888a9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00fcr die Berechnung des i-ten Wortes jedes Redundanzblocks werden die i-ten W\u00f6rter aller Datenbl\u00f6cke verwendet. Sie werden nach der folgenden Formel berechnet:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/8f52209ef7f628c8a748325b1a30c2d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier sind die Werte x die W\u00f6rter der Datenbl\u00f6cke, p die W\u00f6rter der Redundanzcode-Bl\u00f6cke, und alle Alpha, Beta, Gamma und Delta sind speziell ausgew\u00e4hlte Zahlen, die f\u00fcr alle i gleich sind. Es sei gleich gesagt, dass all diese Werte keine gew\u00f6hnlichen Zahlen sind, sondern Elemente des Galois-Feldes. Die Operationen +, -, *, \/ sind keine f\u00fcr uns gewohnten Operationen, sondern spezielle Operationen, die \u00fcber den Elementen des Galois-Felds eingef\u00fchrt wurden.<\/p>\n<p><\/p>\n<h3 id=\"zachem-nuzhny-polya-galua\">Warum werden Galois-Felder ben\u00f6tigt<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/94ed4514ae15b01e7869efdeb9a605c6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es scheint ganz einfach zu sein: Wir teilen die Daten in Bl\u00f6cke, die Bl\u00f6cke in W\u00f6rter, und mit Hilfe der W\u00f6rter der Datenbl\u00f6cke berechnen wir die W\u00f6rter der Redundanzcode-Bl\u00f6cke - wir erhalten die Bl\u00f6cke der Redundanzcodes. Im Gro\u00dfen und Ganzen funktioniert das so, aber der Teufel steckt im Detail:<\/p>\n<p><\/p>\n<ol>\n<li>Wie bereits erw\u00e4hnt, ist die Wortgr\u00f6\u00dfe festgelegt, in unserem Beispiel 16 Bit. Die obigen Formeln f\u00fcr die Reed-Solomon-Codes sind so, dass bei Verwendung gew\u00f6hnlicher Ganzzahlen das Ergebnis der Berechnung von p m\u00f6glicherweise nicht durch ein Wort der zul\u00e4ssigen Gr\u00f6\u00dfe dargestellt werden kann.<\/li>\n<li>Bei der Wiederherstellung von Daten werden die obigen Formeln als Gleichungssystem betrachtet, das gel\u00f6st werden muss, um die Daten wiederherzustellen. W\u00e4hrend des L\u00f6sungsprozesses kann es notwendig sein, ganze Zahlen durch einander zu teilen, wobei das Ergebnis eine reelle Zahl ist, die nicht genau im Speicher des Computers dargestellt werden kann.<\/li>\n<\/ol>\n<p><\/p>\n<p>Diese Probleme verhindern die Verwendung ganzer Zahlen f\u00fcr Reed-Solomon-Codes. Die L\u00f6sung des Problems ist originell und l\u00e4sst sich wie folgt beschreiben: Lassen Sie uns spezielle Zahlen erfinden, die man mit W\u00f6rtern der gew\u00fcnschten L\u00e4nge (z. B. 16 Bit) darstellen kann, und das Ergebnis aller Operationen (Addition, Subtraktion, Multiplikation, Division) wird ebenfalls im Speicher des Computers mithilfe von W\u00f6rtern der gew\u00fcnschten L\u00e4nge dargestellt.<\/p>\n<p><\/p>\n<p>Solche \"speziellen\" Zahlen werden seit langem von Mathematikern erforscht und hei\u00dfen K\u00f6rper. Ein K\u00f6rper ist eine Menge von Elementen mit definierten Operationen der Addition, Subtraktion, Multiplikation und Division.<\/p>\n<p><\/p>\n<p>Galois-K\u00f6rper* sind K\u00f6rper, f\u00fcr die f\u00fcr jede Operation (+, -, *, \/) und f\u00fcr beliebige zwei Elemente des K\u00f6rpers ein eindeutiges Ergebnis existiert. Galois-K\u00f6rper k\u00f6nnen f\u00fcr Zahlen konstruiert werden, die Potenzen von 2 sind: 2, 4, 8, 16 usw. (tats\u00e4chlich Potenzen jeder Primzahl p, aber in der Praxis interessieren wir uns nur f\u00fcr Potenzen von 2). Zum Beispiel ist f\u00fcr W\u00f6rter mit einer Gr\u00f6\u00dfe von 16 Bit dieser K\u00f6rper, der 65.536 Elemente enth\u00e4lt, f\u00fcr die jede Paarung ein Ergebnis jeder Operation (+, -, *, \/) liefert. Die Werte x, p, alpha, beta, gamma, delta aus den obigen Gleichungen gelten f\u00fcr Berechnungen als Elemente des Galois-K\u00f6rpers.<\/p>\n<p><\/p>\n<p>Somit haben wir ein Gleichungssystem, mit dem wir Bl\u00f6cke von Redundanzcodes erstellen k\u00f6nnen, indem wir ein entsprechendes Computerprogramm schreiben. Mit demselben Gleichungssystem k\u00f6nnen Daten wiederhergestellt werden.<\/p>\n<p><\/p>\n<p>* Dies ist keine strikte Definition, eher eine Beschreibung.<\/p>\n<p><\/p>\n<h3 id=\"kak-vosstanavlivat-dannye\">Wie Daten wiederhergestellt werden<\/h3>\n<p><\/p>\n<p>Die Wiederherstellung ist erforderlich, wenn von n + m Bl\u00f6cken einige Bl\u00f6cke fehlen. Dies k\u00f6nnen sowohl Datenbl\u00f6cke als auch Bl\u00f6cke von Redundanzcodes sein. Das Fehlen von Datenbl\u00f6cken und\/oder Redundanzcodebl\u00f6cken bedeutet, dass in den obigen Gleichungen die entsprechenden Variablen x und\/oder p unbekannt sind.<\/p>\n<p><\/p>\n<p>Die Gleichungen f\u00fcr Reed-Solomon-Codes k\u00f6nnen als ein Gleichungssystem betrachtet werden, in dem alle Werte alpha, beta, gamma, delta Konstanten sind, alle x und p, die den verf\u00fcgbaren Bl\u00f6cken entsprechen, - bekannte Variablen sind, w\u00e4hrend die \u00fcbrigen x und p - unbekannt sind.<\/p>\n<p><\/p>\n<p>Zum Beispiel, lassen Sie uns annehmen, dass die Datenbl\u00f6cke 1, 2, 3 und der Redundanzcodeblock 2 nicht verf\u00fcgbar sind, dann wird f\u00fcr die i-te Gruppe von W\u00f6rtern das folgende Gleichungssystem (Unbekannte sind rot markiert) bestehen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/6f24804c3d34423f31796e43e9ae1203.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben ein System aus 4 Gleichungen mit 4 Unbekannten, also k\u00f6nnen wir es l\u00f6sen und die Daten wiederherstellen!<\/p>\n<p><\/p>\n<p>Aus diesem Gleichungssystem ergeben sich einige Schlussfolgerungen zur Datenwiederherstellung f\u00fcr Reed-Solomon-Codes (n Datenbl\u00f6cke, m Redundanzbl\u00f6cke):<\/p>\n<p><\/p>\n<ul>\n<li>Daten k\u00f6nnen bei Verlust beliebiger m Bl\u00f6cke oder weniger wiederhergestellt werden. Bei Verlust von m+1 oder mehr Bl\u00f6cken k\u00f6nnen die Daten nicht wiederhergestellt werden: man kann ein System aus m Gleichungen mit m + 1 Unbekannten nicht l\u00f6sen. <\/li>\n<li>Um sogar einen einzigen Datenblock wiederherzustellen, m\u00fcssen beliebige n der verbleibenden Bl\u00f6cke verwendet werden; dabei kann jeder der Redundanzcodes verwendet werden.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-eschyo-nuzhno-znat\">Was noch wichtig ist zu wissen<\/h3>\n<p><\/p>\n<p>In der obigen Beschreibung \u00fcberspringe ich mehrere wichtige Fragen, deren Betrachtung ein tieferes Eintauchen in die Mathematik erfordert. Insbesondere sage ich nichts \u00fcber Folgendes:<\/p>\n<p><\/p>\n<ul>\n<li>Das Gleichungssystem f\u00fcr Reed-Solomon-Codes muss (eine eindeutige) L\u00f6sung f\u00fcr alle Kombinationen von Unbekannten (nicht mehr als m Unbekannten) haben. Aus dieser Anforderung ergeben sich die Werte f\u00fcr Alpha, Beta, Gamma und Delta.<\/li>\n<li>Das Gleichungssystem muss automatisch erstellt werden k\u00f6nnen (je nachdem, welche Bl\u00f6cke nicht verf\u00fcgbar sind) und gel\u00f6st werden k\u00f6nnen.<\/li>\n<li>Es muss ein Galois-Feld konstruiert werden: f\u00fcr eine gegebene Wortgr\u00f6\u00dfe muss das Ergebnis jeder Operation (+, -, *, \/) f\u00fcr beliebige zwei Elemente gefunden werden k\u00f6nnen.<\/li>\n<\/ul>\n<p><\/p>\n<p>Am Ende des Artikels gibt es Verweise auf Literatur zu diesen wichtigen Fragen.<\/p>\n<p><\/p>\n<h3 id=\"vybor-n-i-m\">Wahl von n und m<\/h3>\n<p><\/p>\n<p>Wie w\u00e4hlt man n und m in der Praxis? In der Praxis verwenden Datenspeichersysteme Redundanzcodes zur Platzersparnis, deshalb wird m immer kleiner als n gew\u00e4hlt. Ihre konkreten Werte h\u00e4ngen von mehreren Faktoren ab, einschlie\u00dflich:<\/p>\n<p><\/p>\n<ul>\n<li>Zuverl\u00e4ssigkeit der Datenspeicherung. Je h\u00f6her m ist, desto mehr Festplattenausf\u00e4lle k\u00f6nnen \u00fcberstanden werden, d.h. die Zuverl\u00e4ssigkeit ist h\u00f6her.<\/li>\n<li>Redundanz der Speicherung. Je h\u00f6her das Verh\u00e4ltnis m \/ n ist, desto h\u00f6her ist die Redundanz der Speicherung, und desto teurer wird das System.<\/li>\n<li>Verarbeitungszeit f\u00fcr Anfragen. Je h\u00f6her die Summe n + m ist, desto l\u00e4nger wird die Antwortzeit auf die Anfragen sein. Da zur Datenlesung (w\u00e4hrend der Wiederherstellung) n Bl\u00f6cke gelesen werden m\u00fcssen, die auf n verschiedenen Festplatten gespeichert sind, wird die Lesezeit durch die langsamste Festplatte bestimmt.<\/li>\n<\/ul>\n<p><\/p>\n<p>Dar\u00fcber hinaus bringt die Speicherung von Daten in mehreren Rechenzentren zus\u00e4tzliche Einschr\u00e4nkungen bei der Auswahl von n und m mit sich: Bei der Deaktivierung eines Rechenzentrums m\u00fcssen die Daten weiterhin lesbar bleiben. Beispielsweise muss bei der Speicherung von Daten in 3 Rechenzentren die Bedingung m &gt;= n\/2 erf\u00fcllt sein, andernfalls kann es zu Situationen kommen, in denen die Daten bei der Deaktivierung eines Rechenzentrums nicht mehr lesbar sind.<\/p>\n<p><\/p>\n<h1 id=\"3-lrc--local-reconstruction-codes\">3. LRC \u2014 Lokale Rekonstruktionscodes<\/h1>\n<p><\/p>\n<p>Um Daten mit Reed-Solomon-Codes wiederherzustellen, m\u00fcssen n beliebige Datenbl\u00f6cke verwendet werden. Dies ist ein sehr wesentlicher Nachteil f\u00fcr verteilte Datenspeichersysteme, da f\u00fcr die Wiederherstellung der Daten auf einer defekten Festplatte Daten von den meisten anderen gelesen werden m\u00fcssen, was eine hohe zus\u00e4tzliche Belastung f\u00fcr die Festplatten und das Netzwerk verursacht.<\/p>\n<p><\/p>\n<p>Die h\u00e4ufigsten Fehler sind die Nichterreichbarkeit eines Datenblocks aufgrund eines Ausfalls oder einer \u00dcberlastung einer Festplatte. Kann man die \u00fcberm\u00e4\u00dfige Belastung bei der Wiederherstellung von Daten in einem solchen (am h\u00e4ufigsten auftretenden) Fall irgendwie reduzieren? Es stellt sich heraus, dass es m\u00f6glich ist: daf\u00fcr gibt es spezielle LRC-Redundanzcodes.<\/p>\n<p><\/p>\n<p>LRC (Lokale Rekonstruktionscodes) sind Redundanzcodes, die von Microsoft f\u00fcr die Verwendung in Windows Azure Storage entwickelt wurden. Die Idee der LRC ist denkbar einfach: Alle Datenbl\u00f6cke werden in zwei (oder mehr) Gruppen unterteilt und ein Teil der Redundanzcodes wird f\u00fcr jede Gruppe separat berechnet. Ein Teil der Redundanzcodes wird also anhand aller Datenbl\u00f6cke (in LRC als globale Redundanzcodes bezeichnet) und ein anderer Teil mit Hilfe einer der beiden Gruppen von Datenbl\u00f6cken (diese werden lokale Redundanzcodes genannt) berechnet.<\/p>\n<p><\/p>\n<p>LRC wird durch drei Zahlen dargestellt: n-r-l, wobei n die Anzahl der Datenbl\u00f6cke, r die Anzahl der globalen Redundanzcodes und l die Anzahl der lokalen Redundanzcodes ist. Um Daten bei der Nichterreichbarkeit eines Datenblocks zu lesen, m\u00fcssen nur n\/l Bl\u00f6cke gelesen werden \u2013 das ist l-mal weniger als bei Reed-Solomon-Codes.<\/p>\n<p><\/p>\n<p>Zum Beispiel betrachten wir das LRC-Schema 6-2-2. X1\u2013X6 sind 6 Datenbl\u00f6cke, P1, P2 sind 2 globale Redundanzbl\u00f6cke, P3, P4 sind 2 lokale Redundanzbl\u00f6cke.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/783f6d4b57b992c56385cdd07603cda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Redundanzbl\u00f6cke P1, P2 werden anhand aller Datenbl\u00f6cke berechnet. Der Redundanzblock P3 wird mithilfe der Datenbl\u00f6cke X1\u2013X3 berechnet, der Redundanzblock P4 mithilfe der Datenbl\u00f6cke X4\u2013X6.<\/p>\n<p><\/p>\n<p>Der Rest wird im LRC nach dem Vorbild der Reed-Solomon-Codes durchgef\u00fchrt. Die Gleichungen zur Berechnung der Wortanzahl der Blockcodes f\u00fcr Redundanz sind wie folgt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Redundanzcodes: einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert\" src=\"\/wp-content\/uploads\/2020\/07\/b32c8864fac0678014fc9a5abf490537.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Um die Werte alpha, beta, gamma, delta zu bestimmen, m\u00fcssen eine Reihe von Bedingungen erf\u00fcllt werden, die die M\u00f6glichkeit der Datenwiederherstellung garantieren (d.h. die L\u00f6sung des Gleichungssystems). N\u00e4here Informationen dazu finden Sie in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">Artikel<\/a><\/noindex>.<br \/>\nAuch in der Praxis werden f\u00fcr die Berechnung der lokalen Redundanzcodes P3, P4 die XOR-Operation verwendet. <\/p>\n<p><\/p>\n<p>Aus dem Gleichungssystem f\u00fcr LRC ergeben sich mehrere Erkenntnisse:<\/p>\n<p><\/p>\n<ul>\n<li>Um einen beliebigen 1-Datenblock wiederherzustellen, ist es ausreichend, n\/l Bl\u00f6cke zu lesen (n\/2 in unserem Beispiel).<\/li>\n<li>Wenn r + l Bl\u00f6cke nicht verf\u00fcgbar sind und alle Bl\u00f6cke zu einer Gruppe geh\u00f6ren, k\u00f6nnen die Daten nicht wiederhergestellt werden. Das l\u00e4sst sich leicht anhand eines Beispiels erkl\u00e4ren. Nehmen wir an, die Bl\u00f6cke X1\u2013X3 und P3 sind nicht verf\u00fcgbar: Das sind r + l Bl\u00f6cke aus einer Gruppe, in unserem Fall 4. Dann haben wir ein System aus 3 Gleichungen mit 4 Unbekannten, das nicht gel\u00f6st werden kann.<\/li>\n<li>In allen anderen F\u00e4llen der Nichtverf\u00fcgbarkeit von r + l Bl\u00f6cken (wenn aus jeder Gruppe mindestens ein Block verf\u00fcgbar ist) k\u00f6nnen die Daten im LRC wiederhergestellt werden.<\/li>\n<\/ul>\n<p><\/p>\n<p>Damit \u00fcbertrifft LRC die Reed-Solomon-Codes bei der Datenwiederherstellung nach Einzel-Fehlern. Bei Reed-Solomon-Codes m\u00fcssen zur Wiederherstellung selbst eines Datenblocks n Bl\u00f6cke verwendet werden, w\u00e4hrend im LRC zur Wiederherstellung eines Datenblocks nur n\/l Bl\u00f6cke erforderlich sind (n\/2 in unserem Beispiel). Andererseits hat LRC im Vergleich zu Reed-Solomon-Codes eine geringere maximale Anzahl zul\u00e4ssiger Fehler. In den obigen Beispielen k\u00f6nnen die Reed-Solomon-Codes Daten bei beliebigen 4 Fehlern wiederherstellen, wohingegen es f\u00fcr LRC 2 Kombinationen aus 4 Fehlern gibt, bei denen die Daten nicht wiederhergestellt werden k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Was wichtiger ist, h\u00e4ngt von der konkreten Situation ab, aber oft \u00fcberwiegt die Reduktion der Redundanzlast, die LRC bietet, die geringf\u00fcgig geringere Zuverl\u00e4ssigkeit der Speicherung.<\/p>\n<p><\/p>\n<h1 id=\"4-drugie-kody-izbytochnosti\">4. Andere Redundanzcodes<\/h1>\n<p><\/p>\n<p>Neben den Reed-Solomon-Codes und LRC gibt es viele andere Redundanzcodes. Unterschiedliche Redundanzcodes verwenden unterschiedliche Mathematik. Hier sind einige andere Redundanzcodes:<\/p>\n<p><\/p>\n<ul>\n<li>Redundanzcode mit Hilfe des XOR-Operators. Die XOR-Operation wird auf n Datenbl\u00f6cken durchgef\u00fchrt, und es entsteht 1 Block von Redundanzcodes, das hei\u00dft, das Schema ist n+1 (n Datenbl\u00f6cke, 1 Redundanzcode). Verwendet in <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/RAID#RAID_5\">RAID 5<\/a><\/noindex>, wo Datenbl\u00f6cke und Redundanzcodes zyklisch auf alle Festplatten des Arrays geschrieben werden.<\/li>\n<li>Der Even-Odd-Algorithmus, der auf der XOR-Operation basiert. Er erm\u00f6glicht den Aufbau von 2 Redundanzcodebl\u00f6cken, also Schema n+2.<\/li>\n<li>Der STAR-Algorithmus, der auf der XOR-Operation basiert. Er erm\u00f6glicht den Aufbau von 3 Redundanzcodebl\u00f6cken, also Schema n+3.<\/li>\n<li>Pyramide-Codes \u2013 weitere Redundanzcodes von Microsoft.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"5-ispolzovanie-v-yandekse\">5. Verwendung bei Yandex<\/h1>\n<p><\/p>\n<p>Eine Reihe von Infrastrukturprojekten von Yandex verwenden Redundanzcodes f\u00fcr die zuverl\u00e4ssige Speicherung von Daten. Hier sind einige Beispiele:<\/p>\n<p><\/p>\n<ul>\n<li>Der interne Objektspeicher MDS, \u00fcber den ich zu Beginn des Artikels geschrieben habe.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">YT<\/a><\/noindex> \u2013 Das MapReduce-System von Yandex.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FwLvAuOSIOU\">YDB<\/a><\/noindex> (Yandex DataBase) \u2013 eine verteilte NewSQL-Datenbank.<\/li>\n<\/ul>\n<p><\/p>\n<p>In MDS werden LRC-Redundanzcodes verwendet, Schema 8-2-2. Daten mit Redundanzcodes werden auf 12 verschiedenen Festplatten in verschiedenen Servern in 3 verschiedenen Rechenzentren geschrieben: jeweils 4 Server in jedem Rechenzentrum. Weitere Informationen dazu finden Sie in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\/\">Artikel<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>In YT werden sowohl Reed-Solomon-Codes (Schema 6-3), die zuerst implementiert wurden, als auch LRC-Redundanzcodes (Schema 12-2-2) verwendet, wobei LRC die bevorzugte Methode zur Speicherung ist.<\/p>\n<p><\/p>\n<p>In YDB werden auf Even-Odd basierende Redundanzcodes verwendet (Schema 4-2). \u00dcber die Redundanzcodes in YDB wurde bereits <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">auf Highload berichtet.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Die Verwendung verschiedener Redundanzcodes basiert auf unterschiedlichen Anforderungen, die an die Systeme gestellt werden. Zum Beispiel werden in MDS die mit LRC gespeicherten Daten sofort in 3 Rechenzentren platziert. Es ist wichtig, dass die Daten beim Ausfall eines beliebigen Rechenzentrums lesbar bleiben, deshalb m\u00fcssen die Bl\u00f6cke so \u00fcber die Rechenzentren verteilt werden, dass bei der Nichterreichbarkeit eines Rechenzentrums die Anzahl der nicht erreichbaren Bl\u00f6cke nicht h\u00f6her ist als zul\u00e4ssig. Im Schema 8-2-2 k\u00f6nnen jeweils 4 Bl\u00f6cke in jedem Rechenzentrum platziert werden, wodurch beim Ausfall eines Rechenzentrums 4 Bl\u00f6cke nicht erreichbar w\u00e4ren, die Daten aber weiterhin gelesen werden k\u00f6nnen. Egal welches Schema wir bei der Platzierung in 3 Rechenzentren w\u00e4hlen, es muss in jedem Fall (r + l) \/ n &gt;= 0,5 sein, das hei\u00dft, die Redundanz der Speicherung muss mindestens 50% betragen.<\/p>\n<p><\/p>\n<p>In YT ist die Situation anders: Jeder YT-Cluster befindet sich vollst\u00e4ndig in einem Rechenzentrum (verschiedene Cluster in verschiedenen Rechenzentren), wodurch es keine solche Einschr\u00e4nkung gibt. Das Schema 12-2-2 bietet eine Redundanz von 33%, was bedeutet, dass die Speicherung der Daten kosteng\u00fcnstiger ist, w\u00e4hrend sie auch bis zu 4 gleichzeitige Festplattenausf\u00e4lle \u00fcberstehen k\u00f6nnen, genau wie im MDS-Schema.<\/p>\n<p><\/p>\n<p>Es gibt noch viele Besonderheiten bei der Anwendung von Redundanzcodes in Speichersystemen und Datenverarbeitung: Nuancen der Datenwiederherstellung, Einfluss der Wiederherstellung auf die Ausf\u00fchrungszeit von Abfragen, Besonderheiten beim Schreiben von Daten usw. Ich plane, separat \u00fcber diese und weitere Aspekte der praktischen Anwendung von Redundanzcodes zu berichten, wenn das Thema interessiert.<\/p>\n<p><\/p>\n<h1 id=\"6-ssylki\">6. Links<\/h1>\n<p><\/p>\n<ol>\n<li>Artikelreihe \u00fcber Reed-Solomon-Codes und Galois-Felder: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yadro\/blog\/336286\/\">https:\/\/habr.com\/ru\/company\/yadro\/blog\/336286\/<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yadro\/blog\/341506\/\">https:\/\/habr.com\/ru\/company\/yadro\/blog\/341506\/<\/a><\/noindex><br \/>\nDiese behandeln die Mathematik verst\u00e4ndlich und vertiefend.<\/li>\n<li>Artikel von Microsoft \u00fcber LRC: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf<\/a><\/noindex><br \/>\nIm Abschnitt 2 wird die Theorie kurz erkl\u00e4rt, anschlie\u00dfend wird die praktische Anwendung von LRC behandelt.<\/li>\n<li>Even-Odd-Schema: <noindex><a rel=\"nofollow\" href=\"https:\/\/people.eecs.berkeley.edu\/~kubitron\/courses\/cs262a-F12\/handouts\/papers\/p245-blaum.pdf\">https:\/\/people.eecs.berkeley.edu\/~kubitron\/courses\/cs262a-F12\/handouts\/papers\/p245-blaum.pdf<\/a><\/noindex><\/li>\n<li>STAR-Schema: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/legacy\/event\/fast05\/tech\/full_papers\/huang\/huang.pdf\">https:\/\/www.usenix.org\/legacy\/event\/fast05\/tech\/full_papers\/huang\/huang.pdf<\/a><\/noindex><\/li>\n<li>Pyramidencodes: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems\/\">https:\/\/www.microsoft.com\/en-us\/research\/publication\/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems\/<\/a><\/noindex><\/li>\n<li>Redundanzcodes in MDS: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\">https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806<\/a><\/noindex> <\/li>\n<li>Redundanzcodes in YT: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/<\/a><\/noindex><\/li>\n<li>Redundanzcodes in YDB: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8<\/a><\/noindex><\/li>\n<\/ol>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/510050\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438* \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u042f\u043d\u0434\u0435\u043a\u0441\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0431\u0435\u0437 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87759,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87758","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=\"description\" content=\".\" \/>\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\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye\" \/>\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\u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438 \u0434\u0451\u0448\u0435\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye\" \/>\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=\"2020-07-09T23:41:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-09T23:41:58+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\udd47Redundanzcodes: Einfach erkl\u00e4rt, wie man Daten zuverl\u00e4ssig und kosteng\u00fcnstig speichert | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","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\u041a\u043e\u0434\u044b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438 \u0434\u0451\u0448\u0435\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","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":"2020-07-09T23:41:58+00:00","article:modified_time":"2020-07-09T23:41:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87758","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:44:06","updated":"2022-09-29 13:02:43","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\/87758","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=87758"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/87758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/87759"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=87758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=87758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=87758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}