{"id":79467,"date":"2020-04-27T07:42:23","date_gmt":"2020-04-27T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres"},"modified":"2020-04-27T07:42:23","modified_gmt":"2020-04-27T05:42:23","slug":"operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres","title":{"rendered":"Operat\u00edv analitika mikroszolg\u00e1ltat\u00e1sok architekt\u00far\u00e1ban: seg\u00edts\u00e9g \u00e9s \u00fatmutat\u00e1s a Postgres FDW-hez","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A mikroszervizes architekt\u00fara, ak\u00e1rcsak minden a vil\u00e1gon, rendelkezik el\u0151ny\u00f6kkel \u00e9s h\u00e1tr\u00e1nyokkal. Egyes folyamatok egyszer\u0171bb\u00e9 v\u00e1lnak, m\u00e1sok bonyolultabb\u00e1. Az \u00e1talakul\u00e1s sebess\u00e9ge \u00e9s a jobb sk\u00e1l\u00e1zhat\u00f3s\u00e1g \u00e9rdek\u00e9ben \u00e1ldozatokat kell hozni. Az egyik ilyen \u00e1ldozat a h\u00e1tt\u00e9rben l\u00e9v\u0151 analitika bonyolults\u00e1ga. Ha a monolitikus rendszerben az operat\u00edv analitik\u00e1t csup\u00e1n SQL lek\u00e9rdez\u00e9sekre lehet cs\u00f6kkenteni az analitikai replik\u00e1hoz, akkor a multiszervizes architekt\u00far\u00e1ban minden szolg\u00e1ltat\u00e1snak megvan a saj\u00e1t adatb\u00e1zisa, \u00e9s \u00fagy t\u0171nik, hogy egyetlen lek\u00e9rdez\u00e9ssel nem lehet megoldani a helyzetet (vagy m\u00e9gis?). Akik \u00e9rdeklik, hogyan oldottuk meg az operat\u00edv analitika probl\u00e9m\u00e1j\u00e1t a v\u00e1llalatunkn\u00e1l, \u00e9s hogyan tanultunk meg egy\u00fctt \u00e9lni ezzel a megold\u00e1ssal \u2014 \u00fcdv\u00f6z\u00f6lj\u00fck.<\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00edv analitika mikroszolg\u00e1ltat\u00e1sok architekt\u00far\u00e1ban: seg\u00edts\u00e9g \u00e9s \u00fatmutat\u00e1s a Postgres FDW-hez\" src=\"\/wp-content\/uploads\/2020\/04\/4296389f06d488999cc023dcaa3027f7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA nevem Pavel Sivash, a DomClickn\u00e9l dolgozom azon a csapatban, amely az analitikai adatcsoport fenntart\u00e1s\u00e1\u00e9rt felel\u0151s. Tev\u00e9kenys\u00e9g\u00fcnket meg lehetne hat\u00e1rozni, mint adat-informatikai m\u00e9rn\u00f6ks\u00e9get, de val\u00f3j\u00e1ban a feladatk\u00f6r\u00f6k sokkal sz\u00e9lesebb spektrumot \u00f6lelnek fel. Vannak standard adat-informatikai feladatok, mint p\u00e9ld\u00e1ul az ETL\/ELT, az adatelemz\u0151 eszk\u00f6z\u00f6k t\u00e1mogat\u00e1sa \u00e9s adapt\u00e1l\u00e1sa, valamint a saj\u00e1t eszk\u00f6zeink fejleszt\u00e9se. K\u00fcl\u00f6n\u00f6sen az operat\u00edv jelent\u00e9sekhez \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy \u201eelj\u00e1tszuk\u201d, hogy nek\u00fcnk monolitunk van, \u00e9s egy adatb\u00e1zist adunk az elemz\u0151knek, amelyben minden sz\u00fcks\u00e9ges adat megtal\u00e1lhat\u00f3. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>T\u00e9nyleg, k\u00fcl\u00f6nf\u00e9le lehet\u0151s\u00e9geket fontolgattunk. Fel lehetett volna \u00e9p\u00edteni egy teljes \u00e9rt\u00e9k\u0171 t\u00e1rol\u00f3t \u2013 meg is pr\u00f3b\u00e1ltuk, de \u0151szint\u00e9n sz\u00f3lva, nem siker\u00fclt j\u00f3l \u00f6sszehangolni a viszonylag gyakori logikai v\u00e1ltoz\u00e1sokkal a t\u00e1rol\u00f3 \u00e9p\u00edt\u00e9s\u00e9nek \u00e9s az abba val\u00f3 v\u00e1ltoztat\u00e1soknak a viszonylag lass\u00fa folyamat\u00e1t (ha valakinek siker\u00fclt, k\u00e9rem \u00edrja meg a kommentekben, hogyan). Mondhattuk volna az elemz\u0151knek: \"Figy sr\u00e1cok, tanuljatok meg python-t \u00e9s menjetek az analitikai replik\u00e1khoz\", de ez plusz k\u00f6vetelm\u00e9ny a munkaer\u0151 kiv\u00e1laszt\u00e1s\u00e1hoz, \u00e9s \u00fagy t\u0171nt, hogy ezt \u00e9rdemes lenne elker\u00fclni, ha lehets\u00e9ges. \u00dagy d\u00f6nt\u00f6tt\u00fcnk, hogy megpr\u00f3b\u00e1ljuk haszn\u00e1lni a FDW (Foreign Data Wrapper) technol\u00f3gi\u00e1t: l\u00e9nyeg\u00e9ben ez egy standard dblink, amely megtal\u00e1lhat\u00f3 a SQL szabv\u00e1nyban, de sokkal k\u00e9nyelmesebb interf\u00e9sszel. Ennek alapj\u00e1n k\u00e9sz\u00edtett\u00fcnk egy megold\u00e1st, ami v\u00e9g\u00fcl bev\u00e1lt, ezen \u00e1lltunk meg. Ennek r\u00e9szletei egy k\u00fcl\u00f6n cikk t\u00e9m\u00e1ja, tal\u00e1n t\u00f6bb is, mivel sok mindent szeretn\u00e9k elmondani: az adatb\u00e1zis s\u00e9m\u00e1k szinkroniz\u00e1l\u00e1s\u00e1t\u00f3l kezdve a hozz\u00e1f\u00e9r\u00e9s kezel\u00e9s\u00e9ig \u00e9s a szem\u00e9lyes adatok anonimiz\u00e1l\u00e1s\u00e1ig. Ezen k\u00edv\u00fcl sz\u00fcks\u00e9ges megjegyezni, hogy ez a megold\u00e1s nem helyettes\u00edti a val\u00f3di analitikai adatb\u00e1zisokat \u00e9s t\u00e1rol\u00f3kat, csup\u00e1n egy konkr\u00e9t feladatot old meg.<\/p>\n<p>Magas szinten ez \u00edgy n\u00e9z ki:<\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00edv analitika mikroszolg\u00e1ltat\u00e1sok architekt\u00far\u00e1ban: seg\u00edts\u00e9g \u00e9s \u00fatmutat\u00e1s a Postgres FDW-hez\" src=\"\/wp-content\/uploads\/2020\/04\/574da29dfdb40706afe9e817e789a61b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVan egy PostgreSQL adatb\u00e1zis, ahol a felhaszn\u00e1l\u00f3k t\u00e1rolhatj\u00e1k a munkaadatokat, \u00e9s ami a legfontosabb \u2013 ez az adatb\u00e1zis FDW-n kereszt\u00fcl csatlakozik az \u00f6sszes szolg\u00e1ltat\u00e1s analitikai replik\u00e1ihoz. Ez lehet\u0151v\u00e9 teszi, hogy lek\u00e9rdez\u00e9seket \u00edrjunk t\u00f6bb adatb\u00e1zishoz, f\u00fcggetlen\u00fcl att\u00f3l, hogy ez PostgreSQL, MySQL, MongoDB vagy b\u00e1rmi m\u00e1s (f\u00e1jl, API, ha v\u00e9letlen\u00fcl nincs megfelel\u0151 wrapper, \u00edrhatunk saj\u00e1tot). Nos, ezek szerint minden rendben van, szuper! Oszoljunk?<\/p>\n<p>Ha minden ilyen gyorsan \u00e9s egyszer\u0171en v\u00e9gz\u0151d\u00f6tt volna, val\u00f3sz\u00edn\u0171leg nem is lett volna cikk.<\/p>\n<p>Fontos vil\u00e1gosan meg\u00e9rteni, hogy a PostgreSQL hogyan kezeli a lek\u00e9rdez\u00e9seket t\u00e1voli szerverekhez. Ez logikusnak t\u0171nik, de gyakran nem figyelnek r\u00e1: a PostgreSQL a lek\u00e9rdez\u00e9st r\u00e9szletekre bontja, amelyeket a t\u00e1voli szervereken f\u00fcggetlen\u00fcl hajtanak v\u00e9gre, \u00f6sszegy\u0171jti ezeket az adatokat, \u00e9s a v\u00e9gs\u0151 sz\u00e1m\u00edt\u00e1sokat m\u00e1r \u00f6n\u00e1ll\u00f3an v\u00e9gzi, ez\u00e9rt a lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1s\u00e1nak sebess\u00e9ge nagyban f\u00fcgg att\u00f3l, hogyan \u00edrj\u00e1k meg. Meg kell jegyezni azt is: amikor az adatok egy t\u00e1voli szerverr\u0151l \u00e9rkeznek, m\u00e1r nincsenek indexek, nincs semmi, ami seg\u00edten\u00e9 a tervez\u0151t, \u00edgy csak mi tudunk neki seg\u00edteni \u00e9s \u00fatmutat\u00f3t adni. Pontosan err\u0151l szeretn\u00e9k r\u00e9szletesebben besz\u00e9lni.<\/p>\n<h1>Egyszer\u0171 lek\u00e9rdez\u00e9s \u00e9s a hozz\u00e1 tartoz\u00f3 terv<\/h1>\n<p>\nAhhoz, hogy megmutassuk, hogyan hajt v\u00e9gre a PostgreSQL lek\u00e9rdez\u00e9st egy 6 milli\u00f3s soros t\u00e1bl\u00e1n t\u00e1voli <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/dts-dronten\/\"   title=\"szerveren\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2589\">szerveren<\/a>, n\u00e9zz\u00fck meg az egyszer\u0171 tervet.<\/p>\n<pre><code class=\"sql\">magyar\u00e1zat elemez r\u00e9szletesen  \nSELECT count(1)\nFROM fdw_schema.table;\n\n\u00d6sszes\u00edt\u0151  (k\u00f6lts\u00e9g=418383.23..418383.24 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=3857.198..3857.198 sorok=1 ciklust=1)\n  Kimenet: count(1)\n  -&gt;  K\u00fcls\u0151 lek\u00e9rdez\u00e9s a fdw_schema.&quot;table&quot;  (k\u00f6lts\u00e9g=100.00..402376.14 sorok=6402838 sz\u00e9less\u00e9g=0) (val\u00f3s id\u0151=4.874..3256.511 sorok=6406868 ciklust=1)\n        Kimenet: &quot;table&quot;.id, &quot;table&quot;.is_active, &quot;table&quot;.meta, &quot;table&quot;.created_dt\n        T\u00e1voli SQL: SELECT NULL FROM fdw_schema.table\nTervez\u00e9si id\u0151: 0.986 ms\nV\u00e9grehajt\u00e1si id\u0151: 3857.436 ms<\/code><\/pre>\n<p>\nA VERBOSE utas\u00edt\u00e1s haszn\u00e1lat\u00e1val l\u00e1thatjuk a lek\u00e9rdez\u00e9st, amely a t\u00e1voli szerverre ker\u00fcl k\u00fcld\u00e9sre \u00e9s az eredm\u00e9nyek, amelyeket a tov\u00e1bbi feldolgoz\u00e1shoz kapunk (RemoteSQL sor).<\/p>\n<p>Menj\u00fcnk tov\u00e1bb, \u00e9s adjunk hozz\u00e1 a lek\u00e9rdez\u00e9s\u00fcnkh\u00f6z n\u00e9h\u00e1ny sz\u0171r\u0151t: egyet egy <b>boolean<\/b> mez\u0151n, egyet egy tartom\u00e1nyon bel\u00fcl, \u00e9s egyet <b>timestamp<\/b> a meta egyenl\u0151s\u00e9g alapj\u00e1n. <b>jsonb<\/b>.<\/p>\n<pre><code class=\"sql\">magyar\u00e1zat elemez r\u00e9szletesen\nSELECT count(1)\nFROM fdw_schema.table \nWHERE is_active is True\nAND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' \nAND CURRENT_DATE - INTERVAL '6 month'\nAND meta-&gt;&gt;'source' = 'test';\n\n\u00d6sszes\u00edt\u0151  (k\u00f6lts\u00e9g=577487.69..577487.70 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=27473.818..25473.819 sorok=1 ciklust=1)\n  Kimenet: count(1)\n  -&gt;  K\u00fcls\u0151 lek\u00e9rdez\u00e9s a fdw_schema.&quot;table&quot;  (k\u00f6lts\u00e9g=100.00..577469.21 sorok=7390 sz\u00e9less\u00e9g=0) (val\u00f3s id\u0151=31.369..25372.466 sorok=1360025 ciklust=1)\n        Kimenet: &quot;table&quot;.id, &quot;table&quot;.is_active, &quot;table&quot;.meta, &quot;table&quot;.created_dt\n        Sz\u0171r\u0151: ((&quot;table&quot;.is_active IS TRUE) AND ((&quot;table&quot;.meta -&gt;&gt; 'source'::text) = 'test'::text) AND (&quot;table&quot;.created_dt &gt;= (('now'::cstring)::date - '7 mons'::interval)) AND (&quot;table&quot;.created_dt &lt;= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))\n        Sz\u0171r\u0151k \u00e1ltal elt\u00e1vol\u00edtott sorok: 5046843\n        T\u00e1voli SQL: SELECT created_dt, is_active, meta FROM fdw_schema.table\nTervez\u00e9si id\u0151: 0.665 ms\nV\u00e9grehajt\u00e1si id\u0151: 27474.118 ms<\/code><\/pre>\n<p>\nItt rejlik az a pont, amelyre figyelmet kell ford\u00edtani a lek\u00e9rdez\u00e9sek \u00edr\u00e1sakor. A sz\u0171r\u0151k nem ker\u00fcltek \u00e1t a t\u00e1voli szerverre, ami azt jelenti, hogy a PostgreSQL az \u00f6sszes 6 milli\u00f3 sort ki kell nyernie a v\u00e9grehajt\u00e1shoz, hogy azt\u00e1n helyben sz\u0171rhess\u00fck (Filter sor) \u00e9s aggreg\u00e1lhassuk. A siker kulcsa, hogy a lek\u00e9rdez\u00e9st \u00fagy \u00edrjuk meg, hogy a sz\u0171r\u0151k \u00e1tker\u00fcljenek a t\u00e1voli g\u00e9pre, \u00e9s mi csak a sz\u00fcks\u00e9ges sorokat kapjuk \u00e9s aggreg\u00e1ljuk. <\/p>\n<h1>Ez egy kicsit furcsa dolog<\/h1>\n<p>\nA boolean t\u00edpusokkal minden egyszer\u0171. Az alap lek\u00e9rdez\u00e9sben a probl\u00e9ma az oper\u00e1tor miatt mer\u00fclt fel, <b>is<\/b>. Ha ezt kicser\u00e9lj\u00fck <b>=<\/b>, akkor a k\u00f6vetkez\u0151 eredm\u00e9nyt kapjuk:<\/p>\n<pre><code class=\"sql\">magyar\u00e1zat elemez r\u00e9szletesen\nSELECT count(1)\nFROM fdw_schema.table\nWHERE is_active = True\nAND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' \nAND CURRENT_DATE - INTERVAL '6 month'\nAND meta-&gt;&gt;'source' = 'test';\n\n\u00d6sszes\u00edt\u0151  (k\u00f6lts\u00e9g=508010.14..508010.15 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=19064.314..19064.314 sorok=1 ciklust=1)\n  Kimenet: count(1)\n  -&gt;  K\u00fcls\u0151 lek\u00e9rdez\u00e9s a fdw_schema.&quot;table&quot;  (k\u00f6lts\u00e9g=100.00..507988.44 sorok=8679 sz\u00e9less\u00e9g=0) (val\u00f3s id\u0151=33.035..18951.278 sorok=1360025 ciklust=1)\n        Kimenet: &quot;table&quot;.id, &quot;table&quot;.is_active, &quot;table&quot;.meta, &quot;table&quot;.created_dt\n        Sz\u0171r\u0151: (((&quot;table&quot;.meta -&gt;&gt; 'source'::text) = 'test'::text) AND (&quot;table&quot;.created_dt &gt;= (('now'::cstring)::date - '7 mons'::interval)) AND (&quot;table&quot;.created_dt &lt;= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))\n        Sz\u0171r\u0151k \u00e1ltal elt\u00e1vol\u00edtott sorok: 3567989\n        T\u00e1voli SQL: SELECT created_dt, meta FROM fdw_schema.table WHERE (is_active)\nTervez\u00e9si id\u0151: 0.834 ms\nV\u00e9grehajt\u00e1si id\u0151: 19064.534 ms<\/code><\/pre>\n<p>\nAhogy l\u00e1tja, a sz\u0171r\u0151 egy t\u00e1voli szerverre ker\u00fclt, \u00e9s a v\u00e9grehajt\u00e1si id\u0151 27 m\u00e1sodpercr\u0151l 19 m\u00e1sodpercre cs\u00f6kkent. <\/p>\n<p>\u00c9rdemes megjegyezni, hogy a m\u0171velet <b>is<\/b> k\u00fcl\u00f6nb\u00f6zik a m\u0171velett\u0151l <b>=<\/b> abban, hogy k\u00e9pes kezelni a Null \u00e9rt\u00e9ket. Ez azt jelenti, hogy <b>is not True<\/b> a sz\u0171r\u0151ben meg\u0151rzi a False \u00e9s Null \u00e9rt\u00e9keket, m\u00edg <b>!= True<\/b> csak a False \u00e9rt\u00e9keket hagyja meg. Ez\u00e9rt, amikor a m\u0171veletet <b>is not<\/b> helyettes\u00edtj\u00fck, k\u00e9t felt\u00e9telt kell \u00e1tadni a sz\u0171r\u0151ben OR oper\u00e1torral, p\u00e9ld\u00e1ul, <b>WHERE (col != True) OR (col is null)<\/b>.<\/p>\n<p>A boolean \u00e9rt\u00e9kekkel tiszt\u00e1ban vagyunk, l\u00e9pj\u00fcnk tov\u00e1bb. De el\u0151sz\u00f6r vissza\u00e1ll\u00edtjuk a logikai \u00e9rt\u00e9k sz\u0171r\u0151t az eredeti \u00e1llapot\u00e1ba, hogy f\u00fcggetlen\u00fcl megvizsg\u00e1lhassuk a t\u00f6bbi v\u00e1ltoz\u00e1s hat\u00e1s\u00e1t.<\/p>\n<h1>timestamptz? hz<\/h1>\n<p>\nGyakorlatilag gyakran k\u00eds\u00e9rletezn\u00fcnk kell azzal, hogyan lehet helyesen meg\u00edrni a lek\u00e9rdez\u00e9st, amelyben t\u00e1voli szerverek vesznek r\u00e9szt, majd ezt k\u00f6vet\u0151en keres\u00fcnk magyar\u00e1zatokat arra, mi\u00e9rt t\u00f6rt\u00e9nik \u00edgy. Nagyon kev\u00e9s inform\u00e1ci\u00f3 tal\u00e1lhat\u00f3 err\u0151l az interneten. K\u00eds\u00e9rleteink sor\u00e1n \u00e9szrevett\u00fck, hogy a fix d\u00e1tum szerinti sz\u0171r\u00e9s sim\u00e1n \u00e1tmegy a t\u00e1voli szerverre, de amikor dinamikusan szeretn\u00e9nk megadni a d\u00e1tumot, p\u00e9ld\u00e1ul now() vagy CURRENT_DATE, az nem t\u00f6rt\u00e9nik meg. P\u00e9ld\u00e1nkban hozz\u00e1adtunk egy olyan sz\u0171r\u0151t, hogy a created_at oszlop pontosan az elm\u00falt 1 h\u00f3napot tartalmazza (BETWEEN CURRENT_DATE - INTERVAL '7 month' AND CURRENT_DATE - INTERVAL '6 month'). Mit tett\u00fcnk ebben az esetben?<\/p>\n<pre><code class=\"sql\">magyar\u00e1zd el, elemezd r\u00e9szletesen\nSELECT count(1)\nFROM fdw_schema.table \nWHERE is_active is True\nAND created_dt &gt;= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 h\u00f3nap') \nAND created_dt &gt;'source' = 'teszt';\n\n\u00d6sszes\u00edt\u00e9s (k\u00f6lts\u00e9g=306875.17..306875.18 sorok=1 sz\u00e9less\u00e9g=8) (aktu\u00e1lis id\u0151=4789.114..4789.115 sorok=1 hurok=1)\n  Kimenet: count(1)\n  InitPlan 1 (visszaadja $0)\n    -&gt;  Eredm\u00e9ny (k\u00f6lts\u00e9g=0.00..0.02 sorok=1 sz\u00e9less\u00e9g=8) (aktu\u00e1lis id\u0151=0.007..0.008 sorok=1 hurok=1)\n          Kimenet: ((('most'::cstring)::d\u00e1tum)::timestamp id\u0151z\u00f3na szerint - '7 h\u00f3'::interval)\n  InitPlan 2 (visszaadja $1)\n    -&gt;  Eredm\u00e9ny (k\u00f6lts\u00e9g=0.00..0.02 sorok=1 sz\u00e9less\u00e9g=8) (aktu\u00e1lis id\u0151=0.002..0.002 sorok=1 hurok=1)\n          Kimenet: ((('most'::cstring)::d\u00e1tum)::timestamp id\u0151z\u00f3na szerint - '6 h\u00f3'::interval)\n  -&gt;  K\u00fclf\u00f6ldi beolvas\u00e1s a fdw_schema.\"table\"-on (k\u00f6lts\u00e9g=100.02..306874.86 sorok=105 sz\u00e9less\u00e9g=0) (aktu\u00e1lis id\u0151=23.475..4681.419 sorok=1360025 hurok=1)\n        Kimenet: \"table\".id, \"table\".is_active, \"table\".meta, \"table\".created_dt\n        Sz\u0171r\u0151: ((\"table\".is_active IS TRUE) AND ((\"table\".meta -&gt;&gt; 'source'::text) = 'teszt'::text))\n        Sz\u0171r\u0151 \u00e1ltal elt\u00e1vol\u00edtott sorok: 76934\n        T\u00e1voli SQL: SELECT is_active, meta FROM fdw_schema.table WHERE ((created_dt &gt;= $1::timestamp id\u0151z\u00f3na szerint)) AND ((created_dt &lt; $2::timestamp id\u0151z\u00f3na szerint))\nTerv id\u0151: 0.703 ms\nV\u00e9grehajt\u00e1si id\u0151: 4789.379 ms<\/code><\/pre>\n<p>\nA tervez\u0151nek el\u0151re jelezt\u00fck, hogy sz\u00e1molja ki a d\u00e1tumot a lek\u00e9rdez\u00e9sben, \u00e9s m\u00e1r egy k\u00e9sz v\u00e1ltoz\u00f3t adjunk \u00e1t a sz\u0171r\u0151ben. Ez a javaslat rendk\u00edv\u00fcli eredm\u00e9nyt hozott, a lek\u00e9rdez\u00e9s majdnem hatszor gyorsabb lett!<\/p>\n<p>Ism\u00e9t fontos, hogy figyelj\u00fcnk: az als\u00f3 lek\u00e9rdez\u00e9s adatt\u00edpusa ugyanaz kell, hogy legyen, mint a sz\u0171r\u00e9shez haszn\u00e1lt mez\u0151\u00e9, k\u00fcl\u00f6nben a tervez\u0151 \u00fagy d\u00f6nt, hogy mivel az adatt\u00edpusok elt\u00e9rnek, el\u0151sz\u00f6r az \u00f6sszes adatot le kell hozni, majd helyben sz\u0171rj\u00fck.<\/p>\n<p>Vissza\u00e1ll\u00edtjuk a d\u00e1tum sz\u0171r\u0151t az eredeti \u00e9rt\u00e9kre.<\/p>\n<h1>Freddy vs. Jsonb<\/h1>\n<p>\nEgy\u00e9bk\u00e9nt a logikai mez\u0151k \u00e9s a d\u00e1tumok m\u00e1r kell\u0151en felgyors\u00edtott\u00e1k a lek\u00e9rdez\u00e9s\u00fcnket, azonban m\u00e9g mindig volt egy m\u00e1sik adatt\u00edpus. A sz\u0171r\u00e9si k\u00fczdelem m\u00e9g mindig nem z\u00e1rult le, b\u00e1r itt is vannak sikerek. \u00cdme, \u00edgy siker\u00fclt \u00e1tadni a sz\u0171r\u0151t a <b>jsonb<\/b> mez\u0151 a t\u00e1voli szerverre.<\/p>\n<pre><code class=\"sql\">magyar\u00e1zd el, elemezd r\u00e9szletesen\nSELECT count(1)\nFROM fdw_schema.table \nWHERE is_active is True\nAND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 h\u00f3nap' \nAND CURRENT_DATE - INTERVAL '6 h\u00f3nap'\nAND meta @&gt; '{\"source\":\"teszt\"}'::jsonb;\n\n\u00d6sszes\u00edt\u00e9s (k\u00f6lts\u00e9g=245463.60..245463.61 sorok=1 sz\u00e9less\u00e9g=8) (aktu\u00e1lis id\u0151=6727.589..6727.590 sorok=1 hurok=1)\n  Kimenet: count(1)\n  -&gt;  K\u00fclf\u00f6ldi beolvas\u00e1s a fdw_schema.\"table\"-on (k\u00f6lts\u00e9g=1100.00..245459.90 sorok=1478 sz\u00e9less\u00e9g=0) (aktu\u00e1lis id\u0151=16.213..6634.794 sorok=1360025 hurok=1)\n        Kimenet: \"table\".id, \"table\".is_active, \"table\".meta, \"table\".created_dt\n        Sz\u0171r\u0151: ((\"table\".is_active IS TRUE) AND (\"table\".created_dt &gt;= (('most'::cstring)::d\u00e1tum - '7 h\u00f3'::interval)) AND (\"table\".created_dt  '{\"source\": \"teszt\"}'::jsonb))\nTerv id\u0151: 0.747 ms\nV\u00e9grehajt\u00e1si id\u0151: 6727.815 ms<\/code><\/pre>\n<p>\nA sz\u0171r\u0151oper\u00e1torok helyett a megl\u00e9t-oper\u00e1tort kell haszn\u00e1lni. <b>jsonb<\/b> m\u00e1s m\u00f3dban. 7 m\u00e1sodperc a kor\u00e1bbi 29 helyett. Ez eddig az egyetlen sikeres megold\u00e1s a sz\u0171r\u0151k \u00e1tad\u00e1s\u00e1ra <b>jsonb<\/b> egy t\u00e1voli szerverre, de itt fontos figyelembe venni egy korl\u00e1toz\u00e1st: a 9.6-os adatb\u00e1zis verzi\u00f3t haszn\u00e1ljuk, azonban \u00e1prilis v\u00e9g\u00e9ig tervez\u00fcnk befejezni az utols\u00f3 teszteket, \u00e9s \u00e1t\u00e1llni a 12-es verzi\u00f3ra. Amint friss\u00edt\u00fcnk, besz\u00e1molunk arr\u00f3l, hogy ez hogyan befoly\u00e1solta, hiszen sz\u00e1mos, nagy rem\u00e9nyekkel v\u00e1rt v\u00e1ltoz\u00e1s j\u00f6n: json_path, \u00faj CTE viselked\u00e9s, push down (amely a 10-es verzi\u00f3 \u00f3ta l\u00e9tezik). Nagyon szeretn\u00e9nk miel\u0151bb kipr\u00f3b\u00e1lni.<\/p>\n<h1>Fejezd be \u0151t<\/h1>\n<p>\nMegvizsg\u00e1ltuk, hogy minden egyes v\u00e1ltoz\u00e1s hogyan hat az egyes lek\u00e9rdez\u00e9sek sebess\u00e9g\u00e9re. Most n\u00e9zz\u00fck meg, mi t\u00f6rt\u00e9nik, amikor mindh\u00e1rom sz\u0171r\u0151t helyesen \u00edrj\u00e1k.<\/p>\n<pre><code class=\"sql\">magyar\u00e1zd el r\u00e9szletesen\nSELECT count(1)\nFROM fdw_schema.table \nWHERE is_active = True\nAND created_dt &gt;= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 h\u00f3nap') \nAND created_dt  '{\"source\":\"test\"}'::jsonb;\n\nAggreg\u00e1l\u00e1s  (k\u00f6lts\u00e9g=322041.51..322041.52 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=2278.867..2278.867 sorok=1 hurok=1)\n  Kimenet: count(1)\n  InitPlan 1 (visszat\u00e9r $0)\n    -e2&gt;  Eredm\u00e9ny  (k\u00f6lts\u00e9g=0.00..0.02 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=0.010..0.010 sorok=1 hurok=1)\n          Kimenet: ((('most'::cstring)::date)::timestamp with time zone - '7 h\u00f3nap'::interval)\n  InitPlan 2 (visszat\u00e9r $1)\n    -e2&gt;  Eredm\u00e9ny  (k\u00f6lts\u00e9g=0.00..0.02 sorok=1 sz\u00e9less\u00e9g=8) (val\u00f3s id\u0151=0.003..0.003 sorok=1 hurok=1)\n          Kimenet: ((('most'::cstring)::date)::timestamp with time zone - '6 h\u00f3nap'::interval)\n  -e2&gt;  K\u00fcls\u0151 beolvas\u00e1s fdw_schema.\"table\"  (k\u00f6lts\u00e9g=100.02..322041.41 sorok=25 sz\u00e9less\u00e9g=0) (val\u00f3s id\u0151=8.597..2153.809 sorok=1360025 hurok=1)\n        Kimenet: \"table\".id, \"table\".is_active, \"table\".meta, \"table\".created_dt\n        T\u00e1voli SQL: SELECT NULL FROM fdw_schema.table WHERE (is_active) AND ((created_dt &gt;= $1::timestamp with time zone)) AND ((created_dt  '{\"source\": \"test\"}'::jsonb))\nTervez\u00e9si id\u0151: 0.820 ms\nV\u00e9grehajt\u00e1si id\u0151: 2279.087 ms<\/code><\/pre>\n<p>\nIgen, a lek\u00e9rdez\u00e9s bonyolultabbnak t\u0171nik, ez egy k\u00e9nyszer\u0171 \u00e1ldozat, de a v\u00e9grehajt\u00e1si id\u0151 2 m\u00e1sodperc, ami t\u00f6bb mint t\u00edzszer gyorsabb! \u00c9s err\u0151l egy egyszer\u0171 lek\u00e9rdez\u00e9sr\u0151l besz\u00e9l\u00fcnk, viszonylag kis adathalmazon. Val\u00f3s lek\u00e9rdez\u00e9sekn\u00e9l ak\u00e1r t\u00f6bb sz\u00e1zszoros n\u00f6veked\u00e9st is tapasztaltunk.<\/p>\n<p>\u00d6sszegz\u00e9s\u00fcl: ha PostgreSQL-t haszn\u00e1lsz FDW-vel, mindig ellen\u0151rizd, hogy az \u00f6sszes sz\u0171r\u0151 a t\u00e1voli szerverre jut-e el, \u00e9s boldog leszel... Legal\u00e1bbis, am\u00edg el nem \u00e9red a k\u00fcl\u00f6nb\u00f6z\u0151 t\u00e1bl\u00e1k k\u00f6z\u00f6tti joinokat <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/\"   title=\"szerverek\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1482\">szerverek<\/a>. De ez m\u00e1r egy \u00fajabb cikk t\u00f6rt\u00e9nete.<\/p>\n<p>K\u00f6sz\u00f6n\u00f6m a figyelmet! \u00d6r\u00f6mmel v\u00e1rom a k\u00e9rd\u00e9seidet, megjegyz\u00e9seidet, valamint a tapasztalataidat a megjegyz\u00e9sek k\u00f6z\u00f6tt.<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/498018\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041e\u0434\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 \u043d\u0435\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0418 \u0432 \u0443\u0433\u043e\u0434\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438 \u043b\u0443\u0447\u0448\u0435\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0436\u0435\u0440\u0442\u0432\u044b. \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0435 \u0432\u0441\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u043a SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79467","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041e\u0434\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 \u043d\u0435\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u0441\u043b\u043e\u0436\u043d\u0435\u0435.\" \/>\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\/hu\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435: \u043f\u0336\u043e\u0336\u043d\u0336\u044f\u0336\u0442\u0336\u044c\u0336 \u0336\u0438\u0336 \u0336\u043f\u0336\u0440\u0336\u043e\u0336\u0441\u0336\u0442\u0336\u0438\u0336\u0442\u0336\u044c\u0336 \u043f\u043e\u043c\u043e\u0447\u044c \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c Postgres FDW | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041e\u0434\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 \u043d\u0435\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u0441\u043b\u043e\u0436\u043d\u0435\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres\" \/>\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-04-27T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-27T05:42:23+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\udd47Operat\u00edv elemz\u00e9s mikroszolg\u00e1ltat\u00e1s-architekt\u00far\u00e1ban: seg\u00edteni \u00e9s \u00fatbaigaz\u00edtani a Postgres FDW | ProHoster","description":"A mikroszolg\u00e1ltat\u00e1s-architekt\u00fara, ak\u00e1rcsak minden a vil\u00e1gon, rendelkezik el\u0151ny\u00f6kkel \u00e9s h\u00e1tr\u00e1nyokkal. N\u00e9h\u00e1ny folyamat egyszer\u0171bb\u00e9 v\u00e1lik, m\u00e1sok bonyolultabb\u00e1.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435: \u043f\u0336\u043e\u0336\u043d\u0336\u044f\u0336\u0442\u0336\u044c\u0336 \u0336\u0438\u0336 \u0336\u043f\u0336\u0440\u0336\u043e\u0336\u0441\u0336\u0442\u0336\u0438\u0336\u0442\u0336\u044c\u0336 \u043f\u043e\u043c\u043e\u0447\u044c \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c Postgres FDW | ProHoster","og:description":"\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043a\u0430\u043a \u0438 \u0432\u0441\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041e\u0434\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 \u043d\u0435\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u0441\u043b\u043e\u0436\u043d\u0435\u0435.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/operativnaya-analitika-v-mikroservisnoj-arhitekture-p%cc%b6o%cc%b6n%cc%b6ya%cc%b6t%cc%b6%cc%b6-%cc%b6i%cc%b6-%cc%b6p%cc%b6r%cc%b6o%cc%b6s%cc%b6t%cc%b6i%cc%b6t%cc%b6%cc%b6-pomoch-i-podskazat-postgres","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-04-27T05:42:23+00:00","article:modified_time":"2020-04-27T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79467","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 16:37:24","updated":"2026-02-09 21:38:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/79467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=79467"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/79467\/revisions"}],"predecessor-version":[{"id":159871,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/79467\/revisions\/159871"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/79468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=79467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=79467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=79467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}