{"id":91635,"date":"2020-08-15T19:42:23","date_gmt":"2020-08-15T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem"},"modified":"2020-08-15T19:42:23","modified_gmt":"2020-08-15T17:42:23","slug":"na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00dcdv\u00f6zl\u00f6k mindenkit! A nevem Nikolaj Golov. Kor\u00e1bban az Aviton\u00e1l dolgoztam, ahol hat \u00e9ven \u00e1t vezettem az Adatplatformot, teh\u00e1t mindenf\u00e9le adatb\u00e1zissal foglalkoztam: analitikai (Vertica, ClickHouse), folyamatos \u00e9s OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Ezen id\u0151szak alatt sok k\u00fcl\u00f6nf\u00e9le \u00e9s szokatlan adatb\u00e1zist meg\u00e9rtettem, valamint a haszn\u00e1latuk nem szabv\u00e1nyos eseteit is.<\/p>\n<p>Jelenleg a ManyChatn\u00e9l dolgozom. Gyakorlatilag egy startup \u2013 \u00faj, ambici\u00f3zus \u00e9s gyorsan n\u00f6vekv\u0151. Amikor el\u0151sz\u00f6r bel\u00e9ptem a c\u00e9ghez, felmer\u00fclt a klasszikus k\u00e9rd\u00e9s: \"Mit \u00e9rdemes most v\u00e1lasztania egy fiatal startupnak az adatb\u00e1zisok piac\u00e1r\u00f3l?\" <\/p>\n<p>Ebben a cikkben, amely az \u00e9n el\u0151ad\u00e1somra \u00e9p\u00fcl a <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">RIT++2020 online fesztiv\u00e1lon,<\/a><\/noindex>, v\u00e1laszolok erre a k\u00e9rd\u00e9sre. Az el\u0151ad\u00e1s vide\u00f3v\u00e1ltozata el\u00e9rhet\u0151 a <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/6a5df9b75ad435ebe88adf920ab9ea8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>2020-as k\u00f6ztudott adatb\u00e1zisokban.<\/h2>\n<p>\n2020 van, k\u00f6r\u00fcln\u00e9ztem, \u00e9s h\u00e1rom adatb\u00e1zist\u00edpust l\u00e1ttam. <\/p>\n<p>Az els\u0151 t\u00edpus \u2014 <b>klasszikus OLTP adatb\u00e1zisok:<\/b>PostgreSQL, SQL Server, Oracle, MySQL. Ezeket r\u00e9gen \u00edrt\u00e1k, de m\u00e9g mindig relev\u00e1nsak, mert a fejleszt\u0151i k\u00f6z\u00f6ss\u00e9g j\u00f3l ismeri \u0151ket.<\/p>\n<p>A m\u00e1sodik t\u00edpus \u2014 <b>a \"null\u00e1s\" adatb\u00e1zisok.<\/b>Ezek megpr\u00f3b\u00e1ltak elt\u00e1volodni a klasszikus mint\u00e1kt\u00f3l az SQL, a hagyom\u00e1nyos strukt\u00far\u00e1k \u00e9s az ACID elhagy\u00e1s\u00e1val, be\u00e9p\u00edtett sharding \u00e9s egy\u00e9b vonz\u00f3 funkci\u00f3k hozz\u00e1ad\u00e1s\u00e1val. P\u00e9ld\u00e1ul, ilyenek a Cassandra, MongoDB, Redis vagy Tarantool. Mind ezek a megold\u00e1sok valami alapvet\u0151en \u00fajat akartak k\u00edn\u00e1lni a piacnak, \u00e9s megtal\u00e1lt\u00e1k a saj\u00e1t niches\u00fcket, mert bizonyos feladatokn\u00e1l rendk\u00edv\u00fcl k\u00e9nyelmesek voltak. Ezt az adatb\u00e1zist NOSQL jelz\u0151term\u00e9kkel fogom megnevezni.<\/p>\n<p>A \"null\u00e1s\" korszak v\u00e9get \u00e9rt, a NOSQL adatb\u00e1zisokhoz hozz\u00e1szoktak, \u00e9s a vil\u00e1g, v\u00e9lem\u00e9nyem szerint, megtette a k\u00f6vetkez\u0151 l\u00e9p\u00e9st \u2014 a <b>managed (kezel\u0151) adatb\u00e1zisok fel\u00e9.<\/b>Ezeknek az adatb\u00e1zisoknak a magja azonos a klasszikus OLTP adatb\u00e1zisokkal vagy az \u00faj NoSQL megold\u00e1sokkal. De nincs sz\u00fcks\u00e9g\u00fck DBA-ra \u00e9s DevOps-ra, \u00e9s felh\u0151ben m\u0171k\u00f6dnek a kezelt hardveren. A fejleszt\u0151 sz\u00e1m\u00e1ra ez egy \"csak adatb\u00e1zis\", ami valahol m\u0171k\u00f6dik, az pedig, hogyan lett telep\u00edtve a szerverre, ki \u00e1ll\u00edtotta be a szervert \u00e9s ki friss\u00edti, senkit sem \u00e9rdekel.<\/p>\n<p>Ezekre az adatb\u00e1zisokra p\u00e9ld\u00e1k:<\/p>\n<ul>\n<li>AWS RDS \u2014 kezel\u0151 burkolat a PostgreSQL\/MySQL-hez.<\/li>\n<li>DynamoDB \u2014 az AWS dokumentum alap\u00fa adatb\u00e1zis\u00e1nak megfelel\u0151je, hasonl\u00f3 a Redishez \u00e9s a MongoDB-hez.<\/li>\n<li>Amazon Redshift \u2014 kezel\u0151 analitikai adatb\u00e1zis.<\/li>\n<\/ul>\n<p>\nAlapvet\u0151en ezek r\u00e9gi adatb\u00e1zisok, de kezel\u0151 k\u00f6rnyezetben emelt\u00e9k \u0151ket, an\u00e9lk\u00fcl, hogy sz\u00fcks\u00e9g lenne a hardverrel val\u00f3 foglalkoz\u00e1sra. <\/p>\n<p><i>Megjegyz\u00e9s. A p\u00e9ld\u00e1k az AWS k\u00f6rnyezet\u00e9b\u0151l val\u00f3k, de az anal\u00f3gjaik l\u00e9teznek a Microsoft Azure, a Google Cloud vagy a Yandex.Cloud k\u00f6rnyezet\u00e9ben is.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMi az \u00fajdons\u00e1g 2020-ban? Ebb\u0151l semmi.<\/p>\n<h2>A Serverless koncepci\u00f3.<\/h2>\n<p>\nVal\u00f3ban \u00faj a piacon 2020-ban \u2014 ez a serverless vagyis kiszolg\u00e1l\u00f3 n\u00e9lk\u00fcli megold\u00e1sok.<\/p>\n<p>Megpr\u00f3b\u00e1lom elmagyar\u00e1zni, mit jelent ez, egy hagyom\u00e1nyos szolg\u00e1ltat\u00e1s vagy backend-alkalmaz\u00e1s p\u00e9ld\u00e1j\u00e1n kereszt\u00fcl.<br \/>\nEgy hagyom\u00e1nyos backend-alkalmaz\u00e1s telep\u00edt\u00e9s\u00e9hez szervert v\u00e1s\u00e1rolunk vagy b\u00e9rel\u00fcnk, \u00e1tm\u00e1soljuk r\u00e1 a k\u00f3dot, k\u00f6zz\u00e9tessz\u00fck a kinyitott v\u00e9gpontot, \u00e9s rendszeresen fizet\u00fcnk a b\u00e9rl\u00e9s\u00e9rt, az elektromoss\u00e1g\u00e9rt \u00e9s az adatk\u00f6zponti szolg\u00e1ltat\u00e1sok\u00e9rt. Ez a standard s\u00e9ma.<\/p>\n<p>Van-e m\u00e1s m\u00f3d? A serverless szolg\u00e1ltat\u00e1sokkal lehets\u00e9ges.<\/p>\n<p>Mi a f\u00f3kusz ebben a megk\u00f6zel\u00edt\u00e9sben: nincs szerver, m\u00e9g virtu\u00e1lis p\u00e9ld\u00e1ny b\u00e9rlete sincs a felh\u0151ben. A szolg\u00e1ltat\u00e1s telep\u00edt\u00e9s\u00e9hez a k\u00f3dot (funkci\u00f3kat) \u00e1tm\u00e1soljuk a t\u00e1rol\u00f3ba, \u00e9s k\u00f6zz\u00e9tessz\u00fck a kinyitott v\u00e9gpontot. Ezut\u00e1n csak fizet\u00fcnk minden egyes funkci\u00f3h\u00edv\u00e1s\u00e9rt, teljesen figyelmen k\u00edv\u00fcl hagyva a hardvert, ahol v\u00e9grehajtj\u00e1k.<\/p>\n<p>Megpr\u00f3b\u00e1lom szeml\u00e9ltetni ezt a megk\u00f6zel\u00edt\u00e9st k\u00e9peken.<br \/>\n<img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Hagyom\u00e1nyos telep\u00edt\u00e9s<\/b>. Van egy szolg\u00e1ltat\u00e1sunk meghat\u00e1rozott terhel\u00e9ssel. K\u00e9t p\u00e9ld\u00e1nyt ind\u00edtunk: fizikai szervereket vagy AWS p\u00e9ld\u00e1nyokat. Ezekre a p\u00e9ld\u00e1nyokra ir\u00e1nyulnak a k\u00fcls\u0151 k\u00e9r\u00e9sek, amelyeket ott dolgoznak fel. <\/p>\n<p>Ahogy a k\u00e9pen l\u00e1that\u00f3, a szerverek elt\u00e9r\u0151 m\u00f3don vannak kihaszn\u00e1lva. Az egyik 100%-ban kihaszn\u00e1lt, ott k\u00e9t k\u00e9r\u00e9s van, m\u00edg a m\u00e1sik csak 50%-ban \u2014 r\u00e9szben inakt\u00edv. Ha nem h\u00e1rom k\u00e9r\u00e9s \u00e9rkezik, hanem 30, akkor az eg\u00e9sz rendszer nem tud megbirk\u00f3zni a terhel\u00e9ssel, \u00e9s elkezd lassulni.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Serverless telep\u00edt\u00e9s<\/b>. Serverless k\u00f6rnyezetben egy ilyen szolg\u00e1ltat\u00e1snak nincsenek p\u00e9ld\u00e1nyai \u00e9s szerverei. Van egy bizonyos tartom\u00e1ny a felf\u0171t\u00f6tt er\u0151forr\u00e1sokb\u00f3l \u2014 apr\u00f3 el\u0151re konfigur\u00e1lt Docker-kont\u00e9nerek a funkci\u00f3 k\u00f3dj\u00e1val. A rendszer k\u00fcls\u0151 k\u00e9r\u00e9seket kap, \u00e9s minden egyes k\u00e9r\u00e9shez a serverless keretrendszer egy kis kont\u00e9nert ind\u00edt el a k\u00f3ddal: ez az adott k\u00e9r\u00e9st kezeli \u00e9s elpuszt\u00edtja a kont\u00e9nert.<\/p>\n<p>Egy k\u00e9r\u00e9s \u2014 egy ind\u00edtott kont\u00e9ner, 1000 k\u00e9r\u00e9s \u2014 1000 kont\u00e9ner. A fizikai szerverekre t\u00f6rt\u00e9n\u0151 telep\u00edt\u00e9s m\u00e1r a felh\u0151szolg\u00e1ltat\u00f3 munk\u00e1ja. Ez teljesen rejtve van a serverless keretrendszer el\u0151tt. Ebben a koncepci\u00f3ban minden h\u00edv\u00e1s\u00e9rt fizet\u00fcnk. P\u00e9ld\u00e1ul, ha egy h\u00edv\u00e1s \u00e9rkezik naponta \u2014 egy h\u00edv\u00e1s\u00e9rt fizet\u00fcnk, ha egy milli\u00f3 \u00e9rkezik percenk\u00e9nt \u2014 egy milli\u00f3\u00e9rt. Vagy m\u00e1sodpercenk\u00e9nt, ez is el\u0151fordul.<\/p>\n<p>A k\u00f6zz\u00e9t\u00e9teli koncepci\u00f3 a serverless funkci\u00f3hoz illeszkedik egy stateless szolg\u00e1ltat\u00e1s sz\u00e1m\u00e1ra. Ha azonban \u00e1llapotot (state) kezel\u0151 szolg\u00e1ltat\u00e1sra van sz\u00fcks\u00e9g, akkor az adatb\u00e1zist hozz\u00e1adjuk a szolg\u00e1ltat\u00e1shoz. Ilyen esetben, amikor az \u00e1llapot kezel\u00e9s\u00e9r\u0151l van sz\u00f3, minden statefull funkci\u00f3 egyszer\u0171en \u00edr \u00e9s olvas az adatb\u00e1zisb\u00f3l. R\u00e1ad\u00e1sul az adatb\u00e1zis b\u00e1rmely a cikk elej\u00e9n le\u00edrt h\u00e1rom t\u00edpus\u00e1b\u00f3l sz\u00e1rmazhat.<\/p>\n<p>Milyen \u00e1ltal\u00e1nos korl\u00e1toz\u00e1sok vonatkoznak az \u00f6sszes ilyen adatb\u00e1zisra? Ez a folyamatosan haszn\u00e1lt felh\u0151 vagy fizikai szerver (vagy t\u00f6bb szerver) k\u00f6lts\u00e9ge. Mindegy, hogy klasszikus adatb\u00e1zist haszn\u00e1lunk vagy managed megold\u00e1st, van-e DevOps \u00e9s adminisztr\u00e1tor vagy nincs, akkor is 24\/7 fizet\u00fcnk a hardver\u00e9rt, az \u00e1ram\u00e9rt \u00e9s az adatk\u00f6zpont b\u00e9rl\u00e9s\u00e9\u00e9rt. Ha klasszikus adatb\u00e1zisunk van, akkor a master \u00e9s a slave ut\u00e1n is fizet\u00fcnk. Ha nagy terhel\u00e9s\u0171 sharded adatb\u00e1zis \u2014 akkor 10, 20 vagy 30 szerver ut\u00e1n fizet\u00fcnk, \u00e9s ez folyamatosan.<\/p>\n<p>A k\u00f6lts\u00e9gszerkezetben folyamatosan fenntartott szerverek megl\u00e9t\u00e9t kor\u00e1bban elker\u00fclhetetlen rosszk\u00e9nt fogt\u00e1k fel. Az \u00e1tlagos adatb\u00e1zisoknak m\u00e1s neh\u00e9zs\u00e9geik is vannak, mint p\u00e9ld\u00e1ul a kapcsolatok sz\u00e1m\u00e1nak korl\u00e1toz\u00e1sa, a sk\u00e1l\u00e1z\u00e1s korl\u00e1toz\u00e1sa, a geoelhelyezett konszenzus \u2014 ezeket bizonyos adatb\u00e1zisokban valamilyen m\u00f3don meg lehet oldani, de nem mind egyszerre, \u00e9s nem is t\u00f6k\u00e9letesen.<\/p>\n<h2>Serverless adatb\u00e1zis \u2014 elm\u00e9let<\/h2>\n<p>\nA 2020-as k\u00e9rd\u00e9s: lehet-e az adatb\u00e1zist is serverless megold\u00e1sra \u00e1t\u00e1ll\u00edtani? Mindenki hallott a serverless backendr\u0151l\u2026 de pr\u00f3b\u00e1ljuk meg az adatb\u00e1zist is serverless megold\u00e1sra \u00e1t\u00e1ll\u00edtani!<\/p>\n<p>Ez furcs\u00e1n hangzik, mert az adatb\u00e1zis egy statefull szolg\u00e1ltat\u00e1s, ami nem pontosan illeszkedik a serverless infrastrukt\u00far\u00e1hoz. Ugyanakkor az adatb\u00e1zis \u00e1llapota is nagyon nagy: gigab\u00e1jtok, terab\u00e1jtok, m\u00edg az analitikai adatb\u00e1zisokban ak\u00e1r petab\u00e1jtok is. Ezt nem olyan egyszer\u0171 k\u00f6nny\u0171s\u00faly\u00fa Docker kont\u00e9nerekben futtatni.<\/p>\n<p>M\u00e1sr\u00e9szr\u0151l szinte minden modern adatb\u00e1zis hatalmas mennyis\u00e9g\u0171 logik\u00e1t \u00e9s komponenst tartalmaz: tranzakci\u00f3k, adatintegrit\u00e1s biztos\u00edt\u00e1sa, elj\u00e1r\u00e1sok, rel\u00e1ci\u00f3s f\u00fcgg\u0151s\u00e9gek \u00e9s sok logika. Az adatb\u00e1zis logik\u00e1j\u00e1nak el\u00e9g nagy r\u00e9sze meglehet\u0151sen kis \u00e1llapot\u00fa. A gigab\u00e1jtok \u00e9s terab\u00e1jtok k\u00f6zvetlen\u00fcl csak az adatb\u00e1zis logik\u00e1j\u00e1nak kis r\u00e9sz\u00e9n\u00e9l haszn\u00e1latosak, amely k\u00f6zvetlen\u00fcl kapcsol\u00f3dik a lek\u00e9rdez\u00e9sek v\u00e9grehajt\u00e1s\u00e1hoz.<\/p>\n<p>Ennek megfelel\u0151en az \u00f6tlet: ha a logika egy r\u00e9sze lehet\u0151v\u00e9 teszi a stateless v\u00e9grehajt\u00e1st, mi\u00e9rt ne osztan\u00e1nk fel az adatb\u00e1zist stateful \u00e9s stateless r\u00e9szekre.<\/p>\n<h2>Serverless az OLAP megold\u00e1sokra<\/h2>\n<p>\nN\u00e9zz\u00fck meg, hogyan n\u00e9zhet ki az adatb\u00e1zis stateful \u00e9s stateless r\u00e9szekre val\u00f3 feloszt\u00e1sa gyakorlati p\u00e9ld\u00e1kon.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>P\u00e9ld\u00e1ul van egy analitikai adatb\u00e1zisunk<\/b>: k\u00fcls\u0151 adatok (a bal oldali piros hengert), ETL-procesz, amely adatokat t\u00f6lt be az adatb\u00e1zisba, \u00e9s egy elemz\u0151, aki SQL-lek\u00e9rdez\u00e9seket k\u00fcld az adatb\u00e1zishoz. Ez egy klasszikus adatt\u00e1rol\u00e1si s\u00e9ma. <\/p>\n<p>Ebben a s\u00e9ma szerint felt\u00e9telezhet\u0151en egyszer v\u00e9gzik el az ETL-t. Ezut\u00e1n folyamatosan kell fizetni a szerverek\u00e9rt, amelyeken az ETL \u00e1ltal felt\u00f6lt\u00f6tt adatokat tartalmaz\u00f3 adatb\u00e1zis fut, hogy legyen mibe k\u00fcldeni a lek\u00e9rdez\u00e9seket. <\/p>\n<p>N\u00e9zz\u00fck meg az alternat\u00edv megk\u00f6zel\u00edt\u00e9st, amelyet az AWS Athena Serverless adatb\u00e1zisban val\u00f3s\u00edtanak meg. Itt nincs folyamatosan kijel\u00f6lt hardver, amelyen a felt\u00f6lt\u00f6tt adatok t\u00e1rol\u00f3dnak. Ehelyett:<\/p>\n<ul>\n<li>A felhaszn\u00e1l\u00f3 SQL-lek\u00e9rdez\u00e9st k\u00fcld az Athen\u00e1hoz. Az Athena optimaliz\u00e1l\u00f3ja elemzi az SQL-lek\u00e9rdez\u00e9st, \u00e9s a metaadat-t\u00e1rol\u00f3ban (Metadata) megkeresi a k\u00e9rd\u00e9s v\u00e9grehajt\u00e1s\u00e1hoz sz\u00fcks\u00e9ges konkr\u00e9t adatokat.<\/li>\n<li>Az optimaliz\u00e1l\u00f3 a begy\u0171jt\u00f6tt adatok alapj\u00e1n a sz\u00fcks\u00e9ges adatokat kiemeli a k\u00fcls\u0151 forr\u00e1sokb\u00f3l egy ideiglenes t\u00e1rol\u00f3ba (ideiglenes adatb\u00e1zis).<\/li>\n<li>Az ideiglenes t\u00e1rol\u00f3ban a felhaszn\u00e1l\u00f3 SQL-lek\u00e9rdez\u00e9se v\u00e9grehajt\u00f3dik, az eredm\u00e9ny visszat\u00e9r a felhaszn\u00e1l\u00f3hoz. <\/li>\n<li>Az ideiglenes t\u00e1rol\u00f3 \u00fcr\u00edt\u00e9se, az er\u0151forr\u00e1sok felszabadulnak.<\/li>\n<\/ul>\n<p>Ebben az architekt\u00far\u00e1ban csak a lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1s\u00e1\u00e9rt fizet\u00fcnk. Nincsenek lek\u00e9rdez\u00e9sek \u2014 nincsenek k\u00f6lts\u00e9gek.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz egy m\u0171k\u00f6d\u0151 megk\u00f6zel\u00edt\u00e9s, \u00e9s nemcsak az Athena Serverlessben, hanem a Redshift Spectrum (az AWS-ben) is megval\u00f3sul.<\/p>\n<p>Az Athena p\u00e9ld\u00e1j\u00e1n l\u00e1that\u00f3, hogy a Serverless adatb\u00e1zis val\u00f3s lek\u00e9rdez\u00e9seken m\u0171k\u00f6dik, ak\u00e1r t\u00f6bb t\u00edz vagy sz\u00e1z terab\u00e1jtnyi adatsorral. Sz\u00e1z terab\u00e1jthoz sz\u00e1z szerverre lenne sz\u00fcks\u00e9g, de nek\u00fcnk nem kell fizetn\u00fcnk \u00e9rt\u00fck \u2014 mi a lek\u00e9rdez\u00e9sek\u00e9rt fizet\u00fcnk. Minden lek\u00e9rdez\u00e9s sebess\u00e9ge (nagyon) alacsony a speci\u00e1lis analitikai adatb\u00e1zisok, p\u00e9ld\u00e1ul a Vertica-hoz k\u00e9pest, de \u00edgy nem kell fizetn\u00fcnk a le\u00e1ll\u00e1si id\u0151szakok\u00e9rt.<\/p>\n<p>Az ilyen adatb\u00e1zis ritka analitikai ad-hoc lek\u00e9rdez\u00e9sekhez alkalmazhat\u00f3. P\u00e9ld\u00e1ul, amikor spont\u00e1n m\u00f3don d\u00f6nt\u00fcnk \u00fagy, hogy ellen\u0151rizz\u00fck egy hipot\u00e9zis \u00e9rv\u00e9nyess\u00e9g\u00e9t hatalmas mennyis\u00e9g\u0171 adat eset\u00e9n. Ezekhez az esetekhez az Athena t\u00f6k\u00e9letes. A rendszer rendszeres lek\u00e9rdez\u00e9sek eset\u00e9n dr\u00e1ga. Ilyenkor t\u00e1rolja az adatokat valamilyen speci\u00e1lis megold\u00e1sban. <\/p>\n<h2>Serverless OLTP megold\u00e1sokhoz<\/h2>\n<p>\nAz el\u0151z\u0151 p\u00e9ld\u00e1ban OLAP-feladatokat (analitikai) vizsg\u00e1ltunk. Most n\u00e9zz\u00fck meg az OLTP-feladatokat.<\/p>\n<p>K\u00e9pzelj\u00fcnk el egy sk\u00e1l\u00e1zhat\u00f3 PostgreSQL vagy MySQL rendszert. Emelj\u00fck fel a szok\u00e1sos kezelt PostgreSQL vagy MySQL p\u00e9ld\u00e1nyt minim\u00e1lis er\u0151forr\u00e1sokkal. Amikor a p\u00e9ld\u00e1nyra nagyobb terhel\u00e9s \u00e9rkezik, extra replik\u00e1kat csatlakoztatunk, amelyekre r\u00e9szben elosztjuk a lek\u00e9rdez\u00e9si terhel\u00e9st. Ha nincsenek lek\u00e9rdez\u00e9sek \u00e9s terhel\u00e9s, akkor lekapcsoljuk a replik\u00e1kat. Az els\u0151 p\u00e9ld\u00e1ny a master, a t\u00f6bbi replikak\u00e9nt m\u0171k\u00f6dik.<\/p>\n<p>Ez az \u00f6tlet az Aurora Serverless AWS n\u00e9ven ismert adatb\u00e1zisban val\u00f3sult meg. Az elv egyszer\u0171: a k\u00fcls\u0151 alkalmaz\u00e1sokt\u00f3l \u00e9rkez\u0151 lek\u00e9rdez\u00e9seket egy proxy flott\u00e1n kereszt\u00fcl fogadj\u00e1k. A terhel\u00e9s n\u00f6veked\u00e9s\u00e9t l\u00e1tva, kiszabad\u00edtja a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1sokat az el\u0151k\u00e9sz\u00edtett minim\u00e1lis p\u00e9ld\u00e1nyokb\u00f3l - a csatlakoz\u00e1s a lehet\u0151 leggyorsabb. A p\u00e9ld\u00e1nyok kikapcsol\u00e1sa is \u00edgy t\u00f6rt\u00e9nik.<\/p>\n<p>Az Aurora keretein bel\u00fcl l\u00e9tezik az Aurora Kapacit\u00e1s Egys\u00e9g, ACU fogalma. Ez (\u00e9rtelemszer\u0171en) egy p\u00e9ld\u00e1ny (szerver). Minden egyes ACU lehet master vagy slave. Minden Kapacit\u00e1s Egys\u00e9g saj\u00e1t mem\u00f3ri\u00e1val, processzorral \u00e9s minim\u00e1lis lemezzel rendelkezik. \u00cdgy egy master \u00e9s a t\u00f6bbi csak olvas\u00e1si replikak\u00e9nt m\u0171k\u00f6dik.<\/p>\n<p>Ezeknek az akt\u00edv Aurora Kapacit\u00e1s Egys\u00e9geknek a sz\u00e1ma egy konfigur\u00e1lhat\u00f3 param\u00e9ter. A minim\u00e1lis sz\u00e1m lehet egy vagy nulla (ebben az esetben az adatb\u00e1zis nem m\u0171k\u00f6dik, ha nincsenek lek\u00e9rdez\u00e9sek).<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAmikor az adatb\u00e1zis lek\u00e9rdez\u00e9seket kap, a proxy flott\u00e1k felemelik az Aurora Kapacit\u00e1s Egys\u00e9geket, n\u00f6velve a rendszer teljes\u00edtm\u00e9nyforr\u00e1sait. Az er\u0151forr\u00e1sok n\u00f6vel\u00e9s\u00e9nek \u00e9s cs\u00f6kkent\u00e9s\u00e9nek lehet\u0151s\u00e9ge lehet\u0151v\u00e9 teszi a rendszer sz\u00e1m\u00e1ra, hogy \"zsongl\u0151rk\u00f6dj\u00f6n\" az er\u0151forr\u00e1sokkal: automatikusan elt\u00e1vol\u00edtja a k\u00fcl\u00f6nb\u00f6z\u0151 ACU-kat (\u00fajakkal helyettes\u00edtve \u0151ket), \u00e9s alkalmazza a kiadott friss\u00edt\u00e9seket.<\/p>\n<p>Az Aurora Serverless adatb\u00e1zis k\u00e9pes a lek\u00e9rdez\u00e9si terhel\u00e9s sk\u00e1l\u00e1z\u00e1s\u00e1ra. De err\u0151l a dokument\u00e1ci\u00f3ban nincs egy\u00e9rtelm\u0171 eml\u00edt\u00e9s. Lehet, hogy az a benyom\u00e1s keletkezik, hogy k\u00e9pesek multi-master rendszert l\u00e9trehozni. De val\u00f3j\u00e1ban nincs var\u00e1zslat. <\/p>\n<p>Ez az adatb\u00e1zis j\u00f3l alkalmas arra, hogy ne k\u00f6lts\u00fcnk el hatalmas \u00f6sszegeket olyan rendszerekre, amelyek hozz\u00e1f\u00e9r\u00e9se kisz\u00e1m\u00edthatatlan. P\u00e9ld\u00e1ul MVP vagy marketing l\u00e1togat\u00f3i oldalak k\u00e9sz\u00edt\u00e9sekor \u00e1ltal\u00e1ban nem sz\u00e1m\u00edtunk stabil terhel\u00e9sre. Ennek megfelel\u0151en, ha nincs hozz\u00e1f\u00e9r\u00e9s, akkor nem fizet\u00fcnk az instance-ek\u00e9rt. Amikor v\u00e1ratlan terhel\u00e9s l\u00e9p fel, p\u00e9ld\u00e1ul egy konferencia vagy rekl\u00e1mkamp\u00e1ny ut\u00e1n, sok ember l\u00e1togat el az oldalra, \u00e9s a terhel\u00e9s hirtelen megn\u0151, az Aurora Serverless automatikusan kezeli ezt a terhel\u00e9st \u00e9s gyorsan csatlakoztatja a sz\u00fcks\u00e9ges er\u0151forr\u00e1sokat (ACU). Azt\u00e1n a konferencia v\u00e9get \u00e9r, mindenki elfelejti a protot\u00edpust, a szerverek (ACU) le\u00e1llnak, \u00e9s a k\u00f6lts\u00e9gek null\u00e1ra cs\u00f6kkennek \u2014 k\u00e9nyelmes.<\/p>\n<p>Ez a megold\u00e1s nem alkalmas stabil magas terhel\u00e9s kezel\u00e9s\u00e9re, mert nem k\u00e9pes m\u00e9retezni az \u00edr\u00f3i terhel\u00e9st. Mindezek a kapcsol\u00f3d\u00e1sok \u00e9s lekapcsol\u00e1sok a \u00fagynevezett \u201escale point\u201d pillanat\u00e1ban t\u00f6rt\u00e9nnek \u2014 abban az id\u0151pontban, amikor az adatb\u00e1zist nem tartja egy tranzakci\u00f3, nem tartj\u00e1k ideiglenes t\u00e1bl\u00e1k. P\u00e9ld\u00e1ul egy h\u00e9ten bel\u00fcl a scale point tal\u00e1n meg sem t\u00f6rt\u00e9nik, \u00e9s az adatb\u00e1zis egyetlen er\u0151forr\u00e1son m\u0171k\u00f6dik, \u00edgy egyszer\u0171en nem tud sem b\u0151v\u00fclni, sem \u00f6sszeh\u00faz\u00f3dni. <\/p>\n<p>Nincs var\u00e1zslat \u2014 ez egy \u00e1tlagos PostgreSQL. De a g\u00e9pek hozz\u00e1ad\u00e1s\u00e1nak \u00e9s lekapcsol\u00e1s\u00e1nak folyamata r\u00e9szben automatiz\u00e1lt.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAz Aurora Serverless egy r\u00e9gi adatb\u00e1zis, amelyet felh\u0151re \u00edrtak \u00e1t, hogy kihaszn\u00e1lja a Serverless el\u0151nyeit. Most pedig mes\u00e9lek egy adatb\u00e1zisr\u00f3l, amelyet eredetileg felh\u0151re, a serverless megk\u00f6zel\u00edt\u00e9s szerint \u00edrtak \u2014 Serverless-by-design. Ezt az alapot azzal a c\u00e9llal fejlesztett\u00e9k ki, hogy nem felt\u00e9telezz\u00e9k, hogy fizikai szervereken m\u0171k\u00f6dik.<\/p>\n<p>Ez az adatb\u00e1zis Snowflake n\u00e9ven fut. H\u00e1rom kulcsfontoss\u00e1g\u00fa blokkja van.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz els\u0151 \u2014 a metadatblokk. Ez egy gyors in-memory szolg\u00e1ltat\u00e1s, amely a biztons\u00e1g, metaadatok, tranzakci\u00f3k \u00e9s a lek\u00e9rdez\u00e9s optimaliz\u00e1l\u00e1s\u00e1nak k\u00e9rd\u00e9seivel foglalkozik (a bal oldali illusztr\u00e1ci\u00f3n).<\/p>\n<p>A m\u00e1sodik blokk \u2014 t\u00f6bb virtu\u00e1lis sz\u00e1m\u00edt\u00f3 klaszter a sz\u00e1m\u00edt\u00e1sokhoz (a k\u00e9pen \u2014 egy k\u00e9k k\u00f6r\u00f6kb\u0151l \u00e1ll\u00f3 k\u00e9szlet).<\/p>\n<p>A harmadik blokk \u2014 az S3 alap\u00fa adatkezel\u0151 rendszer. Az S3 egy korl\u00e1tlan objektumt\u00e1r az AWS-ben, olyasmi, mint egy korl\u00e1tlan Dropbox az \u00fczlet sz\u00e1m\u00e1ra.<\/p>\n<p>N\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dik a Snowflake egy hideg ind\u00edt\u00e1ssal. Ez azt jelenti, hogy van egy adatb\u00e1zis, az adatok bet\u00f6ltve, de akt\u00edv lek\u00e9rdez\u00e9sek nincsenek. Ennek megfelel\u0151en, ha nincs lek\u00e9rdez\u00e9s az adatb\u00e1zishoz, akkor egy gyors in-memory Metaadat szolg\u00e1ltat\u00e1sunk van fel\u00e1ll\u00edtva (az els\u0151 blokk). Van egy S3 t\u00e1rol\u00f3nk, ahol az adataink t\u00e1bl\u00e1kra felosztva, \u00fagynevezett mikropart\u00edci\u00f3kban tal\u00e1lhat\u00f3k. Egyszer\u0171s\u00edtve: ha a t\u00e1bl\u00e1ban \u00fcgyletek vannak, akkor a mikropart\u00edci\u00f3k a tranzakci\u00f3k napjai. Minden nap k\u00fcl\u00f6n mikropart\u00edci\u00f3, k\u00fcl\u00f6n f\u00e1jl. Ez\u00e9rt amikor az adatb\u00e1zis ebben a m\u00f3dban m\u0171k\u00f6dik, csak az adatok \u00e1ltal elfoglalt hely\u00e9rt fizet. R\u00e1ad\u00e1sul a helyd\u00edj nagyon alacsony (k\u00fcl\u00f6n\u00f6sen a jelent\u0151s t\u00f6m\u00f6r\u00edt\u00e9s figyelembev\u00e9tel\u00e9vel). A metaadat szolg\u00e1ltat\u00e1s is folyamatosan \u00fczemel, de az optimaliz\u00e1l\u00e1shoz nem ig\u00e9nyel sok er\u0151forr\u00e1st, \u00edgy a szolg\u00e1ltat\u00e1s l\u00e9nyeg\u00e9ben ingyenesnek tekinthet\u0151. <\/p>\n<p>Most k\u00e9pzelj\u00fck el, hogy egy felhaszn\u00e1l\u00f3 \u00e9rkezik az adatb\u00e1zisunkhoz, \u00e9s ind\u00edt egy SQL-lek\u00e9rdez\u00e9st. Az SQL-lek\u00e9rdez\u00e9s azonnal a Metaadat szolg\u00e1ltat\u00e1s feldolgoz\u00e1s\u00e1ba ker\u00fcl. Ennek megfelel\u0151en, miut\u00e1n megkapta a lek\u00e9rdez\u00e9st, ez a szolg\u00e1ltat\u00e1s elemzi a lek\u00e9rdez\u00e9st, az el\u00e9rhet\u0151 adatokat, a felhaszn\u00e1l\u00f3 jogosults\u00e1gait, \u00e9s ha minden rendben van, elk\u00e9sz\u00edti a lek\u00e9rdez\u00e9s feldolgoz\u00e1si terv\u00e9t.<\/p>\n<p>Ezut\u00e1n a szolg\u00e1ltat\u00e1s elind\u00edtja a sz\u00e1m\u00edt\u00e1si klasztert. A sz\u00e1m\u00edt\u00e1si klaszter egy szerverekb\u0151l \u00e1ll\u00f3 klaszter, amely v\u00e9grehajtja a sz\u00e1m\u00edt\u00e1sokat. Ez azt jelenti, hogy a klaszter tartalmazhat 1 szervert, 2, 4, 8, 16, 32 \u2014 ahogy szeretn\u00e9. \u00d6n csak bedobja a lek\u00e9rdez\u00e9st, \u00e9s r\u00e1 azonnal megkezd\u0151dik a klaszter elind\u00edt\u00e1sa. Ez val\u00f3j\u00e1ban m\u00e1sodperceket vesz ig\u00e9nybe.<\/p>\n<p><img decoding=\"async\" alt=\"Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2013 hogyan \u00e9s mi\u00e9rt\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzut\u00e1n, miut\u00e1n a klaszter elindult, az S3-b\u00f3l elkezdik m\u00e1solni a mikropartik\u00e1kat, amelyek sz\u00fcks\u00e9gesek a k\u00e9r\u00e9sed feldolgoz\u00e1s\u00e1hoz. Teh\u00e1t, tegy\u00fck fel, hogy egy SQL k\u00e9r\u00e9s v\u00e9grehajt\u00e1s\u00e1hoz k\u00e9t part\u00edci\u00f3ra van sz\u00fcks\u00e9g egy t\u00e1bl\u00e1zatb\u00f3l, \u00e9s egy m\u00e1sikb\u00f3l egy. Ilyen esetben a klaszterbe csak a h\u00e1rom sz\u00fcks\u00e9ges part\u00edci\u00f3 m\u00e1sol\u00f3dik, nem pedig az \u00f6sszes t\u00e1bl\u00e1zat. Pontosan ez\u00e9rt, \u00e9s mivel minden egy adatk\u00f6zpont keretein bel\u00fcl tal\u00e1lhat\u00f3 \u00e9s nagyon gyors csatorn\u00e1k kapcsolj\u00e1k \u00f6ssze, a teljes \u00e1tvitel folyamata rendk\u00edv\u00fcl gyorsan zajlik: m\u00e1sodpercek alatt, nagyon ritk\u00e1n percek alatt, hacsak nem valamilyen rendk\u00edv\u00fcli k\u00e9r\u00e9sr\u0151l van sz\u00f3. Ennek megfelel\u0151en, a mikropartik\u00e1k \u00e1tm\u00e1sol\u00f3dnak a sz\u00e1m\u00edt\u00e1si klaszterre, \u00e9s a befejez\u00e9s ut\u00e1n ezen a sz\u00e1m\u00edt\u00e1si klaszteren v\u00e9grehajtj\u00e1k az SQL k\u00e9rd\u00e9st. Ennek a k\u00e9rd\u00e9snek az eredm\u00e9nye lehet egy sor, t\u00f6bb sor vagy t\u00e1bl\u00e1zat - ezeket kiadj\u00e1k a felhaszn\u00e1l\u00f3nak, hogy az let\u00f6ltse, megjelen\u00edtse a BI eszk\u00f6z\u00e9ben vagy m\u00e1s m\u00f3don haszn\u00e1lja.<\/p>\n<p>Minden SQL k\u00e9rd\u00e9s nemcsak aggreg\u00e1lt adatokat olvashat ki a kor\u00e1bban bet\u00f6lt\u00f6tt adatokb\u00f3l, hanem \u00faj adatokat is bet\u00f6lthet\/l\u00e9trehozhat az adatb\u00e1zisban. Teh\u00e1t lehet egy olyan k\u00e9r\u00e9s, ami p\u00e9ld\u00e1ul \u00faj rekordokat illeszt be egy m\u00e1sik t\u00e1bl\u00e1zatba, ami egy \u00faj part\u00edci\u00f3 megjelen\u00e9s\u00e9t eredm\u00e9nyezi a sz\u00e1m\u00edt\u00e1si klaszteren, amely, cser\u00e9be, automatikusan elment\u0151dik az egyetlen S3 t\u00e1rol\u00f3ba.<\/p>\n<p>A fent le\u00edrt forgat\u00f3k\u00f6nyv, a felhaszn\u00e1l\u00f3 \u00e9rkez\u00e9s\u00e9t\u0151l a klaszter elind\u00edt\u00e1s\u00e1ig, az adatok bet\u00f6lt\u00e9s\u00e9ig, a k\u00e9rd\u00e9sek v\u00e9grehajt\u00e1s\u00e1ig, az eredm\u00e9nyek megszerz\u00e9s\u00e9ig, a virtu\u00e1lis sz\u00e1m\u00edt\u00e1si klaszter, virtu\u00e1lis rakt\u00e1r haszn\u00e1lat\u00e1nak perc alap\u00fa tarif\u00e1ja szerint ker\u00fcl elsz\u00e1mol\u00e1sra. A tarifa az AWS z\u00f3n\u00e1t\u00f3l \u00e9s a klaszter m\u00e9ret\u00e9t\u0151l f\u00fcgg\u0151en v\u00e1ltozik, de \u00e1tlagosan ez n\u00e9h\u00e1ny doll\u00e1r \u00f3r\u00e1nk\u00e9nt. A n\u00e9gy g\u00e9pb\u0151l \u00e1ll\u00f3 klaszter k\u00e9tszer annyiba ker\u00fcl, mint a k\u00e9t g\u00e9pb\u0151l \u00e1ll\u00f3, a nyolc g\u00e9pb\u0151l \u00e1ll\u00f3 pedig m\u00e9g k\u00e9tszer annyiba. A 16-os, 32-es g\u00e9pes lehet\u0151s\u00e9gek is el\u00e9rhet\u0151k, a k\u00e9r\u00e9sek \u00f6sszetetts\u00e9g\u00e9t\u0151l f\u00fcgg\u0151en. De csak azok\u00e9rt a percek\u00e9rt fizetsz, amikor a klaszter val\u00f3ban m\u0171k\u00f6dik, mert ha nincsenek k\u00e9rd\u00e9sek, \u201efelrakod a kezed\u201d, \u00e9s 5-10 perc v\u00e1rakoz\u00e1s ut\u00e1n (konfigur\u00e1lhat\u00f3 param\u00e9ter) mag\u00e1t\u00f3l le\u00e1ll, felszabad\u00edtja az er\u0151forr\u00e1sokat \u00e9s ingyeness\u00e9 v\u00e1lik.<\/p>\n<p>Teljesen val\u00f3s forgat\u00f3k\u00f6nyv, amikor k\u00fcldesz egy lek\u00e9rdez\u00e9st, a klaszter megjelenik, mondjuk, egy perc alatt, tov\u00e1bbi egy percig sz\u00e1molja, azt\u00e1n \u00f6t perc a le\u00e1ll\u00edt\u00e1s, \u00e9s v\u00e9g\u00fcl h\u00e9t percnyi munk\u00e1\u00e9rt fizetsz a klaszternek, nem h\u00f3napok\u00e9rt \u00e9s \u00e9vek\u00e9rt.<\/p>\n<p>Az els\u0151 forgat\u00f3k\u00f6nyv a Snowflake egyfelhaszn\u00e1l\u00f3s verzi\u00f3j\u00e1nak haszn\u00e1lat\u00e1t \u00edrta le. Most k\u00e9pzelj\u00fck el, hogy sok felhaszn\u00e1l\u00f3 van, ami m\u00e1r k\u00f6zelebb \u00e1ll a val\u00f3s forgat\u00f3k\u00f6nyvh\u00f6z.<\/p>\n<p>Tegy\u00fck fel, hogy sok elemz\u0151 \u00e9s Tableau-jelent\u00e9s van, amelyek folyamatosan bomb\u00e1zz\u00e1k az adatb\u00e1zisunkat rengeteg egyszer\u0171 analitikai SQL-lek\u00e9rdez\u00e9ssel.<\/p>\n<p>Ezen k\u00edv\u00fcl legyenek lelem\u00e9nyes adatkutat\u00f3k, akik borzalmas dolgokat pr\u00f3b\u00e1lnak v\u00e9grehajtani az adatokkal, tizedek terab\u00e1jtnyit kezelve, milli\u00e1rdok \u00e9s trilli\u00f3k sorait elemezve. <\/p>\n<p>A fent le\u00edrt k\u00e9t terhel\u00e9st\u00edpus eset\u00e9n a Snowflake lehet\u0151v\u00e9 teszi, hogy t\u00f6bb f\u00fcggetlen sz\u00e1m\u00edt\u00e1si klasztert hozzunk l\u00e9tre k\u00fcl\u00f6nb\u00f6z\u0151 teljes\u00edtm\u00e9nnyel. Ezek a sz\u00e1m\u00edt\u00e1si klaszterek f\u00fcggetlen\u00fcl m\u0171k\u00f6dnek, de k\u00f6z\u00f6s, konzisztens adatokkal dolgoznak.<\/p>\n<p>Sok egyszer\u0171 lek\u00e9rdez\u00e9s eset\u00e9n 2-3 kisebb klasztert hozhatsz l\u00e9tre, amelyek m\u00e9rete k\u00f6r\u00fclbel\u00fcl 2 g\u00e9p. Ez a viselked\u00e9s automatikus be\u00e1ll\u00edt\u00e1sokkal is megval\u00f3s\u00edthat\u00f3. Teh\u00e1t azt mondod: \u201eSnowflake, hozz l\u00e9tre egy kis klasztert. Ha a terhel\u00e9se meghalad egy bizonyos param\u00e9tert, hozz l\u00e9tre hasonl\u00f3 m\u00e1sodikat, harmadikat. Amikor a terhel\u00e9s cs\u00f6kkenni kezd \u2014 \u00e1ll\u00edtsd le a felesleget.\u201d \u00cdgy f\u00fcggetlen\u00fcl att\u00f3l, hogy h\u00e1ny elemz\u0151 \u00e9rkezik \u00e9s kezd el jelent\u00e9seket n\u00e9zni, mindenkinek elegend\u0151 er\u0151forr\u00e1sa van.<\/p>\n<p>Jelentkez\u0151 eset\u00e9n, ha az elemz\u0151k alszanak, \u00e9s senki sem n\u00e9zi a jelent\u00e9seket \u2014 a klaszterek teljesen le\u00e1ll\u00edthat\u00f3k, \u00e9s ez\u00e9rt m\u00e1r nem kell fizetni.<\/p>\n<p>Ezenk\u00edv\u00fcl, neh\u00e9z lek\u00e9rdez\u00e9sek eset\u00e9n (adatkutat\u00f3kt\u00f3l) egy nagyon nagy klasztert is l\u00e9trehozhatsz k\u00f6r\u00fclbel\u00fcl 32 g\u00e9ppel. Ez a klaszter is csak azok\u00e9rt a percek\u00e9rt \u00e9s \u00f3r\u00e1k\u00e9rt lesz sz\u00e1ml\u00e1zva, amikor a hatalmas lek\u00e9rdez\u00e9sed fut.<\/p>\n<p>A fent le\u00edrt lehet\u0151s\u00e9g lehet\u0151v\u00e9 teszi, hogy a klasztereket ne csak 2, hanem t\u00f6bb k\u00fcl\u00f6nb\u00f6z\u0151 terhel\u00e9st\u00edpusra (ETL, monitoring, jelent\u00e9sek materializ\u00e1l\u00e1sa, \u2026) is sz\u00e9tosszuk.<\/p>\n<p>\u00d6sszefoglalva a Snowflake-r\u0151l. Az adatb\u00e1zis \u00f6tv\u00f6zi a sz\u00e9p \u00f6tletet \u00e9s a m\u0171k\u00f6d\u0151 megval\u00f3s\u00edt\u00e1st. A ManyChat-ben a Snowflake-t haszn\u00e1ljuk az \u00f6sszes rendelkez\u00e9sre \u00e1ll\u00f3 adat elemz\u00e9s\u00e9re. N\u00e1lunk nem h\u00e1rom klaszter tal\u00e1lhat\u00f3, mint a p\u00e9ld\u00e1ban, hanem 5 \u00e9s 9 k\u00f6z\u00f6tt, k\u00fcl\u00f6nb\u00f6z\u0151 m\u00e9retekben. Vannak 16 g\u00e9pes, 2 g\u00e9pes, \u00e9s nagyon kicsi, 1 g\u00e9pes klaszterek is bizonyos feladatokhoz. Ezek sikeresen elosztj\u00e1k a terhel\u00e9st \u00e9s lehet\u0151v\u00e9 teszik sz\u00e1munkra, hogy jelent\u0151s k\u00f6lts\u00e9geket takar\u00edtsunk meg.<\/p>\n<p>Az adatb\u00e1zis sikeresen sk\u00e1l\u00e1zza az olvas\u00e1si \u00e9s \u00edr\u00e1si terhel\u00e9st. Ez \u00f3ri\u00e1si k\u00fcl\u00f6nbs\u00e9g \u00e9s hatalmas \u00e1tt\u00f6r\u00e9s a 'Aurora'-hoz k\u00e9pest, amely csak az olvas\u00e1si terhel\u00e9st tudta kezelni. A Snowflake lehet\u0151v\u00e9 teszi, hogy ezeket a sz\u00e1m\u00edt\u00e1si klasztereket az \u00edr\u00e1si terhel\u00e9s sk\u00e1l\u00e1z\u00e1s\u00e1ra is haszn\u00e1ljuk. Amint eml\u00edtettem, a ManyChat-ben t\u00f6bb klasztert haszn\u00e1lunk, a kis \u00e9s szuperkicsi klaszterek f\u0151k\u00e9nt ETL-feladatokra \u00e9s adatok bet\u00f6lt\u00e9s\u00e9re szolg\u00e1lnak. Az elemz\u0151k pedig k\u00f6zepes klasztereken dolgoznak, amelyek nincsenek kit\u00e9ve az ETL-terhel\u00e9snek, ez\u00e9rt nagyon gyorsan m\u0171k\u00f6dnek. <\/p>\n<p>Ennek megfelel\u0151en az adatb\u00e1zis j\u00f3l illik az OLAP-feladatokhoz. Azt azonban sajn\u00e1latos m\u00f3don elmondhatjuk, hogy az OLTP-terhel\u00e9sekhez m\u00e9g nem alkalmazhat\u00f3. El\u0151sz\u00f6r is, ez egy oszlopos adatb\u00e1zis, az \u00f6sszes k\u00f6vetkezm\u00e9ny\u00e9vel egy\u00fctt. M\u00e1sodsorban, az a megk\u00f6zel\u00edt\u00e9s, amikor minden egyes k\u00e9r\u00e9s eset\u00e9n a sz\u00fcks\u00e9ges sz\u00e1m\u00edt\u00e1si klasztert el\u0151h\u00edvj\u00e1k \u00e9s adatokkal t\u00f6ltik fel, sajnos m\u00e9g nem el\u00e9g gyors az OLTP-terhel\u00e9sekhez. A m\u00e1sodperces v\u00e1rakoz\u00e1si id\u0151 OLAP-feladatokn\u00e1l norm\u00e1lis, de OLTP-feladatokn\u00e1l elfogadhatatlan, jobb lenne 100 ms, de m\u00e9g jobb lenne - 10 ms.<\/p>\n<h2>Result<\/h2>\n<p>\nA serverless adatb\u00e1zis lehet\u0151v\u00e9 v\u00e1lik az adatb\u00e1zis Stateless \u00e9s Stateful r\u00e9szekre val\u00f3 feloszt\u00e1s\u00e1val. Val\u00f3sz\u00edn\u0171leg \u00e9szrevette, hogy az \u00f6sszes p\u00e9ld\u00e1ban a Stateful r\u00e9sz \u2013 mondjuk, hogy \u2013 a mikropart\u00edci\u00f3k S3-ban val\u00f3 t\u00e1rol\u00e1sa, m\u00edg a Stateless \u2013 az optimaliz\u00e1l\u00f3, a metaadatok kezel\u00e9se, a biztons\u00e1ggal kapcsolatos k\u00e9rd\u00e9sek feldolgoz\u00e1sa, amelyek f\u00fcggetlen, k\u00f6nny\u0171 Stateless szolg\u00e1ltat\u00e1sk\u00e9nt emelkedhetnek fel.<\/p>\n<p>A SQL lek\u00e9rdez\u00e9sek v\u00e9grehajt\u00e1sa szint\u00e9n \u00fagy \u00e9rtelmezhet\u0151, mint k\u00f6nny\u0171 \u00e1llapot\u00fa szolg\u00e1ltat\u00e1sok, amelyek serverless \u00fczemm\u00f3dban megjelenhetnek, mint a Snowflake sz\u00e1m\u00edt\u00e1si klaszterei, let\u00f6lthetik csak a sz\u00fcks\u00e9ges adatokat, v\u00e9grehajthatj\u00e1k a lek\u00e9rdez\u00e9st \u00e9s 'elhalhatnak'.<\/p>\n<p>A szerver n\u00e9lk\u00fcli, produkci\u00f3s szint\u0171 adatb\u00e1zisok m\u00e1r el\u00e9rhet\u0151k, \u00e9s m\u0171k\u00f6dnek. Ezek a szerver n\u00e9lk\u00fcli adatb\u00e1zisok k\u00e9szen \u00e1llnak az OLAP feladatok kezel\u00e9s\u00e9re. Sajnos az OLTP feladatokhoz val\u00f3 alkalmaz\u00e1suk\u2026 \u00e1rnyalt, mivel vannak korl\u00e1toz\u00e1sok. Egyr\u00e9szt ez h\u00e1tr\u00e1ny. M\u00e1sr\u00e9szt viszont lehet\u0151s\u00e9g. Lehet, hogy az olvas\u00f3k k\u00f6z\u00f6tt valaki megtal\u00e1lja a m\u00f3dj\u00e1t, hogyan lehet az OLTP adatb\u00e1zist teljesen szerver n\u00e9lk\u00fcli, korl\u00e1toz\u00e1sok n\u00e9lk\u00fcl megval\u00f3s\u00edtani az Auror\u00e1val.<\/p>\n<p>Rem\u00e9lem, \u00e9rdekes volt. A szerver n\u00e9lk\u00fcli j\u00f6v\u0151\u00e9rt \ud83d\ude42<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/514298\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0410\u0432\u0438\u0442\u043e \u0438 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u043b Data Platform, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438: \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (Vertica, ClickHouse), \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0438 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91635","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\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\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\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\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\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-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-15T17: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\udd47Az \u00fat a szerver n\u00e9lk\u00fcli adatb\u00e1zisokhoz \u2014 hogyan \u00e9s mi\u00e9rt | ProHoster","description":"Hell\u00f3 mindenkinek! Gologov Nyikolaj vagyok.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","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\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","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-08-15T17:42:23+00:00","article:modified_time":"2020-08-15T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91635","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 12:23:25","updated":"2022-09-27 17:18:10","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\/91635","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=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}