{"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\/ro\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bun\u0103, Habr.<\/p>\n<p>M\u0103 numesc Misha Butrimov \u0219i a\u0219 dori s\u0103 v\u0103 povestesc pu\u021bin despre Cassandra. Povestea mea va fi util\u0103 celor care nu au avut niciodat\u0103 de-a face cu bazele de date NoSQL \u2014 are foarte multe particularit\u0103\u021bi de implementare \u0219i capcane ascunse, despre care trebuie s\u0103 \u0219ti\u021bi. \u0218i, dac\u0103 nu a\u021bi v\u0103zut nimic \u00een afar\u0103 de Oracle sau de orice alt\u0103 baz\u0103 de date rela\u021bional\u0103, aceste lucruri v\u0103 vor salva via\u021ba.<\/p>\n<p>Ce este bun la Cassandra? Este o baz\u0103 de date NoSQL, proiectat\u0103 f\u0103r\u0103 un singur punct de e\u0219ec, care se scalabilizeaz\u0103 bine. Dac\u0103 ave\u021bi nevoie s\u0103 ad\u0103uga\u021bi c\u00e2teva terabytes la o baz\u0103 de date, pur \u0219i simplu ad\u0103uga\u021bi noduri \u00een ring. Dori\u021bi s\u0103 o extinde\u021bi c\u0103tre un alt centru de date? Ad\u0103uga\u021bi noduri \u00een cluster. Dori\u021bi s\u0103 cre\u0219te\u021bi RPS-ul procesat? Ad\u0103uga\u021bi noduri \u00een cluster. Func\u021bioneaz\u0103 \u0219i \u00een direc\u021bia opus\u0103. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u00cen ce altceva este bun\u0103? \u00cen a procesa multe cereri. Dar multe \u2014 c\u00e2te? 10, 20, 30, 40 de mii de cereri pe secund\u0103 \u2014 asta este pu\u021bin. 100 de mii de cereri pe secund\u0103 pentru scriere \u2014 de asemenea. Exist\u0103 companii care au spus c\u0103 men\u021bin 2 milioane de cereri pe secund\u0103. Poate c\u0103 va trebui s\u0103 le credem. <\/p>\n<p>\u0218i, \u00een principiu, Cassandra are o mare diferen\u021b\u0103 fa\u021b\u0103 de datele rela\u021bionale \u2014 nu seam\u0103n\u0103 deloc cu ele. \u0218i este foarte important s\u0103 re\u021bine\u021bi acest lucru.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nu tot ce pare identic func\u021bioneaz\u0103 identic<\/h2>\n<p>\nOdat\u0103, un coleg a venit la mine \u0219i a \u00eentrebat: \u201eIat\u0103 SQL-ul Cassandra, \u0219i are o instruc\u021biune select, are un where, are un and. Eu scriu litere, dar nu func\u021bioneaz\u0103. De ce?\u201d. Dac\u0103 te raportezi la Cassandra ca la o baz\u0103 de date rela\u021bional\u0103, acesta este cel mai bun mod de a-\u021bi \u00eencheia via\u021ba \u00eentr-un mod brutal. \u0218i nu promovez asta, este interzis \u00een Rusia. Pur \u0219i simplu vei proiecta ceva gre\u0219it.<\/p>\n<p>De exemplu, vine un client \u0219i spune: \u201eS\u0103 construim o baz\u0103 de date pentru seriale sau o baz\u0103 de date pentru un repertoriu de re\u021bete. Vom avea feluri de m\u00e2ncare cu ingrediente sau o list\u0103 de seriale \u0219i actori \u00een acestea\u201d. R\u0103spundem cu bucurie: \u201eSigur!\u201d. Aceasta este doar o chestiune de a trimite dou\u0103 byte, c\u00e2teva tabele \u0219i totul este gata, totul va func\u021biona foarte repede \u0219i fiabil. \u0218i totul merge perfect, p\u00e2n\u0103 c\u00e2nd clien\u021bii vin \u0219i spun c\u0103 gospodinele vor s\u0103 rezolve \u0219i problema invers\u0103: au o list\u0103 de ingrediente \u0219i vor s\u0103 afle ce fel de m\u00e2ncare vor s\u0103 prepare. E\u0219ti terminat.<\/p>\n<p>Totul este pentru c\u0103 Cassandra este o baz\u0103 de date hibrid\u0103: este at\u00e2t key value, c\u00e2t \u0219i stocheaz\u0103 date \u00een coloane largi. Dac\u0103 am vorbi \u00een termeni de Java sau Kotlin, s-ar putea descrie astfel:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&lt;ColumnKey, ColumnValue&gt;&gt;<\/code><\/p>\n<p>Adic\u0103 o hart\u0103, \u00een interiorul c\u0103reia se afl\u0103 \u0219i o hart\u0103 sortat\u0103. Prima cheie la aceast\u0103 hart\u0103 este Row key sau Partition key \u2014 cheia de parti\u021bionare. A doua cheie, care este cheia pentru harta deja sortat\u0103, este Clustering key.<\/p>\n<p>Pentru a ilustra distribu\u021bia bazei de date, s\u0103 desen\u0103m trei noduri. Acum trebuie s\u0103 \u00een\u021belegem cum s\u0103 distribuim datele pe noduri. Pentru c\u0103 dac\u0103 vom pune totul \u00eentr-un singur nod (de altfel, pot fi o mie, dou\u0103 mii, cinci \u2014 c\u00e2te vrem), aceasta nu este deloc despre distribu\u021bie. De aceea, avem nevoie de o func\u021bie matematic\u0103 care va returna un num\u0103r. Pur \u0219i simplu un num\u0103r, un int lung, care va c\u0103dea \u00eentr-un anumit interval. \u0218i un nod va r\u0103spunde pentru un interval, al doilea \u2014 pentru al doilea, al n-lea \u2014 pentru al n-lea. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcest num\u0103r este ob\u021binut printr-o func\u021bie de hash, care se aplic\u0103 tocmai la ceea ce numim Partition key. Aceasta este coloana care este specificat\u0103 \u00een directiva Primary key, \u0219i este coloana care va fi prima \u0219i cea mai important\u0103 cheie a h\u0103r\u021bii. Ea determin\u0103 c\u0103tre ce noduri vor ajunge datele. Tabelul se creeaz\u0103 \u00een Cassandra aproape cu acela\u0219i sintax\u0103 ca \u00een SQL: <\/p>\n<pre><code class=\"sql\">CREATE TABLE users (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY(user_id)\n\n)\n<\/code><\/pre>\n<p>Cheia principal\u0103 \u00een acest caz const\u0103 dintr-o singur\u0103 coloan\u0103, iar aceasta este \u0219i cheia de parti\u021bionare.<\/p>\n<p>Cum se vor distribui utilizatorii? O parte vor ajunge pe un nod, o parte pe altul, iar o parte pe al treilea. Rezultatul este o tabel\u0103 de hash obi\u0219nuit\u0103, adic\u0103 o hart\u0103, care \u00een Python se nume\u0219te dic\u021bionar, adic\u0103 o simpl\u0103 structur\u0103 Key value, din care putem citi toate valorile, citind \u0219i scriind dup\u0103 cheie.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: c\u00e2nd allow filtering se transform\u0103 \u00eentr-un full scan, sau cum nu ar trebui s\u0103 facem<\/h2>\n<p>\nHai s\u0103 scriem o declara\u021bie select: <code>select * from users where userid = <\/code>. Aparent trebuie s\u0103 func\u021bioneze ca \u00een Oracle: scriem select, specific\u0103m condi\u021biile \u0219i totul merge, utilizatorii sunt extrasi. Dar, dac\u0103 alegem, de exemplu, un utilizator cu o anumit\u0103 dat\u0103 de na\u0219tere, Cassandra se pl\u00e2nge c\u0103 nu poate executa interogarea. Pentru c\u0103 nu \u0219tie nimic despre cum sunt distribuite datele despre anul na\u0219terii \u2014 are ca \u0219i cheie doar o singur\u0103 coloan\u0103. Atunci spune: \u201eBine, pot s\u0103 execut \u00een continuare aceast\u0103 interogare. Ad\u0103uga\u021bi allow filtering\u201d. Ad\u0103ug\u0103m aceast\u0103 directiv\u0103, totul func\u021bioneaz\u0103. \u0218i \u00een acel moment se \u00eent\u00e2mpl\u0103 ceva teribil. <\/p>\n<p>C\u00e2nd rul\u0103m pe date de testare, totul decurge perfect. Dar c\u00e2nd executa\u021bi o interogare \u00een produc\u021bie, unde avem, de exemplu, 4 milioane de \u00eenregistr\u0103ri, atunci lucrurile nu merg prea bine. Pentru c\u0103 allow filtering \u2014 aceast\u0103 directiv\u0103 permite Cassandrei s\u0103 adune toate datele din tabloul acesta de pe toate nodurile, toate <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/kompaniya\/data-centers\/\"   title=\"a centrelor de date\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">a centrelor de date<\/a> (dac\u0103 sunt multe \u00een acest cluster), \u0219i doar apoi s\u0103 filtreze. Este similar cu un Full Scan, \u0219i cu greu ar putea s\u0103-l plac\u0103 cuiva. <\/p>\n<p>Dac\u0103 am fi avut nevoie de utilizatori doar dup\u0103 identificatori, ne-ar fi convenit. Dar uneori trebuie s\u0103 scriem alte interog\u0103ri \u0219i s\u0103 aplic\u0103m alte restric\u021bii asupra selec\u021biei. Prin urmare, ne amintim: este o hart\u0103, care are o cheie de partitionare, dar \u00een interiorul ei \u2014 o hart\u0103 sortat\u0103. <\/p>\n<p>\u0218i are \u0219i o cheie, pe care o numim Clustering Key. Aceast\u0103 cheie, care, la r\u00e2ndul ei, const\u0103 din coloanele pe care le alegem, permite Cassandrei s\u0103 \u00een\u021beleag\u0103 cum sunt datele fizic sortate \u0219i vor fi stocate pe fiecare nod. Adic\u0103, pentru un anumit Partition key, Clustering key ne va spune cum s\u0103 introducem exact datele \u00een acest arbore, ce loc vor ocupa acolo.<\/p>\n<p>Este \u00eentr-adev\u0103r un arbore, se apeleaz\u0103 un comparator, \u00een care transmitem un set de coloane sub form\u0103 de obiect, iar acesta este, de asemenea, definit sub form\u0103 de enumerare de coloane. <\/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>Aten\u021bie la directivele Primary key; primul argument (\u00een cazul nostru, anul) este \u00eentotdeauna Partition key. Acesta poate consta din una sau mai multe coloane, nu conteaz\u0103. Dac\u0103 sunt mai multe coloane, trebuie s\u0103 le punem din nou \u00eentre paranteze, astfel \u00eenc\u00e2t preprocesorul limbajului s\u0103 \u00een\u021beleag\u0103 c\u0103 acesta este de fapt Primary key, iar celelalte coloane sunt Clustering key. Acestea vor fi transmise \u00een comparator \u00een ordinea \u00een care apar. A\u0219adar, prima coloan\u0103 este mai semnificativ\u0103, a doua este mai pu\u021bin semnificativ\u0103 \u0219i a\u0219a mai departe. A\u0219a cum facem pentru clasele de date, de exemplu, pentru c\u00e2mpurile equals: enumer\u0103m c\u00e2mpurile \u0219i specific\u0103m care sunt mai mari \u0219i care sunt mai mici. \u00cen Cassandra, acestea sunt, \u00eentr-un fel, c\u00e2mpurile clasei de date la care se va aplica equals scris pentru aceasta.<\/p>\n<h2>Stabilim ordinea, impunem restric\u021bii<\/h2>\n<p>\nTrebuie s\u0103 \u021binem cont c\u0103 ordinea de sortare (descresc\u0103toare, cresc\u0103toare, nu conteaz\u0103) este stabilit\u0103 \u00een momentul \u00een care se creeaz\u0103 cheia \u0219i nu va putea fi modificat\u0103 ulterior. Aceasta define\u0219te fizic cum vor fi sortate datele \u0219i cum vor fi stocate. Dac\u0103 va fi necesar\u0103 modificarea Clustering key sau a ordinii de sortare, va trebui s\u0103 cre\u0103m un nou tabel \u0219i s\u0103 transfer\u0103m datele \u00een acesta. Cu cel existent nu va fi posibil.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAm umplut tabela noastr\u0103 cu utilizatori \u0219i am observat c\u0103 ace\u0219tia s-au aranjat \u00eentr-un cerc ini\u021bial pe baza anului na\u0219terii \u0219i apoi, \u00een cadrul fiec\u0103rei noduri, pe baza salariului \u0219i a ID-ului utilizatorului. Acum putem face selec\u021bii, impun\u00e2nd restric\u021bii. <\/p>\n<p>Se reaprinde iar\u0103\u0219i activitatea noastr\u0103 <code>unde, \u0219i<\/code>, iar utilizatorii ne vin, \u0219i totul este din nou bine. Dar dac\u0103 vom \u00eencerca s\u0103 folosim doar o parte a Clustering key, \u0219i anume cea mai pu\u021bin semnificativ\u0103, Cassandra va semnala imediat c\u0103 nu poate g\u0103si loca\u021bia \u00een mapa noastr\u0103 unde acest obiect, al c\u0103rui c\u00e2mp pentru comparator este null, iar acesta, pe care tocmai l-am specificat, \u2014 unde este p\u0103strat. Va trebui s\u0103 refac \u00eentreaga dat\u0103 de la aceast\u0103 nod\u0103 \u0219i s\u0103 le filtrez. Acesta este echivalentul unui Full Scan \u00een cadrul nodului, ceea ce este negativ.<\/p>\n<h2>\u00cen orice situa\u021bie neclar\u0103, creeaz\u0103 un nou tabel<\/h2>\n<p>\nDac\u0103 dorim s\u0103 acces\u0103m utilizatorii dup\u0103 ID sau dup\u0103 v\u00e2rst\u0103, sau dup\u0103 salariu, ce trebuie s\u0103 facem? Nimic. Pur \u0219i simplu folosim dou\u0103 tabele. Dac\u0103 va fi necesar s\u0103 acces\u0103m utilizatorii \u00een trei moduri diferite, vor fi trei tabele. Timpurile \u00een care economiseam spa\u021biu pe hard disk au trecut. Acesta este cel mai ieftin resurs\u0103. Este mult mai ieftin dec\u00e2t timpul de r\u0103spuns, care poate fi distructiv pentru utilizator. Utilizatorului \u00eei este mult mai pl\u0103cut s\u0103 primeasc\u0103 ceva \u00een secund\u0103 dec\u00e2t \u00een 10 minute.<\/p>\n<p>Schimb\u0103m spa\u021biul ocupat \u00een exces, datele denormalizate pentru capacitatea de a scalabiliza corect \u0219i de a func\u021biona fiabil. De fapt, un cluster format din trei centre de date, fiecare av\u00e2nd c\u00e2te cinci noduri, la un nivel acceptabil de reten\u021bie a datelor (c\u00e2nd nu se pierd deloc date), este capabil s\u0103 supravie\u021buieasc\u0103 distrugerii complet a unui centru de date. \u0218i \u00eenc\u0103 dou\u0103 noduri \u00een cele dou\u0103 centre r\u0103mase. \u0218i abia dup\u0103 aceasta vor \u00eencepe problemele. Acesta este un sistem de rezervare destul de bun, cost\u0103 c\u00e2\u021biva SSD-uri \u0219i procesoare suplimentare. Prin urmare, pentru a utiliza Cassandra, care nu este SQL, care nu are rela\u021bii \u0219i chei externe, trebuie s\u0103 cunoa\u0219tem reguli simple.<\/p>\n<p>Proiect\u0103m totul din cerere. Ceea ce devine principal nu sunt datele, ci modul \u00een care aplica\u021bia va lucra cu ele. Dac\u0103 trebuie s\u0103 ob\u021bin\u0103 date diferite \u00een moduri diferite sau acelea\u0219i date \u00een moduri diferite, trebuie s\u0103 le stoc\u0103m \u00een modul \u00een care va fi convenabil pentru aplica\u021bie. Altfel, vom c\u0103dea \u00een Full Scan \u0219i niciun avantaj al Cassandra nu ne va ajuta.<\/p>\n<p>Denormalizarea datelor este norma. S\u0103 uit\u0103m de formele normale, nu mai avem baze de date rela\u021bionale. Dac\u0103 stoc\u0103m ceva de 100 de ori, va fi stocat de 100 de ori. Este totu\u0219i mai ieftin dec\u00e2t a \u00eencetini. <\/p>\n<p>Alegem cheile pentru parti\u021bionare astfel \u00eenc\u00e2t s\u0103 fie distribuite uniform. Nu avem nevoie ca hash-ul cheilor noastre s\u0103 cad\u0103 \u00eentr-un interval restrictiv. Asta \u00eenseamn\u0103 c\u0103 anul na\u0219terii \u00een exemplul de mai sus este un exemplu slab. Adic\u0103, este bun dac\u0103 utilizatorii sunt distribui\u021bi uniform pe anul na\u0219terii, \u0219i slab dac\u0103 ne referim la elevii din clasa a cincea - acolo nu se va parti\u021biona bine. <\/p>\n<p>Sortarea se alege o singur\u0103 dat\u0103 \u00een etapa de creare a Cheii de Clustrare. Dac\u0103 trebuie s\u0103 o schimb\u0103m, va trebui s\u0103 re\u00eenc\u0103rc\u0103m tabela noastr\u0103 cu o alt\u0103 cheie.<\/p>\n<p>\u0218i cel mai important: dac\u0103 trebuie s\u0103 extragem acelea\u0219i date \u00een 100 de moduri diferite, va trebui s\u0103 avem 100 de tabele diferite.<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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. Cum s\u0103 nu mori dac\u0103 \u0219tii doar Oracle | ProHoster","description":"Salut, Habr. M\u0103 numesc Misha Butrimov \u0219i a\u0219 dori s\u0103 v\u0103 povestesc pu\u021bin despre Cassandra.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}