{"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\/pl\/blog\/administrirovanie\/kody-izbytochnosti-prostymi-slovami-o-tom-kak-nadyozhno-i-dyoshevo-hranit-dannye","title":{"rendered":"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/4d853e314dfea596b45a6aff00238bea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Tak wygl\u0105da nadmiarowo\u015b\u0107<\/em><\/p>\n<p><\/p>\n<p>Kody nadmiarowo\u015bci* s\u0105 szeroko stosowane w systemach komputerowych w celu zwi\u0119kszenia niezawodno\u015bci przechowywania danych. W Yandexie wykorzystuje si\u0119 je w wielu projektach. Na przyk\u0142ad, zastosowanie kod\u00f3w nadmiarowo\u015bci zamiast replikacji w naszym wewn\u0119trznym systemie przechowywania obiekt\u00f3w oszcz\u0119dza miliony bez obni\u017cania niezawodno\u015bci. Mimo szerokiego zastosowania, zrozumia\u0142e opisy dzia\u0142ania kod\u00f3w nadmiarowo\u015bci s\u0105 bardzo rzadkie. Osoby chc\u0105ce si\u0119 z tym zapozna\u0107 napotykaj\u0105 na mniej wi\u0119cej to (z <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\">Wikipedii<\/a><\/noindex>):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/c5e592acd8c1e113c099357d1ba48d5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nazywam si\u0119 Wadim, w Yandexie zajmuj\u0119 si\u0119 opracowaniem wewn\u0119trznego systemu przechowywania obiekt\u00f3w MDS. W tym artykule prosto wyja\u015bni\u0119 teoretyczne podstawy kod\u00f3w nadmiarowo\u015bci (kod\u00f3w Reeda-Solomona i LRC). Opowiem, jak to dzia\u0142a, bez skomplikowanej matematyki i rzadkich termin\u00f3w. Na ko\u0144cu podam przyk\u0142ady zastosowania kod\u00f3w nadmiarowo\u015bci w Yandexie.<\/p>\n<p><\/p>\n<p>Nie b\u0119d\u0119 szczeg\u00f3\u0142owo omawia\u0107 szeregu matematycznych detali, ale podam linki dla tych, kt\u00f3rzy chc\u0105 zg\u0142\u0119bi\u0107 temat. R\u00f3wnie\u017c zauwa\u017cam, \u017ce niekt\u00f3re definicje matematyczne mog\u0105 by\u0107 niedok\u0142adne, poniewa\u017c artyku\u0142 jest przeznaczony nie dla matematyk\u00f3w, lecz dla in\u017cynier\u00f3w, kt\u00f3rzy chc\u0105 zrozumie\u0107 istot\u0119 problemu.<\/p>\n<p><\/p>\n<p>* W literaturze angloj\u0119zycznej kody nadmiarowo\u015bci cz\u0119sto nazywane s\u0105 erasure codes.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"1-sut-kodov-izbytochnosti\">1. Istota kod\u00f3w nadmiarowo\u015bci<\/h1>\n<p><\/p>\n<p>Istota wszystkich kod\u00f3w nadmiarowo\u015bci jest niezwykle prosta: przechowywa\u0107 (lub przesy\u0142a\u0107) dane w taki spos\u00f3b, aby nie znikn\u0119\u0142y w przypadku wyst\u0105pienia b\u0142\u0119d\u00f3w (awarii dysk\u00f3w, b\u0142\u0119d\u00f3w transmisji danych itp.). <\/p>\n<p><\/p>\n<p>W wi\u0119kszo\u015bci* kod\u00f3w nadmiarowo\u015bci dane dzieli si\u0119 na n blok\u00f3w danych, dla kt\u00f3rych liczy si\u0119 m blok\u00f3w kod\u00f3w nadmiarowo\u015bci, co daje \u0142\u0105cznie n + m blok\u00f3w. Kody nadmiarowo\u015bci s\u0105 konstruowane w taki spos\u00f3b, aby mo\u017cna by\u0142o odzyska\u0107 n blok\u00f3w danych, u\u017cywaj\u0105c tylko cz\u0119\u015bci blok\u00f3w z n + m. Nast\u0119pnie rozwa\u017cymy tylko bloki kod\u00f3w nadmiarowo\u015bci, czyli takie, w kt\u00f3rych dane dzielone s\u0105 na bloki.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/1273b4643f915dd615026ec38ca56473.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aby przywr\u00f3ci\u0107 wszystkie n blok\u00f3w danych, konieczne jest posiadanie przynajmniej n z n + m blok\u00f3w, poniewa\u017c nie mo\u017cna uzyska\u0107 n blok\u00f3w maj\u0105c tylko n-1 blok (w takim przypadku musia\u0142by by\u0107 wzi\u0119ty 1 blok \u201ez powietrza\u201d). Czy wystarcz\u0105 n dowolnych blok\u00f3w z n + m blok\u00f3w do przywr\u00f3cenia wszystkich danych? Zale\u017cy to od rodzaju kod\u00f3w nadmiarowych, na przyk\u0142ad kody Reeda-Solomona pozwalaj\u0105 na przywr\u00f3cenie wszystkich danych za pomoc\u0105 dowolnych n blok\u00f3w, podczas gdy kody LRC \u2014 nie zawsze.<\/p>\n<p><\/p>\n<h3 id=\"hranenie-dannyh\">Przechowywanie danych<\/h3>\n<p><\/p>\n<p>W systemach przechowywania danych zazwyczaj ka\u017cdy z blok\u00f3w danych i blok\u00f3w kod\u00f3w nadmiarowych jest zapisywany na oddzielnym dysku. W przypadku awarii dowolnego dysku, oryginalne dane wci\u0105\u017c mo\u017cna b\u0119dzie przywr\u00f3ci\u0107 i odczyta\u0107. Dane mo\u017cna b\u0119dzie przywr\u00f3ci\u0107 nawet przy jednoczesnej awarii kilku dysk\u00f3w.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh\">Przesy\u0142anie danych<\/h3>\n<p><\/p>\n<p>Kody nadmiarowe mo\u017cna wykorzysta\u0107 do niezawodnego przesy\u0142ania danych w zawodnej sieci. Przesy\u0142ane dane dzieli si\u0119 na bloki, dla kt\u00f3rych oblicza si\u0119 kody nadmiarowe. Po sieci przesy\u0142ane s\u0105 zar\u00f3wno bloki danych, jak i bloki kod\u00f3w nadmiarowych. W przypadku wyst\u0105pienia b\u0142\u0119d\u00f3w w dowolnych blokach (a\u017c do pewnej liczby blok\u00f3w), dane mo\u017cna nadal bezb\u0142\u0119dnie przes\u0142a\u0107 przez sie\u0107. Kody Reeda-Solomona, na przyk\u0142ad, s\u0105 u\u017cywane do przesy\u0142ania danych przez \u015bwiat\u0142owody oraz w komunikacji satelitarnej.<\/p>\n<p><\/p>\n<p>* Istniej\u0105 r\u00f3wnie\u017c kody nadmiarowe, w kt\u00f3rych dane nie s\u0105 dzielone na bloki, na przyk\u0142ad kody Hamming i kody CRC, szeroko stosowane do przesy\u0142ania danych w sieciach Ethernet. To s\u0105 kody odporne na zak\u0142\u00f3cenia, przeznaczone do wykrywania b\u0142\u0119d\u00f3w, a nie do ich naprawy (kod Hamming tak\u017ce pozwala na cz\u0119\u015bciowe naprawianie b\u0142\u0119d\u00f3w).<\/p>\n<p><\/p>\n<h1 id=\"2-kody-rida--solomona\">2. Kody Reeda-Solomona<\/h1>\n<p><\/p>\n<p>Kody Reeda-Solomona to jedne z najpowszechniej stosowanych kod\u00f3w nadmiarowych, wynalezione w latach 60-tych XX wieku i po raz pierwszy zyska\u0142y szerokie zastosowanie w latach 80-tych przy seryjnej produkcji p\u0142yt kompaktowych.<\/p>\n<p><\/p>\n<p>Dwa kluczowe pytania dotycz\u0105ce kod\u00f3w Reeda-Solomona to: 1) jak tworzy\u0107 bloki kod\u00f3w nadmiarowych; 2) jak przywraca\u0107 dane za pomoc\u0105 blok\u00f3w kod\u00f3w nadmiarowych. Znajd\u017amy na nie odpowiedzi.<br \/>\nDla uproszczenia, b\u0119dziemy dalej zak\u0142ada\u0107, \u017ce n=6 i m=4. Inne schematy s\u0105 rozpatrywane w analogiczny spos\u00f3b.<\/p>\n<p><\/p>\n<h3 id=\"kak-sozdavat-bloki-kodov-izbytochnosti\">Jak tworzy\u0107 bloki kod\u00f3w nadmiarowych<\/h3>\n<p><\/p>\n<p>Ka\u017cdy blok kod\u00f3w nadmiarowo\u015bci jest rozpatrywany niezale\u017cnie od pozosta\u0142ych. Do obliczenia ka\u017cdego bloku wykorzystuje si\u0119 wszystkie n blok\u00f3w danych. Na poni\u017cszym schemacie X1-X6 to bloki danych, a P1\u2013P4 to bloki kod\u00f3w nadmiarowo\u015bci.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/b4841e48a5f2f059376bb458a26c6235.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wszystkie bloki danych musz\u0105 mie\u0107 ten sam rozmiar; do wyr\u00f3wnania mo\u017cna u\u017cy\u0107 zerowych bit\u00f3w. Otrzymane bloki kod\u00f3w nadmiarowo\u015bci b\u0119d\u0105 mia\u0142y ten sam rozmiar co bloki danych. Wszystkie bloki danych dziel\u0105 si\u0119 na s\u0142owa (na przyk\u0142ad po 16 bit\u00f3w). Za\u0142\u00f3\u017cmy, \u017ce podzielili\u015bmy bloki danych na k s\u0142\u00f3w. W\u00f3wczas wszystkie bloki kod\u00f3w nadmiarowo\u015bci r\u00f3wnie\u017c b\u0119d\u0105 podzielone na k s\u0142\u00f3w.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/fff9c998a760e3f05ef45497557888a9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Do obliczenia i-tego s\u0142owa ka\u017cdego bloku nadmiarowo\u015bci wykorzystywane b\u0119d\u0105 i-te s\u0142owa wszystkich blok\u00f3w danych. Obliczane b\u0119d\u0105 wed\u0142ug nast\u0119puj\u0105cego wzoru:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/8f52209ef7f628c8a748325b1a30c2d4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tutaj warto\u015bci x to s\u0142owa blok\u00f3w danych, p to s\u0142owa blok\u00f3w kod\u00f3w nadmiarowo\u015bci, a alfa, beta, gamma i delta to specjalnie dobrane liczby, identyczne dla wszystkich i. Nale\u017cy od razu zaznaczy\u0107, \u017ce wszystkie te warto\u015bci to nie zwyk\u0142e liczby, a elementy pola Galois, a operacje +, -, *, \/ to nie znane nam operacje, lecz specjalne operacje wprowadzone nad elementami pola Galois.<\/p>\n<p><\/p>\n<h3 id=\"zachem-nuzhny-polya-galua\">Po co s\u0105 pola Galois<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/94ed4514ae15b01e7869efdeb9a605c6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wydawa\u0107 by si\u0119 mog\u0142o, \u017ce to proste: dzielimy dane na bloki, bloki na s\u0142owa, a za pomoc\u0105 s\u0142\u00f3w blok\u00f3w danych obliczamy s\u0142owa blok\u00f3w kod\u00f3w nadmiarowo\u015bci \u2013 otrzymujemy bloki kod\u00f3w nadmiarowo\u015bci. W zasadzie tak to dzia\u0142a, ale diabe\u0142 tkwi w szczeg\u00f3\u0142ach:<\/p>\n<p><\/p>\n<ol>\n<li>Jak wspomniano wcze\u015bniej, rozmiar s\u0142owa jest sta\u0142y, w naszym przyk\u0142adzie wynosi 16 bit\u00f3w. Powyzsze wzory dla kod\u00f3w Reed-Solomona s\u0105 takie, \u017ce przy u\u017cyciu zwyk\u0142ych liczb ca\u0142kowitych wynik obliczenia p mo\u017ce nie by\u0107 mo\u017cliwy do przedstawienia za pomoc\u0105 s\u0142owa o dopuszczalnym rozmiarze.<\/li>\n<li>Przy odzyskiwaniu danych powy\u017csze wzory b\u0119d\u0105 traktowane jako uk\u0142ad r\u00f3wna\u0144, kt\u00f3ry nale\u017cy rozwi\u0105za\u0107, aby odzyska\u0107 dane. W trakcie rozwi\u0105zywania mo\u017ce pojawi\u0107 si\u0119 konieczno\u015b\u0107 dzielenia liczb ca\u0142kowitych przez siebie, co skutkuje liczb\u0105 rzeczywist\u0105, kt\u00f3rej nie mo\u017cna dok\u0142adnie przedstawi\u0107 w pami\u0119ci komputera.<\/li>\n<\/ol>\n<p><\/p>\n<p>Te problemy uniemo\u017cliwiaj\u0105 u\u017cywanie liczb ca\u0142kowitych dla kod\u00f3w Reed-Solomona. Rozwi\u0105zanie problemu jest oryginalne i mo\u017cna je opisa\u0107 w nast\u0119puj\u0105cy spos\u00f3b: wymy\u015blmy specjalne liczby, kt\u00f3re mo\u017cna reprezentowa\u0107 za pomoc\u0105 s\u0142\u00f3w o wymaganej d\u0142ugo\u015bci (na przyk\u0142ad 16 bit\u00f3w), a wynik wszystkich operacji na nich (dodawanie, odejmowanie, mno\u017cenie, dzielenie) r\u00f3wnie\u017c b\u0119dzie reprezentowany w pami\u0119ci komputera za pomoc\u0105 s\u0142\u00f3w o wymaganej d\u0142ugo\u015bci.<\/p>\n<p><\/p>\n<p>Takie \u201especjalne\u201d liczby s\u0105 od dawna badane w matematyce, nazywane s\u0105 polami. Pole to zbi\u00f3r element\u00f3w z okre\u015blonymi operacjami dodawania, odejmowania, mno\u017cenia i dzielenia.<\/p>\n<p><\/p>\n<p>Pola Galua* to pola, dla kt\u00f3rych istnieje i jest jednoznaczny wynik ka\u017cdej operacji (+, -, *, \/) dla dowolnych dw\u00f3ch element\u00f3w pola. Pola Galua mo\u017cna budowa\u0107 dla liczb b\u0119d\u0105cych pot\u0119g\u0105 2: 2, 4, 8, 16 itd. (w rzeczywisto\u015bci pot\u0119g\u0105 dowolnej liczby pierwszej p, ale w praktyce interesuj\u0105 nas tylko pot\u0119gi 2). Na przyk\u0142ad, dla s\u0142\u00f3w o rozmiarze 16 bit\u00f3w to pole zawieraj\u0105ce 65 536 element\u00f3w, dla ka\u017cdej pary kt\u00f3rych mo\u017cna znale\u017a\u0107 wynik dowolnej operacji (+, -, *, \/). Warto\u015bci x, p, alfa, beta, gamma, delta z powy\u017cszych r\u00f3wna\u0144 b\u0119d\u0105 uwa\u017cane za elementy pola Galua przy obliczeniach.<\/p>\n<p><\/p>\n<p>W ten spos\u00f3b mamy system r\u00f3wna\u0144, za pomoc\u0105 kt\u00f3rego mo\u017cna zbudowa\u0107 bloki kod\u00f3w nadmiarowo\u015bci, pisz\u0105c odpowiedni program komputerowy. Za pomoc\u0105 tego samego systemu r\u00f3wna\u0144 mo\u017cna r\u00f3wnie\u017c wykona\u0107 przywracanie danych.<\/p>\n<p><\/p>\n<p>* To nie jest \u015bcis\u0142a definicja, raczej opis.<\/p>\n<p><\/p>\n<h3 id=\"kak-vosstanavlivat-dannye\">Jak przywraca\u0107 dane<\/h3>\n<p><\/p>\n<p>Przywracanie jest potrzebne, gdy z n + m blok\u00f3w cz\u0119\u015b\u0107 blok\u00f3w jest niedost\u0119pna. Mog\u0105 to by\u0107 zar\u00f3wno bloki danych, jak i bloki kod\u00f3w nadmiarowo\u015bci. Brak blok\u00f3w danych i\/lub blok\u00f3w kod\u00f3w nadmiarowo\u015bci oznacza, \u017ce w powy\u017cszych r\u00f3wnaniach odpowiednie zmienne x i\/lub p s\u0105 nieznane.<\/p>\n<p><\/p>\n<p>R\u00f3wnania dla kod\u00f3w Reed-Solomona mo\u017cna traktowa\u0107 jako system r\u00f3wna\u0144, w kt\u00f3rym wszystkie warto\u015bci alfa, beta, gamma, delta s\u0105 sta\u0142e, wszystkie x i p, odpowiadaj\u0105ce dost\u0119pnym blokom, to znane zmienne, a pozosta\u0142e x i p to nieznane.<\/p>\n<p><\/p>\n<p>Na przyk\u0142ad, je\u015bli bloki danych 1, 2, 3 oraz blok kod\u00f3w nadmiarowo\u015bci 2 s\u0105 niedost\u0119pne, w\u00f3wczas dla i-tej grupy s\u0142\u00f3w b\u0119dzie nast\u0119puj\u0105cy system r\u00f3wna\u0144 (nieznane zaznaczone na czerwono):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/6f24804c3d34423f31796e43e9ae1203.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mamy system r\u00f3wna\u0144 sk\u0142adaj\u0105cy si\u0119 z 4 r\u00f3wna\u0144 z 4 niewiadomymi, co oznacza, \u017ce mo\u017cemy j\u0105 rozwi\u0105za\u0107 i odzyska\u0107 dane!<\/p>\n<p><\/p>\n<p>Z tego systemu r\u00f3wna\u0144 wynika szereg wniosk\u00f3w dotycz\u0105cych odzyskiwania danych dla kod\u00f3w Rida \u2014 Solomona (n blok\u00f3w danych, m blok\u00f3w kod\u00f3w nadmiarowych):<\/p>\n<p><\/p>\n<ul>\n<li>Dane mo\u017cna odzyska\u0107 przy utracie dowolnych m blok\u00f3w lub mniej. Przy utracie m+1 i wi\u0119cej blok\u00f3w danych nie mo\u017cna odzyska\u0107: nie mo\u017cna rozwi\u0105za\u0107 systemu m r\u00f3wna\u0144 z m + 1 niewiadomymi. <\/li>\n<li>Aby odzyska\u0107 nawet jeden blok danych, nale\u017cy u\u017cy\u0107 dowolnych n z pozosta\u0142ych blok\u00f3w, przy czym mo\u017cna wykorzysta\u0107 dowolny z kod\u00f3w nadmiarowych.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-eschyo-nuzhno-znat\">Co jeszcze nale\u017cy wiedzie\u0107<\/h3>\n<p><\/p>\n<p>W powy\u017cszym opisie omijam szereg wa\u017cnych pyta\u0144, kt\u00f3rych rozwa\u017cenie wymaga g\u0142\u0119bszego zanurzenia si\u0119 w matematyk\u0119. W szczeg\u00f3lno\u015bci, nic nie m\u00f3wi\u0119 o nast\u0119puj\u0105cych kwestiach:<\/p>\n<p><\/p>\n<ul>\n<li>System r\u00f3wna\u0144 dla kod\u00f3w Rida \u2014 Solomona musi mie\u0107 (jedno) rozwi\u0105zanie przy dowolnych kombinacjach niewiadomych (nie wi\u0119cej ni\u017c m niewiadomych). W oparciu o ten wym\u00f3g dobierane s\u0105 warto\u015bci alfa, beta, gamma i delta.<\/li>\n<li>System r\u00f3wna\u0144 nale\u017cy umie\u0107 automatycznie budowa\u0107 (w zale\u017cno\u015bci od tego, kt\u00f3re bloki s\u0105 niedost\u0119pne) i rozwi\u0105zywa\u0107.<\/li>\n<li>Nale\u017cy zbudowa\u0107 pole Galois: dla danego rozmiaru s\u0142owa umie\u0107 znajdowa\u0107 wynik dowolnej operacji (+, -, *, \/) dla dowolnych dw\u00f3ch element\u00f3w.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na ko\u0144cu artyku\u0142u znajduj\u0105 si\u0119 odno\u015bniki do literatury dotycz\u0105cej tych wa\u017cnych kwestii.<\/p>\n<p><\/p>\n<h3 id=\"vybor-n-i-m\">Wyb\u00f3r n i m<\/h3>\n<p><\/p>\n<p>Jak praktycznie wybra\u0107 n i m? W praktyce w systemach przechowywania danych kody nadmiarowe stosuje si\u0119 w celu oszcz\u0119dno\u015bci miejsca, dlatego m zawsze wybiera si\u0119 mniejsze od n. Ich konkretne warto\u015bci zale\u017c\u0105 od szeregu czynnik\u00f3w, w tym:<\/p>\n<p><\/p>\n<ul>\n<li>Niezawodno\u015b\u0107 przechowywania danych. Im wi\u0119ksze m, tym wi\u0119ksza liczba awarii dysk\u00f3w, kt\u00f3re mo\u017cna przetrwa\u0107, co oznacza wy\u017csz\u0105 niezawodno\u015b\u0107.<\/li>\n<li>Nadwy\u017cka przechowywania. Im wy\u017cszy stosunek m\/n, tym wy\u017csza b\u0119dzie nadwy\u017cka przechowywania, a system b\u0119dzie dro\u017cszy.<\/li>\n<li>Czas przetwarzania zapyta\u0144. Im wi\u0119ksza suma n + m, tym d\u0142u\u017cszy czas odpowiedzi na zapytania. Poniewa\u017c podczas odczytu danych (w trakcie odzyskiwania) trzeba odczyta\u0107 n blok\u00f3w z n r\u00f3\u017cnych dysk\u00f3w, czas odczytu b\u0119dzie okre\u015blany przez najwolniejszy dysk.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ponadto przechowywanie danych w wielu centrach danych narzuca dodatkowe ograniczenia na wyb\u00f3r n i m: w przypadku wy\u0142\u0105czenia jednego centrum danych dane nadal musz\u0105 by\u0107 dost\u0119pne do odczytu. Na przyk\u0142ad, przy przechowywaniu danych w 3 centrach danych musi by\u0107 spe\u0142niony warunek: m &gt;= n\/2, w przeciwnym razie mo\u017cliwa jest sytuacja, w kt\u00f3rej dane s\u0105 niedost\u0119pne do odczytu po wy\u0142\u0105czeniu jednego centrum danych.<\/p>\n<p><\/p>\n<h1 id=\"3-lrc--local-reconstruction-codes\">3. LRC \u2014 Kody lokalnej rekonstrukcji<\/h1>\n<p><\/p>\n<p>Aby przywr\u00f3ci\u0107 dane za pomoc\u0105 kod\u00f3w Reed-Solomon, nale\u017cy u\u017cy\u0107 n dowolnych blok\u00f3w danych. Jest to bardzo istotny minus dla rozproszonych system\u00f3w przechowywania danych, poniewa\u017c w przypadku przywracania danych z jednego uszkodzonego dysku b\u0119dziemy musieli odczyta\u0107 dane z wi\u0119kszo\u015bci pozosta\u0142ych, co powoduje znaczne dodatkowe obci\u0105\u017cenie dla dysk\u00f3w i sieci.<\/p>\n<p><\/p>\n<p>Najcz\u0119\u015bciej wyst\u0119puj\u0105ce b\u0142\u0119dy to niedost\u0119pno\u015b\u0107 jednego bloku danych z powodu awarii lub przeci\u0105\u017cenia jednego dysku. Czy mo\u017cna jako\u015b zmniejszy\u0107 nadmierne obci\u0105\u017cenie przy przywracaniu danych w takim (najcz\u0119stszym) przypadku? Okazuje si\u0119, \u017ce tak: specjalnie w tym celu istniej\u0105 kody nadmiarowo\u015bci LRC.<\/p>\n<p><\/p>\n<p>LRC (Localized Reconstruction Codes) to kody nadmiarowo\u015bci wymy\u015blone przez Microsoft do zastosowania w Windows Azure Storage. Idea LRC jest bardzo prosta: podzieli\u0107 wszystkie bloki danych na dwie (lub wi\u0119cej) grupy i oblicza\u0107 cz\u0119\u015b\u0107 blok\u00f3w kod\u00f3w nadmiarowo\u015bci dla ka\u017cdej grupy osobno. W ten spos\u00f3b cz\u0119\u015b\u0107 blok\u00f3w kod\u00f3w nadmiarowo\u015bci zostanie obliczona przy u\u017cyciu wszystkich blok\u00f3w danych (w LRC nazywaj\u0105 si\u0119 globalnymi kodami nadmiarowo\u015bci), a cz\u0119\u015b\u0107 \u2014 z u\u017cyciem jednej z dw\u00f3ch grup blok\u00f3w danych (nazywane lokalnymi kodami nadmiarowo\u015bci).<\/p>\n<p><\/p>\n<p>LRC oznaczane jest trzema numerami: n-r-l, gdzie n \u2014 liczba blok\u00f3w danych, r \u2014 liczba globalnych blok\u00f3w kod\u00f3w nadmiarowo\u015bci, l \u2014 liczba lokalnych blok\u00f3w kod\u00f3w nadmiarowo\u015bci. Aby odczyta\u0107 dane w przypadku niedost\u0119pno\u015bci jednego bloku danych, nale\u017cy odczyta\u0107 tylko n\/l blok\u00f3w \u2014 to w l razy mniej, ni\u017c w kodach Reed-Solomon.<\/p>\n<p><\/p>\n<p>Na przyk\u0142ad, rozwa\u017cmy schemat LRC 6-2-2. X1\u2013X6 \u2014 6 blok\u00f3w danych, P1, P2 \u2014 2 globalne bloki nadmiarowo\u015bci, P3, P4 \u2014 2 lokalne bloki nadmiarowo\u015bci.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/783f6d4b57b992c56385cdd07603cda8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bloki kod\u00f3w nadmiarowo\u015bci P1, P2 obliczane s\u0105 przy u\u017cyciu wszystkich blok\u00f3w danych. Blok kodu nadmiarowo\u015bci P3 \u2014 przy u\u017cyciu blok\u00f3w danych X1\u2013X3, blok kodu nadmiarowo\u015bci P4 \u2014 przy u\u017cyciu blok\u00f3w danych X4\u2013X6.<\/p>\n<p><\/p>\n<p>Pozosta\u0142e operacje wykonuje si\u0119 w LRC analogicznie do kod\u00f3w Reed-Solomona. R\u00f3wnania do obliczania liczby s\u0142\u00f3w w blokach kod\u00f3w nadmiarowych b\u0119d\u0105 nast\u0119puj\u0105ce:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kody nadmiarowo\u015bci: prosto o tym, jak bezpiecznie i tanio przechowywa\u0107 dane\" src=\"\/wp-content\/uploads\/2020\/07\/b32c8864fac0678014fc9a5abf490537.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aby dobra\u0107 liczby alfa, beta, gamma, delta, nale\u017cy spe\u0142ni\u0107 szereg warunk\u00f3w, kt\u00f3re zapewniaj\u0105 mo\u017cliwo\u015b\u0107 odzyskania danych (tj. rozwi\u0105zania systemu r\u00f3wna\u0144). Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w <noindex><a rel=\"nofollow\" href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/LRC12-cheng20webpage.pdf\">artyku\u0142<\/a><\/noindex>.<br \/>\nW praktyce do obliczania lokalnych kod\u00f3w nadmiarowych P3, P4 stosuje si\u0119 operacj\u0119 XOR. <\/p>\n<p><\/p>\n<p>Z systemu r\u00f3wna\u0144 dla LRC wynika szereg wniosk\u00f3w:<\/p>\n<p><\/p>\n<ul>\n<li>Aby odzyska\u0107 dowolny 1 blok danych, wystarczy odczyta\u0107 n\/l blok\u00f3w (n\/2 w naszym przyk\u0142adzie).<\/li>\n<li>Je\u015bli r + l blok\u00f3w jest niedost\u0119pnych, a wszystkie bloki nale\u017c\u0105 do jednej grupy, to danych nie mo\u017cna odzyska\u0107. Mo\u017cna to \u0142atwo wyja\u015bni\u0107 na przyk\u0142adzie. Niech b\u0119d\u0105 niedost\u0119pne bloki X1\u2013X3 i P3: to r + l bloki z jednej grupy, w naszym przypadku 4. W\u00f3wczas mamy system z 3 r\u00f3wna\u0144 i 4 niewiadomymi, kt\u00f3rego nie mo\u017cna rozwi\u0105za\u0107.<\/li>\n<li>We wszystkich pozosta\u0142ych przypadkach niedost\u0119pno\u015bci r + l blok\u00f3w (gdy z ka\u017cdej grupy dost\u0119pny jest przynajmniej jeden blok) dane w LRC mo\u017cna odzyska\u0107.<\/li>\n<\/ul>\n<p><\/p>\n<p>W ten spos\u00f3b LRC przewy\u017csza kody Reed-Solomona w odzyskiwaniu danych po pojedynczych b\u0142\u0119dach. W kodach Reed-Solomona, aby odzyska\u0107 nawet jeden blok danych, trzeba u\u017cy\u0107 n blok\u00f3w, a w LRC do odzyskania jednego bloku danych wystarczy wykorzysta\u0107 n\/l blok\u00f3w (n\/2 w naszym przyk\u0142adzie). Z drugiej strony, LRC ust\u0119puje kodom Reed-Solomona pod wzgl\u0119dem maksymalnej liczby dozwolonych b\u0142\u0119d\u00f3w. W powy\u017cszych przyk\u0142adach kody Reed-Solomona mog\u0105 odzyska\u0107 dane przy dowolnych 4 b\u0142\u0119dach, a dla LRC istniej\u0105 2 kombinacje 4 b\u0142\u0119d\u00f3w, kiedy danych nie mo\u017cna odzyska\u0107.<\/p>\n<p><\/p>\n<p>Co jest wa\u017cniejsze \u2014 zale\u017cy od konkretnej sytuacji, ale cz\u0119sto oszcz\u0119dno\u015b\u0107 nadmiarowego obci\u0105\u017cenia, jak\u0105 daje LRC, przewa\u017ca nad nieco mniejsz\u0105 niezawodno\u015bci\u0105 przechowywania.<\/p>\n<p><\/p>\n<h1 id=\"4-drugie-kody-izbytochnosti\">4. Inne kody nadmiarowe<\/h1>\n<p><\/p>\n<p>Opr\u00f3cz kod\u00f3w Reed-Solomona i LRC istnieje wiele innych kod\u00f3w nadmiarowych. R\u00f3\u017cne kody nadmiarowe korzystaj\u0105 z r\u00f3\u017cnej matematyki. Oto kilka innych kod\u00f3w nadmiarowych:<\/p>\n<p><\/p>\n<ul>\n<li>Kod nadmiarowy z u\u017cyciem operatora XOR. Operacja XOR wykonywana jest nad n blokami danych, co daje 1 blok kod\u00f3w nadmiarowych, czyli schemat n+1 (n blok\u00f3w danych, 1 kod nadmiarowy). Stosowany w <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/RAID#RAID_5\">RAID 5<\/a><\/noindex>, gdzie bloki danych i kody nadmiarowe s\u0105 cyklicznie zapisywane na wszystkie dyski macierzy.<\/li>\n<li>Algorytm even-odd oparty na operacji XOR. Pozwala zbudowa\u0107 2 bloki kod\u00f3w nadmiarowo\u015bci, czyli schemat n+2.<\/li>\n<li>Algorytm STAR oparty na operacji XOR. Pozwala zbudowa\u0107 3 bloki kod\u00f3w nadmiarowo\u015bci, czyli schemat n+3.<\/li>\n<li>Kody pyramidalne \u2014 kolejne kody nadmiarowo\u015bci od Microsoftu.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"5-ispolzovanie-v-yandekse\">5. Zastosowanie w Yandexie<\/h1>\n<p><\/p>\n<p>Szereg projekt\u00f3w infrastrukturalnych Yandexu wykorzystuje kody nadmiarowo\u015bci do niezawodnego przechowywania danych. Oto kilka przyk\u0142ad\u00f3w:<\/p>\n<p><\/p>\n<ul>\n<li>Wewn\u0119trzne magazyn obiektowy MDS, o kt\u00f3rym wspomina\u0142em na pocz\u0105tku artyku\u0142u.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311104\/\">YT<\/a><\/noindex> \u2014 system MapReduce Yandexu.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FwLvAuOSIOU\">YDB<\/a><\/noindex> (Yandex DataBase) \u2014 rozproszona baza danych newSQL.<\/li>\n<\/ul>\n<p><\/p>\n<p>W MDS u\u017cywane s\u0105 kody nadmiarowo\u015bci LRC, schemat 8-2-2. Dane z kodami nadmiarowo\u015bci zapisywane s\u0105 na 12 r\u00f3\u017cnych dyskach w r\u00f3\u017cnych serwerach w 3 r\u00f3\u017cnych DC: po 4 serwery w ka\u017cdym DC. Wi\u0119cej na ten temat przeczytacie w <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/311806\/\">artyku\u0142<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>W YT u\u017cywane s\u0105 zar\u00f3wno kody Reed-Solomn (schemat 6-3), kt\u00f3re by\u0142y zaimplementowane jako pierwsze, jak i kody nadmiarowo\u015bci LRC (schemat 12-2-2), przy czym LRC jest preferowanym sposobem przechowywania.<\/p>\n<p><\/p>\n<p>W YDB u\u017cywane s\u0105 kody nadmiarowo\u015bci oparte na even-odd (schemat 4-2). O kodach nadmiarowo\u015bci w YDB ju\u017c <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=dCpfGJ35kK8\">m\u00f3wiono na Highload<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Zastosowanie r\u00f3\u017cnych schemat\u00f3w kod\u00f3w nadmiarowo\u015bci wynika z r\u00f3\u017cnych wymaga\u0144, jakie stawiane s\u0105 systemom. Na przyk\u0142ad w MDS dane przechowywane za pomoc\u0105 LRC s\u0105 rozk\u0142adane od razu w 3 DC. Wa\u017cne jest, aby dane pozosta\u0142y dost\u0119pne do odczytu w przypadku awarii jednego DC, dlatego bloki musz\u0105 by\u0107 rozlokowane w DC w taki spos\u00f3b, aby w przypadku niedost\u0119pno\u015bci jakiegokolwiek DC liczba niedost\u0119pnych blok\u00f3w nie przekracza\u0142a dopuszczalnej. W schemacie 8-2-2 mo\u017cna umie\u015bci\u0107 po 4 bloki w ka\u017cdym DC, wtedy przy wy\u0142\u0105czaniu jakiegokolwiek DC 4 bloki b\u0119d\u0105 niedost\u0119pne, a dane mo\u017cna b\u0119dzie odczyta\u0107. Niezale\u017cnie od tego, jaki schemat wybierzemy przy rozmieszczaniu w 3 DC, w ka\u017cdym razie musi by\u0107 (r + l) \/ n &gt;= 0,5, co oznacza, \u017ce nadmiarowo\u015b\u0107 przechowywania b\u0119dzie wynosi\u0107 co najmniej 50%.<\/p>\n<p><\/p>\n<p>W YT sytuacja jest inna: ka\u017cdy klaster YT znajduje si\u0119 w jednym DC (r\u00f3\u017cne klastry w r\u00f3\u017cnych DC), dlatego nie ma takiego ograniczenia. Schemat 12-2-2 daje nadmiarowo\u015b\u0107 33%, co oznacza, \u017ce przechowywanie danych jest ta\u0144sze, a przy tym mog\u0105 one przetrwa\u0107 do 4 jednoczesnych awarii dysk\u00f3w, jak w schemacie MDS.<\/p>\n<p><\/p>\n<p>Istnieje jeszcze wiele szczeg\u00f3\u0142\u00f3w dotycz\u0105cych stosowania kod\u00f3w nadmiarowo\u015bci w systemach przechowywania i przetwarzania danych: niuanse przywracania danych, wp\u0142yw przywracania na czas realizacji zapyta\u0144, specyfika zapisywania danych itd. Planuj\u0119 osobno om\u00f3wi\u0107 te oraz inne aspekty zastosowania kod\u00f3w nadmiarowo\u015bci w praktyce, je\u015bli temat b\u0119dzie interesuj\u0105cy.<\/p>\n<p><\/p>\n<h1 id=\"6-ssylki\">6. Linki<\/h1>\n<p><\/p>\n<ol>\n<li>Seria artyku\u0142\u00f3w na temat kod\u00f3w Reed-Solomona i p\u00f3l Galois: <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 \/>\nS\u0105 one dost\u0119pnie w przyst\u0119pny spos\u00f3b, g\u0142\u0119biej omawiaj\u0105c matematyk\u0119.<\/li>\n<li>Artyku\u0142 od Microsoftu na temat 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 \/>\nW sekcji 2 kr\u00f3tko wyja\u015bniona jest teoria, nast\u0119pnie omawiane jest zastosowanie LRC w praktyce.<\/li>\n<li>Schemat even-odd: <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>Schemat STAR: <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>Kody piramidalne: <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>Kody nadmiarowo\u015bci w 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>Kody nadmiarowo\u015bci w 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>Kody nadmiarowo\u015bci w 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>\u0179r\u00f3d\u0142o: <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\/pl\/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=\"pl_PL\" \/>\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\/pl\/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\udd47Kody nadmiarowo\u015bci: prosto o tym, jak niezawodnie i tanio przechowywa\u0107 dane | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/pl\/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":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/87758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=87758"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/87758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/87759"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=87758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=87758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=87758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}