{"id":41081,"date":"2020-02-05T21:30:11","date_gmt":"2020-02-05T18:30:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle"},"modified":"2020-02-05T21:30:11","modified_gmt":"2020-02-05T18:30:11","slug":"cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Ako nezhyn\u00fa\u0165, ak pozn\u00e1\u0161 len Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj, Habr.<\/p>\n<p>Vol\u00e1m sa Mi\u0161a Butrimov a chcel by som v\u00e1m trochu rozpr\u00e1va\u0165 o Cassandre. M\u00f4j pr\u00edbeh bude u\u017eito\u010dn\u00fd pre t\u00fdch, ktor\u00ed sa nikdy nestretli s NoSQL datab\u00e1zami, preto\u017ee m\u00e1 mnoho implementa\u010dn\u00fdch zvl\u00e1\u0161tnost\u00ed a n\u00e1strah, o ktor\u00fdch treba vedie\u0165. A ak ste okrem Oracle alebo inej rela\u010dnej datab\u00e1zy ni\u010d in\u00e9 nevideli, tieto veci v\u00e1m zachr\u00e1nia \u017eivot.<\/p>\n<p>\u010c\u00edm je Cassandra dobr\u00e1? Je to NoSQL datab\u00e1za, navrhnut\u00e1 bez jedinej bodu zlyhania, ktor\u00e1 sa dobre \u0161k\u00e1luje. Ak potrebujete prida\u0165 nieko\u013eko terabajtov do datab\u00e1zy, jednoducho prid\u00e1te uzly do prstenca. Roz\u0161\u00edri\u0165 ju na \u010fal\u0161ie d\u00e1tov\u00e9 centrum? Pridajte uzly do klasteru. Zv\u00fd\u0161i\u0165 spracov\u00e1van\u00e9 RPS? Pridajte uzly do klasteru. V opa\u010dnom smere to funguje tie\u017e. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Ako nezhyn\u00fa\u0165, ak pozn\u00e1\u0161 len Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>V \u010dom je e\u0161te dobr\u00e1? V tom, \u017ee dok\u00e1\u017ee spracov\u00e1va\u0165 mno\u017estvo dopytov. Ale ko\u013eko je ve\u013ea? 10, 20, 30, 40 tis\u00edc dopytov za sekundu \u2014 to je m\u00e1lo. 100 tis\u00edc dopytov za sekundu pre z\u00e1pis \u2014 tie\u017e m\u00e1lo. S\u00fa spolo\u010dnosti, ktor\u00e9 tvrdia, \u017ee zvl\u00e1daj\u00fa 2 mili\u00f3ny dopytov za sekundu. T\u00fdm asi budeme musie\u0165 veri\u0165. <\/p>\n<p>A v z\u00e1sade m\u00e1 Cassandra jedno ve\u013ek\u00e9 odli\u0161ovanie od rela\u010dn\u00fdch d\u00e1t \u2014 v\u00f4bec sa na ne nepodob\u00e1. A je d\u00f4le\u017eit\u00e9 si to zapam\u00e4ta\u0165.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nie v\u0161etko, \u010do vyzer\u00e1 rovnako, funguje rovnako.<\/h2>\n<p>\nNed\u00e1vno ku mne pri\u0161iel kolega a sp\u00fdtal sa: \u201eTu je SQL Cassandra query language, a m\u00e1 select statement, m\u00e1 where, m\u00e1 and. P\u00ed\u0161em p\u00edsmen\u00e1 a nefunguje to. Pre\u010do?\u201c. Ak sa k Cassandre pristupuje ako k rela\u010dnej datab\u00e1ze, je to dokonal\u00fd sp\u00f4sob, ako skon\u010di\u0165 \u017eivot brut\u00e1lnym samovra\u017eedn\u00fdm gestom. A nepropagujem to, v Rusku je to zak\u00e1zan\u00e9. Jednoducho navrhnete nie\u010do zle.<\/p>\n<p>Napr\u00edklad k n\u00e1m pr\u00edde z\u00e1kazn\u00edk a povie: \u201ePo\u010fme postavi\u0165 datab\u00e1zu pre seri\u00e1ly, alebo datab\u00e1zu pre recepty. Budeme ma\u0165 jedl\u00e1 s ingredienciami alebo zoznam seri\u00e1lov a hercov v \u0148om\u201c. Radostne hovor\u00edme: \u201ePo\u010fme!\u201c. To s\u00fa dva bajty na prenesie, p\u00e1r tabuliek a v\u0161etko je hotov\u00e9, v\u0161etko bude fungova\u0165 ve\u013emi r\u00fdchlo, spo\u013eahlivo. A v\u0161etko je skvel\u00e9, pokia\u013e z\u00e1kazn\u00edci nepr\u00eddu a nepovedia, \u017ee gazdinky chc\u00fa vyrie\u0161i\u0165 aj opa\u010dn\u00fd probl\u00e9m: maj\u00fa zoznam ingredienci\u00ed a chc\u00fa vedie\u0165, ktor\u00e9 jedlo chc\u00fa pripravi\u0165. Ste m\u0155tvi.<\/p>\n<p>V\u0161etko preto, lebo Cassandra je hybridn\u00e1 datab\u00e1za: je z\u00e1rove\u0148 key value a uklad\u00e1 d\u00e1ta v \u0161irok\u00fdch st\u013apcoch. Ak hovor\u00edme jazykmi Java alebo Kotlin, mohli by sme to op\u00edsa\u0165 takto:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&gt;<\/code><\/p>\n<p>Teda mapa, v ktorej je e\u0161te aj usporiadan\u00e1 mapa. Prv\u00fdm k\u013e\u00fa\u010dom do tejto mapy je Row key alebo Partition key \u2014 k\u013e\u00fa\u010d rozdelenia. Druh\u00fd k\u013e\u00fa\u010d, ktor\u00fd je k\u013e\u00fa\u010dom k u\u017e usporiadanej mape, je Clustering key.<\/p>\n<p>Na ilustr\u00e1ciu rozdelenosti datab\u00e1zy nakresl\u00edme tri uzly. Teraz je potrebn\u00e9 pochopi\u0165, ako rozlo\u017ei\u0165 d\u00e1ta na uzly. Lebo ak v\u0161etko natla\u010d\u00edme do jedn\u00e9ho (m\u00f4\u017ee ich by\u0165 napr\u00edklad tis\u00edc, dve tis\u00edce, p\u00e4\u0165 \u2014 ko\u013eko len chceme), to nie je ve\u013emi o rozdelen\u00ed. Preto potrebujeme matematick\u00fa funkciu, ktor\u00e1 bude vraca\u0165 \u010d\u00edslo. Prosto \u010d\u00edslo, dlh\u00fd int, ktor\u00e9 sa bude pohybova\u0165 v nejakom rozsahu. A jedna uzol bude zodpoveda\u0165 za jeden rozsah, druh\u00e1 \u2014 za druh\u00fd, n-t\u00e1 \u2014 za n-t\u00fd. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Ako nezhyn\u00fa\u0165, ak pozn\u00e1\u0161 len Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nToto \u010d\u00edslo sa z\u00edskava pomocou hash-funkcie, ktor\u00e1 sa aplikuje presne na to, \u010do naz\u00fdvame Partition key. Je to ten st\u013apec, ktor\u00fd sa uv\u00e1dza v direkt\u00edve Primary key, a je to ten st\u013apec, ktor\u00fd bude prv\u00fdm a najd\u00f4le\u017eitej\u0161\u00edm k\u013e\u00fa\u010dom mapy. Ur\u010duje, na ktor\u00fd uzol ak\u00e9 d\u00e1ta p\u00f4jdu. Tabu\u013eka sa vytv\u00e1ra v Cassandre takmer s rovnakou syntaxou ako v SQL: <\/p>\n<pre><code class=\"sql\">CREATE TABLE users (\n\tuser_id uu id,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY(user_id)\n\n)\n<\/code><\/pre>\n<p>Primary key v tomto pr\u00edpade pozost\u00e1va z jedn\u00e9ho st\u013apca, a ten je tie\u017e k\u013e\u00fa\u010dom rozdelenia.<\/p>\n<p>Ako bud\u00fa umiestnen\u00ed pou\u017e\u00edvatelia? \u010cas\u0165 skon\u010d\u00ed na jednom uzle, \u010das\u0165 \u2014 na druhom a \u010das\u0165 \u2014 na tre\u0165om. Vznikne oby\u010dajn\u00e1 hash tabu\u013eka, ona mapa, v Pythone \u2014 slovn\u00edk, ona jednoduch\u00e1 Key value \u0161trukt\u00fara, z ktorej m\u00f4\u017eeme \u010d\u00edta\u0165 v\u0161etky hodnoty, \u010d\u00edta\u0165 a zapisova\u0165 pod\u013ea k\u013e\u00fa\u010da.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Ako nezhyn\u00fa\u0165, ak pozn\u00e1\u0161 len Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: ke\u010f allow filtering sa zmen\u00ed na full scan, alebo ako to nerobi\u0165<\/h2>\n<p>\nNap\u00ed\u0161me nejak\u00e9 select statement: <code>select * from users where userid = <\/code>. Vyzer\u00e1 to ako v Oracle: p\u00ed\u0161eme select, uv\u00e1dzame podmienky a v\u0161etko funguje, pou\u017e\u00edvatelia sa na\u010d\u00edtaj\u00fa. Ale ak vyberieme napr\u00edklad pou\u017e\u00edvate\u013ea s ur\u010dit\u00e9m rokom narodenia, Cassandra sa ozve, \u017ee nedok\u00e1\u017ee vykona\u0165 dopyt. Preto\u017ee ona v\u00f4bec nevie, ako s\u00fa u n\u00e1s rozlo\u017een\u00e9 \u00fadaje o roku narodenia \u2014 m\u00e1 v \u00falohe len jeden st\u013apec ako k\u013e\u00fa\u010d. Potom povie: \u201eDobre, m\u00f4\u017eem tento dopyt st\u00e1le vykona\u0165. Pridajte allow filtering.\u201c Prid\u00e1me direkt\u00edvu a v\u0161etko funguje. A v tomto momente sa deje nie\u010do desiv\u00e9. <\/p>\n<p>Ke\u010f testujeme na testovac\u00edch \u00fadajoch, je to skvel\u00e9. Ale ke\u010f vykon\u00e1te dopyt v produkcii, kde m\u00e1me napr\u00edklad 4 mili\u00f3ny z\u00e1znamov, veci nie s\u00fa ve\u013emi dobr\u00e9. Preto\u017ee allow filtering \u2014 to je direkt\u00edva, ktor\u00e1 umo\u017e\u0148uje Cassandre zhroma\u017edi\u0165 v\u0161etky \u00fadaje z tejto tabu\u013eky zo v\u0161etk\u00fdch n\u00f3d, v\u0161etk\u00fdch <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sk\/kompaniya\/data-centers\/\"   title=\"d\u00e1tov\u00fdch centier\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">d\u00e1tov\u00fdch centier<\/a> (ak ich je v tomto clustri ve\u013ea) a a\u017e potom ich filtrova\u0165. To je analogick\u00e9 pln\u00e9mu skenu a pravdepodobne z toho nikto nie je nad\u0161en\u00fd. <\/p>\n<p>Keby sme potrebovali pou\u017e\u00edvate\u013eov len pod\u013ea identifik\u00e1torov, sta\u010dilo by n\u00e1m to. Ale niekedy mus\u00edme p\u00edsa\u0165 in\u00e9 dopyty a uplatni\u0165 in\u00e9 obmedzenia na v\u00fdber. Preto si pripom\u00edname: je to v\u0161etko o mape, ktor\u00e1 m\u00e1 partition key, ale v jejn\u00fa tromb\u00f3zu \u2014 trieden\u00fa mapu. <\/p>\n<p>A t\u00e1to mapa m\u00e1 tie\u017e k\u013e\u00fa\u010d, ktor\u00fd naz\u00fdvame Clustering Key. Tento k\u013e\u00fa\u010d pozost\u00e1va zo st\u013apcov, ktor\u00e9 vyberieme, pomocou ktor\u00e9ho Cassandra ch\u00e1pe, ako bud\u00fa \u00fadaje fyzicky usporiadan\u00e9 a ulo\u017een\u00e9 na ka\u017edej n\u00f3d. To znamen\u00e1, \u017ee pre nejak\u00fd Partition key Clustering key povie, ako presne ulo\u017ei\u0165 \u00fadaje do tohto stromu, ak\u00fd priestor tam zaber\u00fa.<\/p>\n<p>Je to naozaj strom, jednoducho sa tam zavol\u00e1 comparator, do ktor\u00e9ho sa odovzd\u00e1 ur\u010dit\u00e1 mno\u017eina st\u013apcov v podobe objektu a ten sa tie\u017e zad\u00e1va formou v\u00fd\u010dtu st\u013apcov. <\/p>\n<pre><code class=\"sql\">CREATE TABLE users_by_year_salary_id (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY((year), salary, user_id)\n<\/code><\/pre>\n<p>V\u0161imnite si direkt\u00edvu Primary key, jej prv\u00fd argument (v na\u0161om pr\u00edpade rok) v\u017edy ide ako Partition key. M\u00f4\u017ee sa sklada\u0165 z jednej alebo viacer\u00fdch st\u013apcov, to nie je d\u00f4le\u017eit\u00e9. Ak je st\u013apcov viac, treba ich e\u0161te raz da\u0165 do z\u00e1tvoriek, aby preprocesor jazyka pochopil, \u017ee ide o Primary key, a za n\u00edm s\u00fa v\u0161etky ostatn\u00e9 st\u013apce \u2014 Clustering key. Tieto bud\u00fa pridan\u00e9 do kompar\u00e1tora v porad\u00ed, v akom s\u00fa uveden\u00e9. Teda prv\u00fd st\u013apec je v\u00fdznamnej\u0161\u00ed, druh\u00fd \u2014 menej v\u00fdznamn\u00fd a tak \u010falej. Ako p\u00ed\u0161eme pre data classes, napr\u00edklad, polia equals: uvedieme polia a pre ne definujeme, ktor\u00e9 s\u00fa v\u00fdznamnej\u0161ie a ktor\u00e9 menej. V Cassandre s\u00fa to, povedzme, polia data class, ku ktor\u00fdm sa bude aplikova\u0165 nap\u00edsan\u00fd pre nich equals.<\/p>\n<h2>Definujeme triedenie, uklad\u00e1me obmedzenia<\/h2>\n<p>\nTreba pam\u00e4ta\u0165, \u017ee poradie triedenia (zostupn\u00e9, vzostupn\u00e9, na tom nez\u00e1le\u017e\u00ed) sa nastavuje v tom istom momente, ke\u010f sa vytv\u00e1ra k\u013e\u00fa\u010d, a nesk\u00f4r ho nebude mo\u017en\u00e9 zmeni\u0165. Fyzicky ur\u010duje, ako bud\u00fa d\u00e1ta zoraden\u00e9 a ako bud\u00fa le\u017ea\u0165. Ak bude potrebn\u00e9 zmeni\u0165 Clustering key alebo poradie triedenia, bude potrebn\u00e9 vytvori\u0165 nov\u00fa tabu\u013eku a prenies\u0165 do nej d\u00e1ta. S u\u017e existuj\u00facou to takto nep\u00f4jde.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Ako nezhyn\u00fa\u0165, ak pozn\u00e1\u0161 len Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNaplnili sme na\u0161u tabu\u013eku u\u017e\u00edvate\u013emi a videli sme, \u017ee sa zoradili najsk\u00f4r pod\u013ea roku narodenia a potom v r\u00e1mci ka\u017edej nody pod\u013ea mzdy a user ID. Teraz m\u00f4\u017eeme vykon\u00e1va\u0165 selekciu s obmedzeniami. <\/p>\n<p>Op\u00e4\u0165 sa objavuje n\u00e1\u0161 funk\u010dn\u00fd <code>where, a<\/code>, a u\u017e\u00edvatelia sa n\u00e1m poskytuj\u00fa, a v\u0161etko je op\u00e4\u0165 dobr\u00e9. Ale ak sa pok\u00fasime pou\u017ei\u0165 iba \u010das\u0165 Clustering key, a to menej v\u00fdznamn\u00fa, Cassandra sa okam\u017eite ozve, \u017ee nedok\u00e1\u017ee v na\u0161ej mape n\u00e1js\u0165 miesto, kde je tento objekt, ktor\u00e9ho polia pre kompar\u00e1tor s\u00fa null, a tento, ktor\u00fd sme pr\u00e1ve zadali, \u2014 kde le\u017e\u00ed. Budem musie\u0165 op\u00e4\u0165 z\u00edska\u0165 v\u0161etky d\u00e1ta z tejto nody a filtrova\u0165 ich. A to je analogick\u00e9 Full Scan v r\u00e1mci nody, \u010do nie je dobr\u00e9.<\/p>\n<h2>V ka\u017edej nejasnej situ\u00e1cii vytvor nov\u00fa tabu\u013eku<\/h2>\n<p>\nAk chceme ma\u0165 mo\u017enos\u0165 z\u00edska\u0165 pou\u017e\u00edvate\u013eov pod\u013ea ID, veku alebo platu, \u010do robi\u0165? Ni\u010d. Sta\u010d\u00ed pou\u017ei\u0165 dve tabu\u013eky. Ak bude potrebn\u00e9 z\u00edska\u0165 pou\u017e\u00edvate\u013eov tromi r\u00f4znymi sp\u00f4sobmi, nebude ma\u0165 tabu\u013eiek tri. Pre\u0161li tie \u010dasy, ke\u010f sme \u0161etrili miesto na disku. To je najlacnej\u0161\u00ed zdroj. Stoj\u00ed ove\u013ea menej ako \u010das odpovede, ktor\u00fd m\u00f4\u017ee by\u0165 pre pou\u017e\u00edvate\u013ea de\u0161trukt\u00edvny. Pou\u017e\u00edvate\u013eovi je ove\u013ea pr\u00edjemnej\u0161ie dosta\u0165 nie\u010do za sekundu, ne\u017e za 10 min\u00fat.<\/p>\n<p>Vymie\u0148ame nadbyto\u010dne obsaden\u00e9 miesto, denormalizovan\u00e9 d\u00e1ta za mo\u017enos\u0165 dobre sa \u0161k\u00e1lova\u0165, spo\u013eahlivo fungova\u0165. Ve\u010f naozaj, klaster pozost\u00e1vaj\u00faci z troch d\u00e1tov\u00fdch centier, v ka\u017edom z nich po p\u00e4\u0165 uzlov, pri akceptovate\u013enej \u00farovni uchov\u00e1vania d\u00e1t (ke\u010f je presne ni\u010d nestraten\u00e9), je schopn\u00fd pre\u017ei\u0165 z\u00e1nik jedn\u00e9ho d\u00e1tov\u00e9ho centra \u00faplne. A e\u0161te po dva uzly v ka\u017ed\u00fdch z dvoch zost\u00e1vaj\u00facich. A len po tom nastan\u00fa probl\u00e9my. To je celkom dobr\u00e9 z\u00e1lohovanie, stoj\u00ed p\u00e1r-trojicu navy\u0161e SSD \u00falo\u017e\u00edsk a procesorov. Preto, aby sme mohli pou\u017e\u00edva\u0165 Cassandru, ktor\u00e1 nie je SQL, v ktorej nie s\u00fa vz\u0165ahy, vonkaj\u0161ie k\u013e\u00fa\u010de, mus\u00edme pozna\u0165 jednoduch\u00e9 pravidl\u00e1.<\/p>\n<p>Navrhujeme v\u0161etko od dotazu. Hlavn\u00e9 nie s\u00fa d\u00e1ta, ale to, ako sa aplik\u00e1cia s nimi bude zaobch\u00e1dza\u0165. Ak potrebuje z\u00edska\u0165 r\u00f4zne d\u00e1ta r\u00f4znymi sp\u00f4sobmi alebo tie ist\u00e9 d\u00e1ta r\u00f4znymi sp\u00f4sobmi, mus\u00edme ich ulo\u017ei\u0165 tak, ako to bude vhodn\u00e9 pre aplik\u00e1ciu. Inak sa dostaneme do Full Scanu a \u017eiadna v\u00fdhoda Cassandry n\u00e1m nepom\u00f4\u017ee.<\/p>\n<p>Denormalizova\u0165 d\u00e1ta je norma. Zabudneme na norm\u00e1lne formy, u\u017e nem\u00e1me rela\u010dn\u00e9 datab\u00e1zy. Ulo\u017e\u00edme nie\u010do 100-kr\u00e1t, bude le\u017ea\u0165 100-kr\u00e1t. To je st\u00e1le lacnej\u0161ie, ne\u017e spomali\u0165. <\/p>\n<p>Vyber\u00e1me k\u013e\u00fa\u010de pre partitioning tak, aby sa norm\u00e1lne rozde\u013eovali. Nepotrebujeme, aby hash na\u0161ich k\u013e\u00fa\u010dov padal do jedn\u00e9ho \u00fazkeho rozmedzia. To znamen\u00e1, rok narodenia v uvedenom pr\u00edklade \u2014 zl\u00fd pr\u00edklad. Presnej\u0161ie, je to dobr\u00e9, ak m\u00e1me pou\u017e\u00edvate\u013eov pod\u013ea roku narodenia norm\u00e1lne rozdelen\u00fdch, a zl\u00e9, ak sa to t\u00fdka \u017eiakov 5. triedy \u2014 tam sa to nebude dobre partitionova\u0165. <\/p>\n<p>S\u00fabor sa vyber\u00e1 raz pri vytv\u00e1ran\u00ed k\u013e\u00fa\u010da Clustering. Ak ho bude potrebn\u00e9 zmeni\u0165, budeme musie\u0165 preliat na\u0161u tabu\u013eku s in\u00fdm k\u013e\u00fa\u010dom.<\/p>\n<p>A najd\u00f4le\u017eitej\u0161ie: ak potrebujeme na 100 r\u00f4znych sp\u00f4sobov z\u00edska\u0165 rovnak\u00e9 \u00fadaje, budeme ma\u0165 100 r\u00f4znych tabuliek.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41082,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-41081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.\" \/>\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\/sk\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\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-02-05T18:30:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:30:11+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\udd47Cassandra. Ako nezhyn\u00fa\u0165, ak vie\u0161 len Oracle | ProHoster","description":"Ahojte, Habr. Vol\u00e1m sa Mi\u0161a Butrimov a chcel by som sa tro\u0161ku porozpr\u00e1va\u0165 o Cassandre.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.","og:url":"https:\/\/prohoster.info\/sk\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","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-02-05T18:30:11+00:00","article:modified_time":"2020-02-05T18:30:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41081","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-03-01 00:24:40","updated":"2022-09-30 11:42:25","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}