{"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\/hu\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Hogyan ne halj meg, ha csak Oracle-t ismersz.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hell\u00f3, Habr.<\/p>\n<p>A nevem Misha Butrimov, \u00e9s szeretn\u00e9k egy kicsit mes\u00e9lni a Cassandr\u00e1r\u00f3l. A t\u00f6rt\u00e9netem hasznos lesz azok sz\u00e1m\u00e1ra, akik soha nem tal\u00e1lkoztak NoSQL adatb\u00e1zisokkal \u2014 rengeteg megval\u00f3s\u00edt\u00e1si saj\u00e1toss\u00e1ga \u00e9s buktat\u00f3ja van, amir\u0151l tudni \u00e9rdemes. Ha csak az Oracle-lal vagy b\u00e1rmilyen m\u00e1s rel\u00e1ci\u00f3s adatb\u00e1zissal ismerkedt\u00e9l meg, ezek a dolgok megmenthetik az \u00e9leted.<\/p>\n<p>Miben j\u00f3 a Cassandra? Ez egy NoSQL adatb\u00e1zis, amelyet \u00fagy terveztek, hogy ne legyen egyetlen hibapontja, \u00e9s j\u00f3l sk\u00e1l\u00e1zhat\u00f3. Ha p\u00e1r terab\u00e1jtot szeretn\u00e9l hozz\u00e1adni az adatb\u00e1zishoz, egyszer\u0171en csak \u00faj csom\u00f3pontokat adsz a gy\u0171r\u0171h\u00f6z. Szeretn\u00e9d egy \u00faj adatk\u00f6zponttal b\u0151v\u00edteni? Csom\u00f3pontokat adsz a klaszterhez. N\u00f6velni akarod a feldolgozhat\u00f3 RPS-t? \u00daj csom\u00f3pontokat adsz a klaszterhez. Visszafel\u00e9 is m\u0171k\u00f6dik. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Hogyan ne halj meg, ha csak Oracle-t ismersz.\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Miben m\u00e9g j\u00f3? Abban, hogy rengeteg k\u00e9r\u00e9st tud kezelni. De mennyi az sok? 10, 20, 30, 40 ezer k\u00e9r\u00e9s m\u00e1sodpercenk\u00e9nt \u2014 ez m\u00e9g nem sok. 100 ezer k\u00e9r\u00e9s m\u00e1sodpercenk\u00e9nt \u00edr\u00e1skor \u2014 szint\u00e9n. Vannak c\u00e9gek, amelyek azt \u00e1ll\u00edtj\u00e1k, hogy 2 milli\u00f3 k\u00e9r\u00e9st tartanak m\u00e1sodpercenk\u00e9nt. Nos, nekik tal\u00e1n el kellene hinni. <\/p>\n<p>Alapvet\u0151en a Cassandra-nak van egy nagy k\u00fcl\u00f6nbs\u00e9ge a rel\u00e1ci\u00f3s adatokt\u00f3l \u2014 hogy egy\u00e1ltal\u00e1n nem hasonl\u00edt r\u00e1juk. Ezt fontos mindig \u00e9szben tartani.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nem minden, ami egyform\u00e1nak t\u0171nik, m\u0171k\u00f6dik is egyform\u00e1n.<\/h2>\n<p>\nEgyszer egy koll\u00e9g\u00e1m hozz\u00e1m j\u00f6tt, \u00e9s megk\u00e9rdezte: \u201eItt van az SQL Cassandra lek\u00e9rdez\u0151 nyelv, van benne select utas\u00edt\u00e1s, van benne where, van benne and. \u00cdrom a bet\u0171ket, \u00e9s nem m\u0171k\u00f6dik. Mi\u00e9rt?\u201d. Ha a Cassandr\u00e1t rel\u00e1ci\u00f3s adatb\u00e1zisk\u00e9nt kezeled, akkor ez a legjobb m\u00f3dja annak, hogy brut\u00e1lis \u00f6ngyilkoss\u00e1got k\u00f6vess el. \u00c9s nem n\u00e9pszer\u0171s\u00edtem, ez Oroszorsz\u00e1gban tilos. Csak egyszer\u0171en valamit rosszul fogsz tervezni.<\/p>\n<p>P\u00e9ld\u00e1ul, ha egy \u00fcgyf\u00e9l azt mondja nek\u00fcnk: \u201e\u00c9p\u00edts\u00fcnk egy adatb\u00e1zist sorozatok sz\u00e1m\u00e1ra, vagy egy adatb\u00e1zist receptk\u00f6nyvh\u00f6z. Lesznek benne \u00e9telek hozz\u00e1val\u00f3kkal vagy sorozatok \u00e9s sz\u00edn\u00e9szek list\u00e1ja.\u201d Mi \u00f6r\u00f6mmel mondjuk: \u201eT\u00f6k\u00e9letes!\u201d. Ez k\u00e9t b\u00e1jt \u00e1tkonvert\u00e1lni, p\u00e1r t\u00e1bla, \u00e9s m\u00e1r k\u00e9sz is van, minden nagyon gyorsan \u00e9s megb\u00edzhat\u00f3an fog m\u0171k\u00f6dni. \u00c9s minden csod\u00e1latos, am\u00edg az \u00fcgyfelek meg nem jelennek, \u00e9s nem mondj\u00e1k, hogy a h\u00e1ziasszonyok a visszaford\u00edtott feladatot akarj\u00e1k megoldani: van egy hozz\u00e1val\u00f3ik list\u00e1juk, \u00e9s szeretn\u00e9k tudni, milyen \u00e9telt akarnak f\u0151zni. Meg\u00f6lted magad.<\/p>\n<p>Mindez az\u00e9rt van, mert a Cassandra hibrid adatb\u00e1zis: egyszerre key-value \u00e9s sz\u00e9les oszlopokban t\u00e1rolja az adatokat. Java vagy Kotlin nyelven ezt \u00edgy lehetne le\u00edrni:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&lt;ColumnKey, ColumnValue&gt;&gt;<\/code><\/p>\n<p>Teh\u00e1t egy t\u00e9rk\u00e9p, amely bel\u00fcl m\u00e9g egy rendezett t\u00e9rk\u00e9pet tartalmaz. Ennek a t\u00e9rk\u00e9pnek az els\u0151 kulcsa a Row key vagy Partition key \u2014 a part\u00edcion\u00e1l\u00e1si kulcs. A m\u00e1sodik kulcs, amely a m\u00e1r rendezett t\u00e9rk\u00e9pre vonatkozik, a Clustering key.<\/p>\n<p>A b\u00e1zisadatok eloszl\u00e1s\u00e1nak szeml\u00e9ltet\u00e9s\u00e9re rajzoljunk h\u00e1rom csom\u00f3pontot. Most meg kell \u00e9rten\u00fcnk, hogyan oszthatjuk el az adatokat a csom\u00f3pontok k\u00f6z\u00f6tt. Mert ha mindent egybe nyomunk (amib\u0151l, mellesleg, lehet ezer, k\u00e9tezer, \u00f6t \u2014 ak\u00e1rmennyi), az nem nagyon a megoszt\u00e1sr\u00f3l sz\u00f3l. Ez\u00e9rt sz\u00fcks\u00e9g\u00fcnk van egy matematikai funkci\u00f3ra, amely visszaad egy sz\u00e1mot. Csak egy sz\u00e1m, egy hossz\u00fa int, ami egy adott tartom\u00e1nyba esik. Az egyik csom\u00f3pontunk felel egy tartom\u00e1ny\u00e9rt, a m\u00e1sodik egy m\u00e1sik\u00e9rt, az n-edik pedig az n-edik\u00e9rt. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Hogyan ne halj meg, ha csak Oracle-t ismersz.\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz a sz\u00e1m egy hash funkci\u00f3 seg\u00edts\u00e9g\u00e9vel ker\u00fcl meghat\u00e1roz\u00e1sra, amely \u00e9ppen arra vonatkozik, amit Partition key-nek nevez\u00fcnk. Ez az oszlop szerepel az alapkulcs (Primary key) direkt\u00edv\u00e1j\u00e1ban, \u00e9s ez az oszlop lesz a mappa els\u0151 \u00e9s legfontosabb kulcsa. Meghat\u00e1rozza, hogy mely adatok ker\u00fclj\u00f6n a csom\u00f3pontokra. A t\u00e1bl\u00e1zat n\u00e9h\u00e1nyahoz hasonl\u00f3 szintaxissal j\u00f6n l\u00e9tre a Cassandraban, mint az SQL-ben: <\/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>Az alapkulcs ebben az esetben egyetlen oszlopb\u00f3l \u00e1ll, \u00e9s ez az oszlop is egyben a part\u00edcion\u00e1l\u00e1si kulcs.<\/p>\n<p>Hogyan oszlanak el a felhaszn\u00e1l\u00f3k? Egy r\u00e9sz\u00fck egy csom\u00f3pontba ker\u00fcl, egy r\u00e9sz\u00fck egy m\u00e1sikba, \u00e9s egy r\u00e9sz\u00fck a harmadikba. Ez egy hagyom\u00e1nyos hash-t\u00e1bl\u00e1t eredm\u00e9nyez, amely egy t\u00e9rk\u00e9p, Pythonban egy sz\u00f3t\u00e1r, \u00e9s egy egyszer\u0171 key-value strukt\u00fara, amelyb\u0151l minden \u00e9rt\u00e9ket olvashatunk, olvashatunk \u00e9s \u00edrhatunk a kulcs alapj\u00e1n.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Hogyan ne halj meg, ha csak Oracle-t ismersz.\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: amikor az allow filtering teljes keres\u00e9ss\u00e9 alakul, vagy hogyan ne csin\u00e1ljuk<\/h2>\n<p>\n\u00cdrjunk valamilyen select utas\u00edt\u00e1st: <code>select * from users where userid = <\/code>. \u00dagy t\u0171nik, mint az Oracle-ban: \u00edrunk egy select-et, megadjuk a felt\u00e9teleket, \u00e9s minden m\u0171k\u00f6dik, a felhaszn\u00e1l\u00f3k megjelennek. De ha p\u00e9ld\u00e1ul egy konkr\u00e9t sz\u00fclet\u00e9si \u00e9v\u0171 felhaszn\u00e1l\u00f3t v\u00e1lasztunk ki, a Cassandra panaszkodik, hogy nem tudja v\u00e9grehajtani a lek\u00e9rdez\u00e9st. Mert nem tud semmit arr\u00f3l, hogyan oszlanak meg az adataink a sz\u00fclet\u00e9si \u00e9vr\u0151l - csak egy oszlop van megadva kulcsk\u00e9nt. Azt\u00e1n azt mondja: \u201eRendben, m\u00e9g mindig v\u00e9grehajthatom ezt a lek\u00e9rdez\u00e9st. Adjon hozz\u00e1 enged\u00e9lyezett sz\u0171r\u00e9st.\u201d Hozz\u00e1adjuk a direkt\u00edv\u00e1t, minden m\u0171k\u00f6dik. \u00c9s ebben a pillanatban valami sz\u00f6rny\u0171 t\u00f6rt\u00e9nik. <\/p>\n<p>Amikor tesztadatokkal dolgozunk, minden szuper. De amikor egy lek\u00e9rdez\u00e9st hajtunk v\u00e9gre a termel\u00e9sben, ahol p\u00e9ld\u00e1ul 4 milli\u00f3 rekordunk van, akkor nem \u00e1ll minden j\u00f3l. Mert az enged\u00e9lyezett sz\u0171r\u00e9s egy direkt\u00edva, amely lehet\u0151v\u00e9 teszi, hogy a Cassandra \u00f6sszegy\u0171jtse az \u00f6sszes adatot ebb\u0151l a t\u00e1bl\u00e1b\u00f3l minden node-r\u00f3l, minden <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/kompaniya\/data-centers\/\"   title=\"adatk\u00f6zpontok\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">adatk\u00f6zpontok<\/a> (ha sok van ebb\u0151l a klaszterben), \u00e9s csak ezut\u00e1n sz\u0171rhetj\u00fck le. Ez egy Full Scan anal\u00f3gi\u00e1ja, \u00e9s val\u00f3sz\u00edn\u0171leg senki sem lelkesedik \u00e9rte. <\/p>\n<p>Ha csak az azonos\u00edt\u00f3k alapj\u00e1n lenne sz\u00fcks\u00e9g\u00fcnk a felhaszn\u00e1l\u00f3kra, az megfelelne nek\u00fcnk. De n\u00e9ha m\u00e1s lek\u00e9rdez\u00e9seket kell \u00edrnunk, \u00e9s m\u00e1s korl\u00e1toz\u00e1sokat kell alkalmaznunk a kiv\u00e1laszt\u00e1sra. Ez\u00e9rt eml\u00e9kez\u00fcnk: ez mind egy t\u00e9rk\u00e9p, amelynek van egy part\u00edci\u00f3s kulcsa, de bel\u00fcl egy rendezett t\u00e9rk\u00e9p van. <\/p>\n<p>\u00c9s ennek is van egy kulcsa, amit Kluszterez\u00e9si Kulcsnak nevez\u00fcnk. Ez a kulcs, amely viszont oszlopokb\u00f3l \u00e1ll, amelyeket kiv\u00e1lasztunk, \u00e9s amelynek seg\u00edts\u00e9g\u00e9vel a Cassandra meg\u00e9rti, hogyan rendelje fizikai szempontb\u00f3l az adatokat, \u00e9s hol lesznek ezek minden node-on. Teh\u00e1t egy adott Part\u00edci\u00f3 kulcs eset\u00e9n a Kluszterez\u00e9si kulcs elmondja, hogyan kell az adatokat beilleszteni ebbe a f\u00e1ba, \u00e9s hol fognak elhelyezkedni.<\/p>\n<p>Ez val\u00f3ban egy fa, ahol csak h\u00edvjuk a kompar\u00e1tort, amelybe \u00e1tadunk egy bizonyos oszlopcsoportot objektum form\u00e1j\u00e1ban, \u00e9s azt is oszlopok felsorol\u00e1sak\u00e9nt hat\u00e1rozzuk meg. <\/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>Figyeljen a Primary key direkt\u00edv\u00e1ra, amelynek els\u0151 argumentuma (jelen esetben az \u00e9v) mindig Partition key. Ennek egy vagy t\u00f6bb oszlopb\u00f3l kell \u00e1llnia, ez nem sz\u00e1m\u00edt. Ha t\u00f6bb oszlop van, akkor azt m\u00e9g egyszer z\u00e1r\u00f3jelbe kell tenni, hogy a nyelv pre-processzora meg\u00e9rtse, hogy ez val\u00f3ban Primary key, ut\u00e1na j\u00f6nnek a t\u00f6bbi oszlop \u2014 Clustering key. Ezek a kompar\u00e1torban abban a sorrendben fognak \u00e1tker\u00fclni, ahogy \u00e1llnak. Teh\u00e1t az els\u0151 oszlop fontosabb, a m\u00e1sodik \u2014 kev\u00e9sb\u00e9 fontos \u00e9s \u00edgy tov\u00e1bb. Ahogyan a data class-okban \u00edrjuk, p\u00e9ld\u00e1ul az equals mez\u0151ket: felsoroljuk a mez\u0151ket, \u00e9s megadjuk, hogy melyik az er\u0151sebb, \u00e9s melyik a gyeng\u00e9bb. A Cassandraban ezek, mondhatni, a data class mez\u0151k, amelyekhez az equals m\u0171veletet alkalmazni fogj\u00e1k.<\/p>\n<h2>Be\u00e1ll\u00edtjuk a rendez\u00e9st, korl\u00e1toz\u00e1sokat alkalmazunk.<\/h2>\n<p>\nFontos megjegyezni, hogy a rendez\u00e9si sorrendet (cs\u00f6kken\u0151, n\u00f6vekv\u0151, mindegy) abban a pillanatban hat\u00e1rozzuk meg, amikor a kulcsot l\u00e9trehozzuk, \u00e9s ezt k\u00e9s\u0151bb m\u00e1r nem tudjuk megv\u00e1ltoztatni. Ez fizikailag meghat\u00e1rozza, hogy hogyan fognak a adatok rendez\u0151dni \u00e9s hogyan fognak elhelyezkedni. Ha v\u00e1ltoztatni kell a Clustering key-n vagy a rendez\u00e9si sorrenden, \u00faj t\u00e1bl\u00e1t kell l\u00e9trehozni \u00e9s az adatok \u00e1t\u00f6nt\u00e9se sz\u00fcks\u00e9ges. A m\u00e1r l\u00e9tez\u0151kkel ez nem fog menni.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Hogyan ne halj meg, ha csak Oracle-t ismersz.\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKit\u00f6lt\u00f6tt\u00fck a t\u00e1bl\u00e1zatunkat felhaszn\u00e1l\u00f3kkal, \u00e9s l\u00e1ttuk, hogy el\u0151sz\u00f6r \u00e9vsz\u00e1m szerint, majd minden noden bel\u00fcl b\u00e9r \u00e9s felhaszn\u00e1l\u00f3i azonos\u00edt\u00f3 szerint helyezkednek el. Most m\u00e1r k\u00e9rhetj\u00fck az adatokat, korl\u00e1toz\u00e1sok be\u00e1ll\u00edt\u00e1s\u00e1val. <\/p>\n<p>\u00dajra megjelenik a m\u0171k\u00f6d\u0151nk. <code>hol, \u00e9s<\/code>, \u00e9s a felhaszn\u00e1l\u00f3ink megkapj\u00e1k, \u00e9s minden \u00fajra j\u00f3l van. De ha csak a Clustering key egy r\u00e9sz\u00e9t pr\u00f3b\u00e1ljuk haszn\u00e1lni, r\u00e1ad\u00e1sul a kev\u00e9sb\u00e9 fontos r\u00e9sz\u00e9t, akkor a Cassandra azonnal kifog\u00e1solja, hogy nem tal\u00e1lja a t\u00e9rk\u00e9pen azt a helyet, ahol ennek az objektumnak, amelynek ezek a mez\u0151i a kompar\u00e1torban nullak, \u00e9s ennek, amit most adtunk meg \u2014 hol tal\u00e1lhat\u00f3. \u00dajra fel kell emelnem az \u00f6sszes adatot err\u0151l a nod\u00e1r\u00f3l \u00e9s sz\u0171rni kell \u0151ket. Ez a node keret\u00e9n bel\u00fcli Full Scan hasonlata, ami rossz.<\/p>\n<h2>B\u00e1rmilyen zavaros helyzetben hozz l\u00e9tre \u00faj t\u00e1bl\u00e1t.<\/h2>\n<p>\nHa lehet\u0151s\u00e9g\u00fcnk van felhaszn\u00e1l\u00f3kat ID, \u00e9letkor vagy b\u00e9r alapj\u00e1n el\u00e9rni, mit tegy\u00fcnk? Semmit. Csak haszn\u00e1ljunk k\u00e9t t\u00e1bl\u00e1t. Ha h\u00e1rom k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3don kell felhaszn\u00e1l\u00f3kat el\u00e9rni \u2014 h\u00e1rom t\u00e1bl\u00e1ra lesz sz\u00fcks\u00e9g. Elm\u00faltak azok az id\u0151k, amikor helyet sp\u00f3roltunk a merevlemezen. Ez a legolcs\u00f3bb er\u0151forr\u00e1s. Sokkal olcs\u00f3bb, mint a v\u00e1laszid\u0151, ami a felhaszn\u00e1l\u00f3nak rombol\u00f3 lehet. Sokkal kellemesebb a felhaszn\u00e1l\u00f3nak, ha valamit m\u00e1sodpercek alatt megkap, mint 10 perc alatt.<\/p>\n<p>Kicser\u00e9lj\u00fck a felesleges helyet, denormaliz\u00e1lt adatokat a j\u00f3 sk\u00e1l\u00e1zhat\u00f3s\u00e1g \u00e9s megb\u00edzhat\u00f3 m\u0171k\u00f6d\u00e9s lehet\u0151s\u00e9g\u00e9re. Val\u00f3j\u00e1ban egy h\u00e1rom adatk\u00f6zpontb\u00f3l \u00e1ll\u00f3 klaszter, amelyben \u00f6t csom\u00f3pont van mindegyikben, megfelel\u0151 adatmegtart\u00e1si szint mellett (amikor biztosan semmi nem veszhet el) k\u00e9pes t\u00fal\u00e9lni egy teljes adatk\u00f6zpont hal\u00e1l\u00e1t. R\u00e1ad\u00e1sul m\u00e9g k\u00e9t csom\u00f3pont is megmarad a k\u00e9t fennmarad\u00f3 adatk\u00f6zpontban. Csak ezt k\u00f6vet\u0151en kezd\u0151dnek a probl\u00e9m\u00e1k. Ez egy meglehet\u0151sen j\u00f3 tartal\u00e9k, ami n\u00e9h\u00e1ny extra SSD-t\u00e1rol\u00f3t \u00e9s processzort ig\u00e9nyel. Ez\u00e9rt, hogy haszn\u00e1lhassuk a Cassandra-t, amely egy\u00e1ltal\u00e1n nem SQL, \u00e9s ahol nincsenek kapcsolatok, k\u00fcls\u0151 kulcsok, tudnunk kell n\u00e9h\u00e1ny egyszer\u0171 szab\u00e1lyt.<\/p>\n<p>Mindig a lek\u00e9rdez\u00e9sb\u0151l tervezz\u00fck a dolgokat. Nem az adatok a legfontosabbak, hanem az, hogy az alkalmaz\u00e1s hogyan fog vel\u00fck dolgozni. Ha k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3don kell megszerezn\u00fcnk k\u00fcl\u00f6nb\u00f6z\u0151 adatokat, vagy ugyanazokat az adatokat k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3dokon, \u00fagy kell elhelyezn\u00fcnk \u0151ket, hogy az k\u00e9nyelmes legyen az alkalmaz\u00e1s sz\u00e1m\u00e1ra. Ellenkez\u0151 esetben a Full Scan-be cs\u00faszunk, \u00e9s a Cassandra semmilyen el\u0151nyt nem fog adni.<\/p>\n<p>A denormaliz\u00e1lt adatok norm\u00e1nak sz\u00e1m\u00edtanak. Elfelejtj\u00fck a norm\u00e1l form\u00e1kat, mert m\u00e1r nincsenek rel\u00e1ci\u00f3s adatb\u00e1zisaink. Tegy\u00fcnk valamit 100-szor, azt 100-szor t\u00e1roljuk. Ez m\u00e9g mindig olcs\u00f3bb, mint lass\u00edtani a rendszert. <\/p>\n<p>A part\u00edcion\u00e1l\u00e1si kulcsokat \u00fagy v\u00e1lasztjuk meg, hogy norm\u00e1lisan eloszoljanak. Nincs sz\u00fcks\u00e9g arra, hogy a kulcsaink hash-\u00e9rt\u00e9ke egy sz\u0171k tartom\u00e1nyba essen. Vagyis a sz\u00fclet\u00e9si \u00e9v a fenti p\u00e9ld\u00e1ban \u2014 rossz p\u00e9lda. Helyes, ha a felhaszn\u00e1l\u00f3ink a sz\u00fclet\u00e9si \u00e9v\u00fck alapj\u00e1n norm\u00e1lisan eloszlanak, \u00e9s rossz, ha \u00f6t\u00f6dikes di\u00e1kokr\u00f3l van sz\u00f3 \u2014 ott nem lesz t\u00fal j\u00f3 a part\u00edcion\u00e1l\u00e1s. <\/p>\n<p>A rendez\u00e9s a Clustering Key l\u00e9trehoz\u00e1s\u00e1nak szakasz\u00e1ban egyszer v\u00e1laszthat\u00f3. Ha m\u00f3dos\u00edtani kell, \u00e1t kell t\u00f6lten\u00fcnk a t\u00e1bl\u00e1zatunkat egy m\u00e1sik kulccsal.<\/p>\n<p>\u00c9s a legfontosabb: ha sz\u00e1z k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3don kell lek\u00e9rdezn\u00fcnk ugyanazokat az adatokat, akkor sz\u00e1z k\u00fcl\u00f6nb\u00f6z\u0151 t\u00e1bl\u00e1nk lesz.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\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\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\/hu\/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. Hogyan ne haljunk meg, ha csak Oracle-t ismer\u00fcnk | ProHoster","description":"Hell\u00f3, Habr. A nevem Misa Butrimov, \u00e9s szeretn\u00e9k egy kicsit mes\u00e9lni a Cassandr\u00e1r\u00f3l.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","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\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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/41081","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=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}