{"id":1364,"date":"2026-04-13T13:08:47","date_gmt":"2026-04-13T11:08:47","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1364"},"modified":"2026-04-20T13:14:05","modified_gmt":"2026-04-20T11:14:05","slug":"liczniki-i-statystyki","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/13\/liczniki-i-statystyki\/","title":{"rendered":"Liczniki i statystyki"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Systemy informatyczne bardzo rzadko dzia\u0142aj\u0105 wy\u0142\u0105cznie na danych \u201etu i teraz\u201d. W praktyce trzeba wiedzie\u0107, ile razy co\u015b si\u0119 wydarzy\u0142o, jak cz\u0119sto wyst\u0119puje b\u0142\u0105d, ilu u\u017cytkownik\u00f3w wykona\u0142o operacj\u0119, ile zapyta\u0144 obs\u0142u\u017cy\u0142 serwer albo ile element\u00f3w przesz\u0142o przez algorytm sortowania. Bez takich informacji trudno diagnozowa\u0107 problemy, planowa\u0107 wydajno\u015b\u0107 i ocenia\u0107 poprawno\u015b\u0107 dzia\u0142ania programu. W\u0142a\u015bnie dlatego tak du\u017ce znaczenie maj\u0105 <strong>Liczniki i statystyki<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#liczniki-i-statystyki-jako-podstawowy-mechanizm-obserwacji-dzialania-programu-i-systemu\">Liczniki i statystyki jako podstawowy mechanizm obserwacji dzia\u0142ania programu i systemu<\/a><ol><li><a href=\"#najprostszy-licznik-inkrementowany-przy-kazdym-zdarzeniu\">Najprostszy licznik inkrementowany przy ka\u017cdym zdarzeniu<\/a><\/li><li><a href=\"#liczniki-monotoniczne-i-resetowane-okresowo\">Liczniki monotoniczne i resetowane okresowo<\/a><\/li><\/ol><\/li><li><a href=\"#liczniki-i-statystyki-w-algorytmach-pozwalajace-mierzyc-zlozonosc-zamiast-zgadywac\">Liczniki i statystyki w algorytmach pozwalaj\u0105ce mierzy\u0107 z\u0142o\u017cono\u015b\u0107 zamiast zgadywa\u0107<\/a><ol><li><a href=\"#przyklad-licznika-porownan-w-sortowaniu-babelkowym\">Przyk\u0142ad licznika por\u00f3wna\u0144 w sortowaniu b\u0105belkowym<\/a><\/li><li><a href=\"#srednia-minimum-i-maksimum-jako-realna-ocena-dzialania\">\u015arednia, minimum i maksimum jako realna ocena dzia\u0142ania<\/a><\/li><li><a href=\"#odchylenie-standardowe-i-stabilnosc-systemu\">Odchylenie standardowe i stabilno\u015b\u0107 systemu<\/a><\/li><\/ol><\/li><li><a href=\"#liczniki-i-statystyki-w-bazach-danych-aplikacjach-webowych-i-monitoringu-produkcyjnym\">Liczniki i statystyki w bazach danych, aplikacjach webowych i monitoringu produkcyjnym<\/a><ol><li><a href=\"#prosty-licznik-logowan-uzytkownikow\">Prosty licznik logowa\u0144 u\u017cytkownik\u00f3w<\/a><\/li><li><a href=\"#sql-i-grupowanie-danych\">SQL i grupowanie danych<\/a><\/li><li><a href=\"#wspolczynnik-bledow-jako-wazniejsza-informacja-niz-sama-liczba-bledow\">Wsp\u00f3\u0142czynnik b\u0142\u0119d\u00f3w jako wa\u017cniejsza informacja ni\u017c sama liczba b\u0142\u0119d\u00f3w<\/a><\/li><\/ol><\/li><li><a href=\"#najczestsze-bledy-przy-projektowaniu-licznikow-i-analizie-danych\">Najcz\u0119stsze b\u0142\u0119dy przy projektowaniu licznik\u00f3w i analizie danych<\/a><\/li><li><a href=\"#krotkie-uwagi-praktyczne-z-pracy-z-systemami-produkcyjnymi\">Kr\u00f3tkie uwagi praktyczne z pracy z systemami produkcyjnymi<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-prosty-licznik-w-zmiennej-zawsze-wystarcza\">Czy prosty licznik w zmiennej zawsze wystarcza?<\/a><\/li><li><a href=\"#dlaczego-sama-srednia-czasu-wykonania-jest-niewystarczajaca\">Dlaczego sama \u015brednia czasu wykonania jest niewystarczaj\u0105ca?<\/a><\/li><li><a href=\"#czy-warto-liczyc-operacje-w-algorytmach-skoro-istnieje-notacja-o\">Czy warto liczy\u0107 operacje w algorytmach, skoro istnieje notacja O()<\/a><\/li><li><a href=\"#kiedy-licznik-powinien-byc-resetowany\">Kiedy licznik powinien by\u0107 resetowany?<\/a><\/li><li><a href=\"#czy-statystyki-w-bazie-danych-obciazaja-system\">Czy statystyki w bazie danych obci\u0105\u017caj\u0105 system?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"liczniki-i-statystyki-jako-podstawowy-mechanizm-obserwacji-dzialania-programu-i-systemu\">Liczniki i statystyki jako podstawowy mechanizm obserwacji dzia\u0142ania programu i systemu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Licznik to najprostsza struktura przechowuj\u0105ca informacj\u0119 o liczbie wyst\u0105pie\u0144 zdarzenia. Mo\u017ce zlicza\u0107 wej\u015bcia do funkcji, liczb\u0119 b\u0142\u0119d\u00f3w, liczb\u0119 operacji zapisu, odczytu albo wykonanych iteracji p\u0119tli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Statystyka jest poj\u0119ciem szerszym. Opr\u00f3cz samego zliczania obejmuje analiz\u0119 danych: \u015brednie, minimum, maksimum, median\u0119, odchylenie standardowe, rozk\u0142ad warto\u015bci czy trendy w czasie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce licznik odpowiada na pytanie \u201eile razy\u201d, a statystyka odpowiada r\u00f3wnie\u017c na pytania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kiedy najcz\u0119\u015bciej wyst\u0119puje problem,<\/li>\n\n\n\n<li>jaka jest typowa warto\u015b\u0107,<\/li>\n\n\n\n<li>czy wynik odbiega od normy,<\/li>\n\n\n\n<li>czy system dzia\u0142a stabilnie.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad prosty:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">je\u017celi serwer HTTP obs\u0142u\u017cy\u0142 12 000 \u017c\u0105da\u0144 w godzin\u0119, to licznik m\u00f3wi tylko o tej liczbie. Statystyka mo\u017ce dodatkowo pokaza\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u015bredni czas odpowiedzi: 120 ms,<\/li>\n\n\n\n<li>najwolniejsze zapytanie: 4300 ms,<\/li>\n\n\n\n<li>95 percentyl: 280 ms,<\/li>\n\n\n\n<li>liczba b\u0142\u0119d\u00f3w 500: 37.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To ju\u017c pozwala podejmowa\u0107 decyzje techniczne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"najprostszy-licznik-inkrementowany-przy-kazdym-zdarzeniu\">Najprostszy licznik inkrementowany przy ka\u017cdym zdarzeniu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stszy model wygl\u0105da tak:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>zmienna startuje od 0,<\/li>\n\n\n\n<li>przy wyst\u0105pieniu zdarzenia zwi\u0119kszamy j\u0105 o 1,<\/li>\n\n\n\n<li>okresowo odczytujemy warto\u015b\u0107.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Tabela z prostymi przyk\u0142adami:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int counter = 0; counter++; printf(\"%d\\n\", counter);<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>int counter = 0; counter++; std::cout &lt;&lt; counter &lt;&lt; std::endl;<\/code><\/td><\/tr><tr><td>Python<\/td><td><code>counter = 0<\/code><br><code>counter += 1<\/code><br><code>print(counter)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To wygl\u0105da banalnie, ale dok\u0142adnie na tej zasadzie dzia\u0142aj\u0105 tak\u017ce bardziej rozbudowane systemy monitoringu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"liczniki-monotoniczne-i-resetowane-okresowo\">Liczniki monotoniczne i resetowane okresowo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce spotyka si\u0119 dwa typy licznik\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Monotoniczny<\/strong> \u2013 tylko ro\u015bnie.<br>Przyk\u0142ad: ca\u0142kowita liczba zapyta\u0144 od uruchomienia us\u0142ugi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Okresowy<\/strong> \u2013 resetowany po czasie.<br>Przyk\u0142ad: liczba b\u0142\u0119d\u00f3w w ostatniej godzinie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To rozr\u00f3\u017cnienie ma znaczenie przy analizie wydajno\u015bci. Licznik monotoniczny dobrze nadaje si\u0119 do monitoringu d\u0142ugoterminowego, ale do szybkiego wykrywania awarii cz\u0119sto lepszy jest licznik w oknie czasowym.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"liczniki-i-statystyki-w-algorytmach-pozwalajace-mierzyc-zlozonosc-zamiast-zgadywac\">Liczniki i statystyki w algorytmach pozwalaj\u0105ce mierzy\u0107 z\u0142o\u017cono\u015b\u0107 zamiast zgadywa\u0107<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Na zaj\u0119ciach z algorytmiki cz\u0119sto m\u00f3wi si\u0119 o z\u0142o\u017cono\u015bci obliczeniowej O(n), O(n log n), O(n\u00b2). Problem zaczyna si\u0119 wtedy, gdy student zna teori\u0119, ale nie widzi jej w praktyce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najprostsza metoda to dodanie licznik\u00f3w operacji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiast zak\u0142ada\u0107, \u017ce algorytm \u201epowinien by\u0107 szybki\u201d, mo\u017cna policzy\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczb\u0119 por\u00f3wna\u0144,<\/li>\n\n\n\n<li>liczb\u0119 zamian element\u00f3w,<\/li>\n\n\n\n<li>liczb\u0119 wywo\u0142a\u0144 rekurencyjnych,<\/li>\n\n\n\n<li>liczb\u0119 alokacji pami\u0119ci.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To daje realny obraz dzia\u0142ania programu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"przyklad-licznika-porownan-w-sortowaniu-babelkowym\">Przyk\u0142ad licznika por\u00f3wna\u0144 w sortowaniu b\u0105belkowym<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sortowanie b\u0105belkowe jest dobrym przyk\u0142adem, bo wykonuje bardzo du\u017co por\u00f3wna\u0144.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int comparisons = 0;<\/code><br><code>for(int i=0;i&lt;n-1;i++)<\/code><br><code>for(int j=0;j&lt;n-i-1;j++){<\/code><br><code>comparisons++;<\/code><br><code>if(arr[j] &gt; arr[j+1]){ \/* zamiana *\/ }<\/code><br><code>}<\/code><\/td><\/tr><tr><td>Python<\/td><td><code>comparisons = 0<\/code><br><code>for i in range(n - 1):<\/code><br><code>for j in range(n - i - 1):<\/code><br><code>comparisons += 1<\/code><br><code>if arr[j] &gt; arr[j + 1]:<\/code><br><code>arr[j], arr[j + 1] = arr[j + 1], arr[j]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dla n = 100 liczba por\u00f3wna\u0144 mo\u017ce doj\u015b\u0107 do 4950.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To ju\u017c nie jest abstrakcja z podr\u0119cznika, tylko konkretna liczba.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"srednia-minimum-i-maksimum-jako-realna-ocena-dzialania\">\u015arednia, minimum i maksimum jako realna ocena dzia\u0142ania<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jedno uruchomienie programu nie daje wiarygodnego obrazu. System operacyjny, pami\u0119\u0107 podr\u0119czna procesora i obci\u0105\u017cenie komputera wp\u0142ywaj\u0105 na wynik.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego mierzy si\u0119 wiele pr\u00f3b.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119\u015bciej zapisuje si\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Miara<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>minimum<\/td><td>najlepszy mo\u017cliwy przypadek<\/td><\/tr><tr><td>maksimum<\/td><td>najgorszy przypadek<\/td><\/tr><tr><td>\u015brednia<\/td><td>typowe zachowanie<\/td><\/tr><tr><td>mediana<\/td><td>wynik odporny na skrajne warto\u015bci<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wz\u00f3r na \u015bredni\u0105 arytmetyczn\u0105:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Zastosowanie<\/th><\/tr><\/thead><tbody><tr><td><code>\\(\\overline{x} = \\frac{x_1 + x_2 + ... + x_n}{n}\\)<\/code><\/td><td>\u015bredni czas wykonania programu<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi czasy wykonania wynosz\u0105 10 ms, 12 ms, 11 ms, 200 ms, to sama \u015brednia mo\u017ce wprowadza\u0107 w b\u0142\u0105d. Mediana poka\u017ce znacznie lepiej typowe zachowanie programu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"odchylenie-standardowe-i-stabilnosc-systemu\">Odchylenie standardowe i stabilno\u015b\u0107 systemu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dwa systemy mog\u0105 mie\u0107 t\u0119 sam\u0105 \u015bredni\u0105, ale dzia\u0142a\u0107 zupe\u0142nie inaczej.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">System A:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">100 ms, 102 ms, 98 ms<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">System B:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">20 ms, 250 ms, 30 ms<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u015arednia mo\u017ce by\u0107 podobna, ale drugi system jest niestabilny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wz\u00f3r:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>\\(\\sigma = \\sqrt{\\frac{\\sum (x_i - \\overline{x})^2}{n}}\\)<\/code><\/td><td>odchylenie standardowe<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Im wi\u0119ksze odchylenie, tym mniej przewidywalne dzia\u0142anie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W systemach produkcyjnych stabilno\u015b\u0107 cz\u0119sto jest wa\u017cniejsza ni\u017c sama szybko\u015b\u0107.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"liczniki-i-statystyki-w-bazach-danych-aplikacjach-webowych-i-monitoringu-produkcyjnym\">Liczniki i statystyki w bazach danych, aplikacjach webowych i monitoringu produkcyjnym<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Na produkcji problemy kosztuj\u0105 czas i pieni\u0105dze. Je\u017celi sklep internetowy przez godzin\u0119 nie zapisuje zam\u00f3wie\u0144, strata jest realna. W\u0142a\u015bnie dlatego liczenie zdarze\u0144 nie jest dodatkiem, tylko podstaw\u0105 utrzymania systemu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119\u015bciej monitoruje si\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczb\u0119 zapyta\u0144 SQL,<\/li>\n\n\n\n<li>liczb\u0119 b\u0142\u0119d\u00f3w HTTP 500,<\/li>\n\n\n\n<li>liczb\u0119 timeout\u00f3w,<\/li>\n\n\n\n<li>liczb\u0119 logowa\u0144,<\/li>\n\n\n\n<li>liczb\u0119 nieudanych pr\u00f3b autoryzacji,<\/li>\n\n\n\n<li>czas odpowiedzi API,<\/li>\n\n\n\n<li>wykorzystanie pami\u0119ci RAM,<\/li>\n\n\n\n<li>u\u017cycie CPU.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prosty-licznik-logowan-uzytkownikow\">Prosty licznik logowa\u0144 u\u017cytkownik\u00f3w<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>logins = {}<\/code><br><code>user = \"anna\"<\/code><br><code>if user in logins:<\/code><br><code>logins[user] += 1<\/code><br><code>else:<\/code><br><code>logins[user] = 1<\/code><br><code>print(logins)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To ju\u017c jest statystyka per u\u017cytkownik, a nie pojedyncza zmienna.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Takie rozwi\u0105zanie p\u00f3\u017aniej rozwija si\u0119 do system\u00f3w raportowych i analitycznych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"sql-i-grupowanie-danych\">SQL i grupowanie danych<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bardzo du\u017ca cz\u0119\u015b\u0107 statystyk wykonywana jest bezpo\u015brednio w bazie danych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Technologia<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>SQL<\/td><td><code>SELECT status, COUNT(*)<\/code><br><code>FROM orders<\/code><br><code>GROUP BY status;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To pozwala policzy\u0107 liczb\u0119 zam\u00f3wie\u0144 w ka\u017cdym statusie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nowe,<\/li>\n\n\n\n<li>op\u0142acone,<\/li>\n\n\n\n<li>wys\u0142ane,<\/li>\n\n\n\n<li>anulowane.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiast r\u0119cznie analizowa\u0107 tysi\u0105ce rekord\u00f3w, baza robi to natychmiast.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wspolczynnik-bledow-jako-wazniejsza-informacja-niz-sama-liczba-bledow\">Wsp\u00f3\u0142czynnik b\u0142\u0119d\u00f3w jako wa\u017cniejsza informacja ni\u017c sama liczba b\u0142\u0119d\u00f3w<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">100 b\u0142\u0119d\u00f3w brzmi \u017ale, ale bez kontekstu nic nie znaczy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi system obs\u0142u\u017cy\u0142:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1000 \u017c\u0105da\u0144 \u2192 100 b\u0142\u0119d\u00f3w to katastrofa,<\/li>\n\n\n\n<li>10 000 000 \u017c\u0105da\u0144 \u2192 100 b\u0142\u0119d\u00f3w to bardzo dobry wynik.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego stosuje si\u0119 wska\u017aniki procentowe.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>\\(error\\ rate = \\frac{liczba\\ b\u0142\u0119d\u00f3w}{liczba\\ wszystkich\\ \u017c\u0105da\u0144} \\times 100\\%\\)<\/code><\/td><td>procent b\u0142\u0119dnych operacji<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">37 b\u0142\u0119d\u00f3w \/ 12 000 \u017c\u0105da\u0144 = 0,308%<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To ju\u017c daje sensown\u0105 informacj\u0119 operacyjn\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-bledy-przy-projektowaniu-licznikow-i-analizie-danych\">Najcz\u0119stsze b\u0142\u0119dy przy projektowaniu licznik\u00f3w i analizie danych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pierwszy b\u0142\u0105d to zliczanie wszystkiego bez celu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi system zapisuje 300 r\u00f3\u017cnych metryk, ale nikt ich nie analizuje, powstaje tylko szum informacyjny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drugi b\u0142\u0105d to brak kontekstu czasowego.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba 500 b\u0142\u0119d\u00f3w bez informacji \u201ena godzin\u0119\u201d, \u201ena dob\u0119\u201d albo \u201eod pocz\u0105tku dzia\u0142ania\u201d jest ma\u0142o u\u017cyteczna.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trzeci b\u0142\u0105d to brak synchronizacji w programach wsp\u00f3\u0142bie\u017cnych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W aplikacjach wielow\u0105tkowych zwyk\u0142e <code>counter++<\/code> mo\u017ce prowadzi\u0107 do b\u0142\u0119dnych wynik\u00f3w. Potrzebne s\u0105 operacje atomowe albo mechanizmy synchronizacji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad problemu:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dwa w\u0105tki jednocze\u015bnie zwi\u0119kszaj\u0105 warto\u015b\u0107 100 do 101, a wynik ko\u0144cowy nadal wynosi 101 zamiast 102.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Czwarty b\u0142\u0105d to analizowanie samej \u015bredniej.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u015arednia bez mediany, maksimum i percentyli bardzo cz\u0119sto ukrywa problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pi\u0105ty b\u0142\u0105d to brak retencji danych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi logi i metryki s\u0105 usuwane po 24 godzinach, analiza awarii z poprzedniego tygodnia staje si\u0119 niemo\u017cliwa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotkie-uwagi-praktyczne-z-pracy-z-systemami-produkcyjnymi\">Kr\u00f3tkie uwagi praktyczne z pracy z systemami produkcyjnymi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najbardziej u\u017cyteczne liczniki zwykle s\u0105 bardzo proste:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczba b\u0142\u0119d\u00f3w,<\/li>\n\n\n\n<li>liczba retry,<\/li>\n\n\n\n<li>liczba timeout\u00f3w,<\/li>\n\n\n\n<li>liczba restart\u00f3w procesu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To one najcz\u0119\u015bciej wskazuj\u0105 realny problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warto te\u017c od pocz\u0105tku ustali\u0107 jednostki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ms zamiast sekund,<\/li>\n\n\n\n<li>bajty zamiast \u201edu\u017co pami\u0119ci\u201d,<\/li>\n\n\n\n<li>procent zamiast og\u00f3lnego opisu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bez sp\u00f3jnych jednostek por\u00f3wnywanie wynik\u00f3w staje si\u0119 chaosem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dobr\u0105 praktyk\u0105 jest tak\u017ce rozdzielenie metryk technicznych i biznesowych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Techniczne:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU,<\/li>\n\n\n\n<li>RAM,<\/li>\n\n\n\n<li>latency,<\/li>\n\n\n\n<li>b\u0142\u0119dy HTTP.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Biznesowe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zam\u00f3wienia,<\/li>\n\n\n\n<li>p\u0142atno\u015bci,<\/li>\n\n\n\n<li>rejestracje,<\/li>\n\n\n\n<li>porzucone koszyki.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dopiero po\u0142\u0105czenie obu grup pokazuje pe\u0142ny obraz systemu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-prosty-licznik-w-zmiennej-zawsze-wystarcza\">Czy prosty licznik w zmiennej zawsze wystarcza?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie. W ma\u0142ych programach tak, ale w systemach wielow\u0105tkowych lub rozproszonych potrzebne s\u0105 operacje atomowe, bazy danych albo systemy monitoringu takie jak Prometheus czy Grafana.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-sama-srednia-czasu-wykonania-jest-niewystarczajaca\">Dlaczego sama \u015brednia czasu wykonania jest niewystarczaj\u0105ca?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bo pojedyncze bardzo wolne przypadki mog\u0105 by\u0107 ukryte przez dobre wyniki wi\u0119kszo\u015bci operacji. Dlatego analizuje si\u0119 tak\u017ce median\u0119, maksimum i percentyle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-warto-liczyc-operacje-w-algorytmach-skoro-istnieje-notacja-o\">Czy warto liczy\u0107 operacje w algorytmach, skoro istnieje notacja O()<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, bo notacja asymptotyczna opisuje trend, a licznik pokazuje realne zachowanie dla konkretnych danych wej\u015bciowych. Obie rzeczy si\u0119 uzupe\u0142niaj\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kiedy-licznik-powinien-byc-resetowany\">Kiedy licznik powinien by\u0107 resetowany?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To zale\u017cy od celu. Do analizy historycznej lepszy jest licznik monotoniczny. Do szybkiego wykrywania awarii lepiej sprawdza si\u0119 okno czasowe, na przyk\u0142ad ostatnie 15 minut.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-statystyki-w-bazie-danych-obciazaja-system\">Czy statystyki w bazie danych obci\u0105\u017caj\u0105 system?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, je\u015bli s\u0105 \u017ale zaprojektowane. Cz\u0119ste ci\u0119\u017ckie zapytania agreguj\u0105ce na du\u017cych tabelach mog\u0105 spowalnia\u0107 produkcj\u0119. Dlatego stosuje si\u0119 indeksy, tabele pomocnicze i przetwarzanie okresowe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Licznik sam w sobie jest prosty, ale jego znaczenie ro\u015bnie razem ze skal\u0105 systemu. W ma\u0142ym programie pomaga zrozumie\u0107 dzia\u0142anie algorytmu, a w du\u017cej aplikacji potrafi uratowa\u0107 godziny pracy i bardzo konkretne pieni\u0105dze. Dobrze zaprojektowana obserwowalno\u015b\u0107 zwykle zaczyna si\u0119 w\u0142a\u015bnie od kilku poprawnie policzonych warto\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Systemy informatyczne bardzo rzadko dzia\u0142aj\u0105 wy\u0142\u0105cznie na danych \u201etu i teraz\u201d. W praktyce trzeba wiedzie\u0107, ile razy co\u015b si\u0119 wydarzy\u0142o, jak cz\u0119sto wyst\u0119puje b\u0142\u0105d, ilu u\u017cytkownik\u00f3w wykona\u0142o operacj\u0119, ile zapyta\u0144 obs\u0142u\u017cy\u0142 serwer albo ile element\u00f3w przesz\u0142o przez algorytm sortowania. Bez takich informacji trudno diagnozowa\u0107 problemy, planowa\u0107 wydajno\u015b\u0107 i ocenia\u0107 poprawno\u015b\u0107 dzia\u0142ania programu. W\u0142a\u015bnie dlatego tak du\u017ce znaczenie maj\u0105 Liczniki i statystyki. Liczniki i statystyki jako podstawowy mechanizm obserwacji dzia\u0142ania programu i systemu Licznik to najprostsza struktura przechowuj\u0105ca informacj\u0119 o liczbie wyst\u0105pie\u0144 zdarzenia. Mo\u017ce zlicza\u0107 wej\u015bcia do funkcji, liczb\u0119 b\u0142\u0119d\u00f3w, liczb\u0119 operacji zapisu, odczytu albo wykonanych iteracji p\u0119tli. Statystyka jest poj\u0119ciem szerszym. Opr\u00f3cz samego zliczania obejmuje analiz\u0119 danych: \u015brednie, minimum, maksimum, median\u0119, odchylenie standardowe, rozk\u0142ad warto\u015bci czy trendy w czasie. W praktyce licznik odpowiada na pytanie \u201eile razy\u201d, a statystyka odpowiada r\u00f3wnie\u017c na pytania: Przyk\u0142ad prosty: je\u017celi serwer HTTP obs\u0142u\u017cy\u0142 12 000 \u017c\u0105da\u0144 w godzin\u0119, to licznik m\u00f3wi tylko o tej liczbie. Statystyka mo\u017ce dodatkowo pokaza\u0107: To ju\u017c pozwala podejmowa\u0107 decyzje techniczne. Najprostszy licznik inkrementowany przy ka\u017cdym zdarzeniu Najcz\u0119stszy model wygl\u0105da tak: Tabela z prostymi przyk\u0142adami: J\u0119zyk Kod C int counter = 0; counter++; printf(&#8222;%d\\n&#8221;, counter); C++ int counter = 0; counter++; std::cout &lt;&lt; counter &lt;&lt; std::endl; Python counter = 0counter += 1print(counter) To wygl\u0105da banalnie, ale dok\u0142adnie na tej zasadzie dzia\u0142aj\u0105 tak\u017ce bardziej rozbudowane systemy monitoringu. Liczniki monotoniczne i resetowane okresowo W praktyce spotyka si\u0119 dwa typy licznik\u00f3w. Monotoniczny \u2013 tylko ro\u015bnie.Przyk\u0142ad: ca\u0142kowita liczba zapyta\u0144 od uruchomienia us\u0142ugi. Okresowy \u2013 resetowany po czasie.Przyk\u0142ad: liczba b\u0142\u0119d\u00f3w w ostatniej godzinie. To rozr\u00f3\u017cnienie ma znaczenie przy analizie wydajno\u015bci. Licznik monotoniczny dobrze nadaje si\u0119 do monitoringu d\u0142ugoterminowego, ale do szybkiego wykrywania awarii cz\u0119sto lepszy jest licznik w oknie czasowym. Liczniki i statystyki w algorytmach pozwalaj\u0105ce mierzy\u0107 z\u0142o\u017cono\u015b\u0107 zamiast zgadywa\u0107 Na zaj\u0119ciach z algorytmiki cz\u0119sto m\u00f3wi si\u0119 o z\u0142o\u017cono\u015bci obliczeniowej O(n), O(n log n), O(n\u00b2). Problem zaczyna si\u0119 wtedy, gdy student zna teori\u0119, ale nie widzi jej w praktyce. Najprostsza metoda to dodanie licznik\u00f3w operacji. Zamiast zak\u0142ada\u0107, \u017ce algorytm \u201epowinien by\u0107 szybki\u201d, mo\u017cna policzy\u0107: To daje realny obraz dzia\u0142ania programu. Przyk\u0142ad licznika por\u00f3wna\u0144 w sortowaniu b\u0105belkowym Sortowanie b\u0105belkowe jest dobrym przyk\u0142adem, bo wykonuje bardzo du\u017co por\u00f3wna\u0144. J\u0119zyk Kod C int comparisons = 0;for(int i=0;i&lt;n-1;i++)for(int j=0;j&lt;n-i-1;j++){comparisons++;if(arr[j] &gt; arr[j+1]){ \/* zamiana *\/ }} Python comparisons = 0for i in range(n &#8211; 1):for j in range(n &#8211; i &#8211; 1):comparisons += 1if arr[j] &gt; arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j] Dla n = 100 liczba por\u00f3wna\u0144 mo\u017ce doj\u015b\u0107 do 4950. To ju\u017c nie jest abstrakcja z podr\u0119cznika, tylko konkretna liczba. \u015arednia, minimum i maksimum jako realna ocena dzia\u0142ania Jedno uruchomienie programu nie daje wiarygodnego obrazu. System operacyjny, pami\u0119\u0107 podr\u0119czna procesora i obci\u0105\u017cenie komputera wp\u0142ywaj\u0105 na wynik. Dlatego mierzy si\u0119 wiele pr\u00f3b. Najcz\u0119\u015bciej zapisuje si\u0119: Miara Znaczenie minimum najlepszy mo\u017cliwy przypadek maksimum najgorszy przypadek \u015brednia typowe zachowanie mediana wynik odporny na skrajne warto\u015bci Wz\u00f3r na \u015bredni\u0105 arytmetyczn\u0105: Wz\u00f3r Zastosowanie \\(\\overline{x} = \\frac{x_1 + x_2 + &#8230; + x_n}{n}\\) \u015bredni czas wykonania programu Je\u017celi czasy wykonania wynosz\u0105 10 ms, 12 ms, 11 ms, 200 ms, to sama \u015brednia mo\u017ce wprowadza\u0107 w b\u0142\u0105d. Mediana poka\u017ce znacznie lepiej typowe zachowanie programu. Odchylenie standardowe i stabilno\u015b\u0107 systemu Dwa systemy mog\u0105 mie\u0107 t\u0119 sam\u0105 \u015bredni\u0105, ale dzia\u0142a\u0107 zupe\u0142nie inaczej. System A: 100 ms, 102 ms, 98 ms System B: 20 ms, 250 ms, 30 ms \u015arednia mo\u017ce by\u0107 podobna, ale drugi system jest niestabilny. Wz\u00f3r: Wz\u00f3r Znaczenie \\(\\sigma = \\sqrt{\\frac{\\sum (x_i &#8211; \\overline{x})^2}{n}}\\) odchylenie standardowe Im wi\u0119ksze odchylenie, tym mniej przewidywalne dzia\u0142anie. W systemach produkcyjnych stabilno\u015b\u0107 cz\u0119sto jest wa\u017cniejsza ni\u017c sama szybko\u015b\u0107. Liczniki i statystyki w bazach danych, aplikacjach webowych i monitoringu produkcyjnym Na produkcji problemy kosztuj\u0105 czas i pieni\u0105dze. Je\u017celi sklep internetowy przez godzin\u0119 nie zapisuje zam\u00f3wie\u0144, strata jest realna. W\u0142a\u015bnie dlatego liczenie zdarze\u0144 nie jest dodatkiem, tylko podstaw\u0105 utrzymania systemu. Najcz\u0119\u015bciej monitoruje si\u0119: Prosty licznik logowa\u0144 u\u017cytkownik\u00f3w Przyk\u0142ad w Pythonie: J\u0119zyk Kod Python logins = {}user = &#8222;anna&#8221;if user in logins:logins[user] += 1else:logins[user] = 1print(logins) To ju\u017c jest statystyka per u\u017cytkownik, a nie pojedyncza zmienna. Takie rozwi\u0105zanie p\u00f3\u017aniej rozwija si\u0119 do system\u00f3w raportowych i analitycznych. SQL i grupowanie danych Bardzo du\u017ca cz\u0119\u015b\u0107 statystyk wykonywana jest bezpo\u015brednio w bazie danych. Przyk\u0142ad: Technologia Kod SQL SELECT status, COUNT(*)FROM ordersGROUP BY status; To pozwala policzy\u0107 liczb\u0119 zam\u00f3wie\u0144 w ka\u017cdym statusie: Zamiast r\u0119cznie analizowa\u0107 tysi\u0105ce rekord\u00f3w, baza robi to natychmiast. Wsp\u00f3\u0142czynnik b\u0142\u0119d\u00f3w jako wa\u017cniejsza informacja ni\u017c sama liczba b\u0142\u0119d\u00f3w 100 b\u0142\u0119d\u00f3w brzmi \u017ale, ale bez kontekstu nic nie znaczy. Je\u017celi system obs\u0142u\u017cy\u0142: Dlatego stosuje si\u0119 wska\u017aniki procentowe. Wz\u00f3r Znaczenie \\(error\\ rate = \\frac{liczba\\ b\u0142\u0119d\u00f3w}{liczba\\ wszystkich\\ \u017c\u0105da\u0144} \\times 100\\%\\) procent b\u0142\u0119dnych operacji Przyk\u0142ad: 37 b\u0142\u0119d\u00f3w \/ 12 000 \u017c\u0105da\u0144 = 0,308% To ju\u017c daje sensown\u0105 informacj\u0119 operacyjn\u0105. Najcz\u0119stsze b\u0142\u0119dy przy projektowaniu licznik\u00f3w i analizie danych Pierwszy b\u0142\u0105d to zliczanie wszystkiego bez celu. Je\u017celi system zapisuje 300 r\u00f3\u017cnych metryk, ale nikt ich nie analizuje, powstaje tylko szum informacyjny. Drugi b\u0142\u0105d to brak kontekstu czasowego. Liczba 500 b\u0142\u0119d\u00f3w bez informacji \u201ena godzin\u0119\u201d, \u201ena dob\u0119\u201d albo \u201eod pocz\u0105tku dzia\u0142ania\u201d jest ma\u0142o u\u017cyteczna. Trzeci b\u0142\u0105d to brak synchronizacji w programach wsp\u00f3\u0142bie\u017cnych. W aplikacjach wielow\u0105tkowych zwyk\u0142e counter++ mo\u017ce prowadzi\u0107 do b\u0142\u0119dnych wynik\u00f3w. Potrzebne s\u0105 operacje atomowe albo mechanizmy synchronizacji. Przyk\u0142ad problemu: dwa w\u0105tki jednocze\u015bnie zwi\u0119kszaj\u0105 warto\u015b\u0107 100 do 101, a wynik ko\u0144cowy nadal wynosi 101 zamiast 102. Czwarty b\u0142\u0105d to analizowanie samej \u015bredniej. \u015arednia bez mediany, maksimum i percentyli bardzo cz\u0119sto ukrywa problem. Pi\u0105ty b\u0142\u0105d to brak retencji danych. Je\u017celi logi i metryki s\u0105 usuwane po 24 godzinach, analiza awarii z poprzedniego tygodnia staje si\u0119 niemo\u017cliwa. Kr\u00f3tkie uwagi praktyczne z pracy z systemami produkcyjnymi Najbardziej u\u017cyteczne liczniki zwykle s\u0105 bardzo proste: To one najcz\u0119\u015bciej wskazuj\u0105 realny problem. Warto te\u017c od pocz\u0105tku ustali\u0107 jednostki: Bez sp\u00f3jnych jednostek por\u00f3wnywanie wynik\u00f3w staje si\u0119 chaosem. Dobr\u0105 praktyk\u0105 jest tak\u017ce rozdzielenie metryk technicznych i biznesowych. Techniczne: Biznesowe: Dopiero po\u0142\u0105czenie obu grup pokazuje pe\u0142ny obraz systemu. FAQ Czy prosty licznik w zmiennej zawsze wystarcza? Nie. W ma\u0142ych programach tak, ale w systemach wielow\u0105tkowych lub rozproszonych potrzebne s\u0105 operacje atomowe, bazy danych albo systemy monitoringu takie jak Prometheus czy Grafana. Dlaczego sama \u015brednia czasu wykonania jest niewystarczaj\u0105ca? Bo pojedyncze bardzo wolne przypadki mog\u0105 by\u0107 ukryte przez dobre wyniki wi\u0119kszo\u015bci operacji. Dlatego analizuje si\u0119 tak\u017ce median\u0119, maksimum i percentyle. Czy warto liczy\u0107 operacje w algorytmach, skoro istnieje notacja O() Tak, bo notacja asymptotyczna opisuje trend, a licznik pokazuje realne zachowanie dla konkretnych danych wej\u015bciowych. Obie rzeczy si\u0119 uzupe\u0142niaj\u0105. Kiedy licznik powinien by\u0107 resetowany? To zale\u017cy od celu. Do analizy historycznej lepszy jest licznik monotoniczny. Do szybkiego wykrywania awarii lepiej sprawdza si\u0119 okno czasowe, na przyk\u0142ad ostatnie 15 minut. Czy statystyki w bazie danych obci\u0105\u017caj\u0105 system? Tak, je\u015bli s\u0105 \u017ale zaprojektowane. Cz\u0119ste ci\u0119\u017ckie zapytania agreguj\u0105ce na du\u017cych tabelach mog\u0105 spowalnia\u0107 produkcj\u0119. Dlatego stosuje si\u0119 indeksy, tabele pomocnicze i przetwarzanie okresowe. Licznik sam w sobie jest prosty, ale jego znaczenie ro\u015bnie razem ze skal\u0105 systemu. W ma\u0142ym programie pomaga zrozumie\u0107 dzia\u0142anie algorytmu, a w du\u017cej aplikacji potrafi uratowa\u0107 godziny pracy i bardzo konkretne pieni\u0105dze. Dobrze zaprojektowana obserwowalno\u015b\u0107 zwykle zaczyna si\u0119 w\u0142a\u015bnie od kilku poprawnie policzonych warto\u015bci. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1365,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,1],"tags":[],"class_list":["post-1364","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kodowanie","category-poradnik"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1364"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1364\/revisions"}],"predecessor-version":[{"id":1366,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1364\/revisions\/1366"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1365"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}