{"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\/et\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Kuidas mitte surra, kui tead vaid Oracle'it","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr.<\/p>\n<p>Minu nimi on Misha Butrimov ja sooviksin r\u00e4\u00e4kida Cassandra'st. Minu jutt on kasulik neile, kes pole kunagi NoSQL-iga kokku puutunud \u2014 sellel on palju teostuse erip\u00e4rasid ja peidetud v\u00f5tteid, millest on hea teada. Kui olete n\u00e4inud vaid Oracle'it v\u00f5i m\u00f5nda muud relatsioonilist andmebaasi, siis need teadmised v\u00f5ivad teie elu palju kergemaks teha.<\/p>\n<p>Miks on Cassandra hea? See on NoSQL-andmebaas, mis on projekteeritud ilma \u00fchegi rikke punktita ja millel on suurep\u00e4rane skaleeritavus. Kui peate lisama paar terabaiti andmeid, lisate lihtsalt s\u00f5lmed ringi. Soovite selle laiendada teise andmekeskusesse? Lisage s\u00f5lmed klastrisse. Kas soovite suurendada t\u00f6\u00f6deldud RPS-i? Lisage s\u00f5lmed klastrisse. Sama kehtib ka vastupidiselt. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Kuidas mitte surra, kui tead vaid Oracle&#039;it\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Milles veel on see hea? Paljude p\u00e4ringute t\u00f6\u00f6tlemises. Aga palju \u2014 kui palju? 10, 20, 30, 40 tuhat p\u00e4ringut sekundis on natuke. 100 tuhat p\u00e4ringut sekundis kirjutamiseks \u2014 samuti. On ettev\u00f5tteid, kes v\u00e4idavad, et nad hoiavad 2 miljonit p\u00e4ringut sekundis. Neile tuleb vist uskuda. <\/p>\n<p>Ja Cassandra'l on \u00fcks suur erinevus relatsioonilistest andmetest \u2014 see ei sarnane neile \u00fcldse. Ja seda on v\u00e4ga oluline meeles pidada.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Mitte k\u00f5ik, mis v\u00e4lja n\u00e4eb sarnane, ei t\u00f6\u00f6ta sarnaselt.<\/h2>\n<p>\nKord k\u00fcsis \u00fcks kolleeg: \u00abSiin on CQL, Cassandra p\u00e4ringukeel, ja seal on select-lause, seal on where, seal on and. Ma kirjutan t\u00e4hti, aga see ei t\u00f6\u00f6ta. Miks?\u00bb. Kui suhtuda Cassandra'sse nagu relatsioonilisse andmebaasi, siis on see ideaalne viis elu l\u00f5petamiseks. Ja ma ei propageeri seda, see on Venemaal keelatud. Te lihtsalt projekteerite midagi valesti.<\/p>\n<p>N\u00e4iteks tuleb tellija ja \u00fctleb: \u00abEhitage meile andmebaas sarjade jaoks v\u00f5i retseptide infos\u00fcsteem. Meil on seal roogasid koos koostisosadega v\u00f5i nimekiri sarjadest ja n\u00e4itlejatest\u00bb. Meil on r\u00f5\u00f5m: \u00abTeeme seda!\u00bb. See on kaks bait'i edasi saata, paar tabelit ja k\u00f5ik on valmis, k\u00f5ik t\u00f6\u00f6tab v\u00e4ga kiiresti ja usaldusv\u00e4\u00e4rselt. Ja k\u00f5ik on suurep\u00e4rane, kuni tellijad ei tule ja \u00fctle, et koduperenaised lahendavad veel ka vastupidi \u00fclesande: neil on nimekiri koostisosadest ja nad tahavad teada, millist rooga nad soovivad valmistada. Te olete n\u00fc\u00fcd hukule m\u00e4\u00e4ratud.<\/p>\n<p>Selle p\u00f5hjuseks on see, et Cassandra on h\u00fcbriidandmebaas: see on samal ajal nii v\u00f5tmev\u00e4\u00e4rtus kui ka salvestab andmeid laias veergudes. Java v\u00f5i Kotlin keeles v\u00f5iks seda niimoodi kirjeldada:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&lt;ColumnKey, ColumnValue&gt;&gt;<\/code><\/p>\n<p>See t\u00e4hendab, et kaardis on sees veel j\u00e4rjestatud kaart. Esimene v\u00f5ti selles kaardis on Row key ehk Partition key \u2014 partitsioneerimise v\u00f5ti. Teine v\u00f5ti, mis viib juba j\u00e4rjestatud kaardini, on Clustering key.<\/p>\n<p>Andmebaasi hajutatusest illustreerimiseks joonistame kolm s\u00f5lme. N\u00fc\u00fcd on vaja m\u00f5ista, kuidas andmed s\u00f5lmedele jaotada. Sest kui me paneme k\u00f5ik \u00fchte (s\u00f5lmi v\u00f5ib olla tuhandeid, kahte tuhat, viit \u2014 kui palju tahes), ei ole see just v\u00e4ga hajutatud. Seet\u00f5ttu on meil vaja matemaatilist funktsiooni, mis tagastab arvu. Lihtsalt numbri, pika int'i, mis j\u00e4\u00e4b teatud vahemikku. Ja meil on \u00fcks s\u00f5lm, mis vastutab \u00fche vahemiku eest, teine \u2014 teise, n-nes \u2014 n-nda. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Kuidas mitte surra, kui tead vaid Oracle&#039;it\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee number saadakse hash-funktsiooni abil, mida rakendatakse just sellele, mida me nimetame Partition key. See on see veerg, mis on toodud Primary key direktiivis, ja see veerg, mis on esialgne ja peamine kaardistamise v\u00f5ti. See m\u00e4\u00e4rab, millised andmed j\u00f5uavad millisele s\u00f5lmele. Tabel luuakse Cassandras peaaegu sama s\u00fcntaksiga nagu SQL-is: <\/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>Primary key koosneb antud juhul \u00fchest veerust, mis on samas ka partitseerimise v\u00f5ti.<\/p>\n<p>Kuidas meie kasutajad jaotuvad? Osa l\u00e4heb \u00fchele s\u00f5lmele, osa teisele ja osa kolmandale. Tulemuseks on tavaline hash-tabel, see on ka kaardistus, Pythonis on see s\u00f5nastik, samuti on see lihtne Key value-struktuur, mille kaudu saame lugeda k\u00f5iki v\u00e4\u00e4rtusi ning lugeda ja kirjutada v\u00f5tme abil.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Kuidas mitte surra, kui tead vaid Oracle&#039;it\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: kui allow filtering muutub full scan-iks, v\u00f5i kuidas mitte teha<\/h2>\n<p>\nKirjutame mingi select statementi: <code>select * from users where user_id = <\/code>. Tundub, et asi on Oracle\u2019i moodi: kirjutame select, m\u00e4\u00e4rame tingimused ja k\u00f5ik t\u00f6\u00f6tab, kasutajad saadakse k\u00e4tte. Kuid kui valida n\u00e4iteks kasutaja, kellel on teatud s\u00fcnniaasta, siis Cassandra \u00fctleb, et ei saa p\u00e4ringut t\u00e4ita. Sest tal ei ole aimugi, kuidas meie andmed s\u00fcnniaasta kohta jaotuvad \u2014 tal on ainus v\u00f5tme veerg. Siis ta \u00fctleb: \u201eHea k\u00fcll, ma saan siiski seda p\u00e4ringut t\u00e4ita. Lisage allow filtering.\u201d Me lisame direktiivi ja k\u00f5ik t\u00f6\u00f6tab. Ja sel hetkel juhtub kohutav asi. <\/p>\n<p>Kui me katsetame testandmetega, siis on k\u00f5ik suurep\u00e4rane. Aga kui teete p\u00e4ringu tootmises, kus meil on n\u00e4iteks 4 miljonit kirjet, siis ei ole meil asjad just v\u00e4ga h\u00e4sti. Sest allow filtering \u2014 see on direktiiv, mis lubab Cassandrale koguda k\u00f5ik andmed sellest tabelist k\u00f5igilt s\u00f5lmedelt, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/kompaniya\/data-centers\/\"   title=\"andmekeskustega\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">andmekeskustega<\/a> (kui neid on palju selles klastris), ja siis alles seej\u00e4rel filtreerida. See on analoogne Full Scan\u2019iga ja v\u00e4hesed on sellest elevil. <\/p>\n<p>Kui me vajaksime kasutajaid ainult identifikaatorite j\u00e4rgi, sobiks see meile. Kuid m\u00f5nikord peame esitama teisi p\u00e4ringuid ja kehtestama muid filtreid. Seega peame meeles: see k\u00f5ik on meil kaart, millel on partitsioneerimisv\u00f5ti, kuid selle sees on sorteeritud kaart. <\/p>\n<p>Ja sellel on samuti v\u00f5ti, mida nimetame Clustering Key. See v\u00f5ti koosneb veergudest, mille valime, millega Cassandra m\u00f5istab, kuidas andmed f\u00fc\u00fcsiliselt sorteeritakse ja igas s\u00f5lmes paiknevad. See t\u00e4hendab, et teatud Partition key jaoks Clustering key \u00fctleb, kuidas t\u00e4pselt andmed sellele puule suruda, kuhu nad seal j\u00e4\u00e4vad.<\/p>\n<p>See on t\u00f5eliselt puu, seal kutsutakse lihtsalt esile komparaator, kuhu edastame teatud veergude kogumi objektina, ja see m\u00e4\u00e4ratakse samuti veergude loendina. <\/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>P\u00f6\u00f6rake t\u00e4helepanu primaarv\u00f5tme direktiivile: selle esimene argument (meie juhul aasta) on alati partitsiooniv\u00f5ti. See v\u00f5ib koosneda \u00fchest v\u00f5i mitmest veerust, see pole oluline. Kui veerge on mitu, tuleb see veel korra sulgudesse panna, et keele eelt\u00f6\u00f6tleja m\u00f5istaks, et tegemist on t\u00f5epoolest primaarv\u00f5tmega, mille j\u00e4rel j\u00e4rgivad k\u00f5ik teised veerud - sissetulev v\u00f5ti. Samuti edastatakse need v\u00f5rreldes selles j\u00e4rjekorras, milles need on. See t\u00e4hendab, et esimene veerg on olulisem, teine - v\u00e4hem oluline ja nii edasi. Nagu me kirjutame andmep\u00e4ringute klasside puhul, n\u00e4iteks v\u00f5rreldes: loetleme veerud ja m\u00e4\u00e4rame, millised on olulisemad ja millised v\u00e4hem. Cassandra's on see tinglikult \u00f6eldes andmep\u00e4ringu klassi veerud, millele rakendatakse kirjutatud v\u00f5rreldes.<\/p>\n<h2>Seame sorteerimise, rakendame piiranguid<\/h2>\n<p>\nOluline on meeles pidada, et sorteerimisj\u00e4rjekord (kas kasvav, kahanev v\u00f5i \u00fcksk\u00f5ik milline) m\u00e4\u00e4ratakse hetkel, mil luuakse v\u00f5ti, ja seda ei saa hiljem muuta. See m\u00e4\u00e4rab f\u00fc\u00fcsiliselt, kuidas andmed j\u00e4rjestatakse ja kuhu need paigutatakse. Kui on vajalik muuta Clustering key v\u00f5i sorteerimisj\u00e4rjekorda, tuleb luua uus tabel ja andmed sinna \u00fcle kanda. Niisuguse juba olemasolevaga ei saa nii teha.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Kuidas mitte surra, kui tead vaid Oracle&#039;it\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOleme t\u00e4itnud oma tabeli kasutajatega ja n\u00e4inud, et nad on j\u00e4rjestatud alguses s\u00fcnniaja j\u00e4rgi ja siis sees igas s\u00f5lmes palga ja kasutaja ID j\u00e4rgi. N\u00fc\u00fcd saame teha valikuid, seades piirangud. <\/p>\n<p>Kordub taas meie t\u00f6\u00f6tav <code>where, and<\/code>, ja kasutajad saavad meile ning k\u00f5ik on j\u00e4lle h\u00e4sti. Kuid kui proovime kasutada ainult osa Clustering key'ist, mis on v\u00e4hem t\u00e4htis, siis Cassandra \u00fctleb kohe, et ei leia meie kaardilt kohta, kus see objekt, millel on need v\u00e4ljad komparatorina null, ja kus on see, mille just m\u00e4\u00e4rasime, \u2014 kus see asub. Pean j\u00e4lle k\u00f5ik andmed sellest s\u00f5lmest \u00fcles t\u00f5stma ja need filtreerima. Ja see on analoogne Full Scan'iga s\u00f5lme piires, see on halb.<\/p>\n<h2>Igas olukorras loo uus tabel.<\/h2>\n<p>\nKui soovime, et saaksime kasutajaid ID, vanuse v\u00f5i palga alusel leida, siis mida teha? Mitte midagi. Tuleb lihtsalt kasutada kahte tabelit. Kui kasutajaid tuleb leida kolme erineva meetodi j\u00e4rgi, siis on tabeleid kolm. Need ajad on m\u00f6\u00f6das, kui p\u00fc\u00fcdsime kettaruumi kokku hoida. See on odavaim ressurss. See maksab tunduvalt v\u00e4hem kui vastusaeg, mis v\u00f5ib kasutajale saatuslikuks osutuda. Kasutajale on palju meeldivam saada midagi sekundiga, kui 10 minutiga.<\/p>\n<p>Measime suuruse, denormaliseeritud andmete peale v\u00f5imaldame paremat skaleerimist ja usaldusv\u00e4\u00e4rset toimimist. Tegelikult v\u00f5ib klaster, mis koosneb kolmest andmekeskusest, milles igas on viis s\u00f5lme, taluda \u00fche andmekeskuse t\u00e4ielikku kadumist, s\u00e4ilitades samas andmete vastuv\u00f5etava taseme (kui midagi kindlasti ei kaota). Ja veel kaks s\u00f5lme igas kahes \u00fclej\u00e4\u00e4nud. Ja alles p\u00e4rast seda algavad probleemid. See on \u00fcsna hea varundamine, mis maksab paar-kolm liigsest SSD-diskist ja protsessorist. Seega, et kasutada Cassandrat, mis ei ole SQL, kus pole seoseid ega v\u00e4liseid v\u00f5tmeid, tuleb teadmisi omada lihtsatest reeglitest.<\/p>\n<p>Kujundame k\u00f5ik alates p\u00e4ringust. Peamine ei ole andmed, vaid see, kuidas rakendus nendega t\u00f6\u00f6tama hakkab. Kui rakendus vajab erinevate andmete saamist erinevates viisides v\u00f5i sama andme saamiseks erinevates viisides, peame need paigaldama selliselt, et see oleks rakendusele mugav. Vastasel juhul sattume Full Scan'i, ja Cassandra ei too meile mingit eelist.<\/p>\n<p>Andmed denormeerida on normaalne. Unustame normaalsed vormid, meil ei ole enam relatsioonilisi andmebaase. Paneme midagi 100 korda ja see j\u00e4\u00e4b 100 korda. See on ikka odavam kui puruneda. <\/p>\n<p>Valime partitsioneerimiseks v\u00f5tmed nii, et need oleks korralikult jaotatud. Me ei taha, et meie v\u00f5tmete hash satuks kitsasse vahemikku. Ehkki, s\u00fcnniaasta eeltoodud n\u00e4ites on halb n\u00e4ide. Tegelikult on see hea, kui meie kasutajad on s\u00fcnniaasta j\u00e4rgi korralikult jaotatud, ja halb, kui tegemist on 5. klassi \u00f5pilastega \u2014 seal ei toimi partitsioneerimine h\u00e4sti. <\/p>\n<p>Sorteerimine valitakse \u00fcks kord Clustering Key loomise etapis. Kui seda on vaja muuta, tuleb meie tabel teise v\u00f5tmega \u00fcmber t\u00f5sta.<\/p>\n<p>Ja k\u00f5ige t\u00e4htsam: kui meil on vaja andmeid 100 erineval viisil k\u00e4tte saada, peame meil olema 100 erinevat tabelit.<br \/>\n<br \/>Allikas: <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 4.9.10 - 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. \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\" \/>\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\/et\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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. Kuidas mitte hukka saada, kui tead vaid Oracle'it | ProHoster","description":"Tere, Habr. Mina olen Misha Butrimov ja tahaksin r\u00e4\u00e4kida natuke Cassandra'st. Minu jutustus on kasulik neile, kes pole kunagi NoSQL-andmebaasidega kokku puutunud \u2014 sellel on palju rakenduse erip\u00e4ra ja k\u00e4\u00e4nakuid, mida on oluline teada. Ja kui oled n\u00e4inud vaid Oracle'it v\u00f5i m\u00f5nda muud relationaalset andmebaasi, on need asjad...","canonical_url":"https:\/\/prohoster.info\/et\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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. \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}