{"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\/sq\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Si t\u00eb mos vdes\u00ebsh, n\u00ebse di vet\u00ebm Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>P\u00ebrsh\u00ebndetje, Habr.<\/p>\n<p>Quo n\u00eb em\u00ebr, un\u00eb jam Misha Butrimov, dhe do t\u00eb doja t\u00eb flas pak p\u00ebr Cassandra. Tregimi im do t\u00eb jet\u00eb i dobish\u00ebm p\u00ebr ata q\u00eb nuk kan\u00eb pasur ndonj\u00ebher\u00eb p\u00ebrvoj\u00eb me bazat e t\u00eb dh\u00ebnave NoSQL - ka shum\u00eb ve\u00e7ori dhe nuances q\u00eb duhet t\u00eb njihni. Dhe n\u00ebse nuk keni par\u00eb ndonj\u00ebher\u00eb p\u00ebrve\u00e7 Oracle apo ndonj\u00eb baze tjet\u00ebr relacional, k\u00ebto gj\u00ebra do t'ju shp\u00ebtojn\u00eb.<\/p>\n<p>\u00c7far\u00eb e b\u00ebn Cassandra t\u00eb shk\u00eblqyer? Kjo \u00ebsht\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash NoSQL, e projektuar pa nj\u00eb pik\u00eb t\u00eb vetme d\u00ebshtimi, q\u00eb p\u00ebrmir\u00ebsohet leht\u00ebsisht. N\u00ebse ju nevojitet t\u00eb shtoni disa terabajt p\u00ebr nj\u00eb baz\u00eb, thjesht shtoni node n\u00eb rrip. D\u00ebshironi ta zgjeroni n\u00eb nj\u00eb qend\u00ebr t\u00eb t\u00eb dh\u00ebnash tjet\u00ebr? Shtoni node n\u00eb kluster. Duhet t\u00eb rrisni RPS? Shtoni node n\u00eb kluster. Kjo funksionon edhe nga ana tjet\u00ebr. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Si t\u00eb mos vdes\u00ebsh, n\u00ebse di vet\u00ebm Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u00c7far\u00eb tjet\u00ebr e b\u00ebn at\u00eb t\u00eb mir\u00eb? Ajo \u00ebsht\u00eb n\u00eb gjendje t\u00eb p\u00ebrballoj\u00eb shum\u00eb k\u00ebrkesa. Po shum\u00eb \u2013 sa \u00ebsht\u00eb? 10, 20, 30, 40 mij\u00eb k\u00ebrkesa n\u00eb sekund\u00eb \u2013 kjo \u00ebsht\u00eb pak. 100 mij\u00eb k\u00ebrkesa n\u00eb sekund\u00eb p\u00ebr shkrim \u2013 gjithashtu t\u00eb pamjaftueshme. Ka kompani q\u00eb thonin se mbajn\u00eb 2 milion k\u00ebrkesa n\u00eb sekund\u00eb. P\u00ebr k\u00ebta, ndoshta do t\u00eb duhet t'i besoni. <\/p>\n<p>Dhe n\u00eb thelb, Cassandra ka nj\u00eb ndryshim t\u00eb madh nga t\u00eb dh\u00ebnat relacional \u2013 ajo nuk i ngjan fare atyre. Kjo \u00ebsht\u00eb nj\u00eb gj\u00eb shum\u00eb e r\u00ebnd\u00ebsishme p\u00ebr t'u mbajtur mend.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>E gjith\u00eb kjo tregon se nuk \u00ebsht\u00eb gjith\u00e7ka q\u00eb duket nj\u00ebsoj, punon nj\u00ebsoj.<\/h2>\n<p>\nNj\u00eb her\u00eb nj\u00eb koleg erdhi dhe m\u00eb pyeti: \u00abEpo, ka SQL Cassandra query language dhe ka nj\u00eb select statement, ka nj\u00eb where, ka nj\u00eb and. Un\u00eb shkruaj shkronjat dhe nuk punon. Pse?\u00bb. N\u00ebse e shihni Cassandra-n si nj\u00eb baz\u00eb t\u00eb dh\u00ebnash relacional, kjo \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb e shk\u00eblqyer p\u00ebr t\u00eb p\u00ebrfunduar me nj\u00eb vet\u00ebvrasje brutale. Dhe nuk po propagandoj, kjo \u00ebsht\u00eb e ndaluar n\u00eb Rusi. Thjesht do t\u00eb projektoni di\u00e7ka keq.<\/p>\n<p>P\u00ebr shembull, nj\u00eb klient vjen dhe thot\u00eb: \u00abLe t\u00eb nd\u00ebrtojm\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash p\u00ebr seriale, ose nj\u00eb baz\u00eb t\u00eb dh\u00ebnash p\u00ebr nj\u00eb udh\u00ebzues recetash. Ne do t\u00eb kemi pjata me produkte ose nj\u00eb list\u00eb serialesh dhe aktor\u00ebsh n\u00eb t\u00eb\u00bb. Ne themi me g\u00ebzim: \u00abLe t\u00eb b\u00ebjm\u00eb!\u00bb. Kjo \u00ebsht\u00eb p\u00ebr t\u00eb transferuar dy byte, disa tabela dhe gjith\u00e7ka do t\u00eb funksionoj\u00eb shum\u00eb shpejt, me besueshm\u00ebri. Dhe gjith\u00e7ka \u00ebsht\u00eb e shk\u00eblqyer, derisa klient\u00ebt nuk vijn\u00eb dhe nuk thon\u00eb q\u00eb amvisat gjithashtu duan t\u00eb zgjidhin reversin: ata kan\u00eb nj\u00eb list\u00eb produktesh dhe duan t\u00eb din\u00eb se \u00e7far\u00eb p\u00ebr Shqip\u00ebrin\u00eb duan t\u00eb p\u00ebrgatisin. Ju jeni t\u00eb humbur.<\/p>\n<p>E gjith\u00eb kjo ndodh sepse Cassandra \u00ebsht\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash hibride: ajo \u00ebsht\u00eb n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb nj\u00eb struktur\u00eb key-value dhe ruan t\u00eb dh\u00ebnat n\u00eb kolona t\u00eb gjera. N\u00eb gjuh\u00ebn Java ose Kotlin, kjo mund t\u00eb p\u00ebrshkruhet k\u00ebshtu:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&gt;<\/code><\/p>\n<p>Pra, \u00ebsht\u00eb nj\u00eb map\u00eb, brenda s\u00eb cil\u00ebs ka edhe nj\u00eb map\u00eb t\u00eb renditur. \u00c7el\u00ebsi i par\u00eb p\u00ebr k\u00ebt\u00eb map\u00eb \u00ebsht\u00eb Row key ose Partition key \u2013 \u00e7el\u00ebsi i parit. \u00c7el\u00ebsi i dyt\u00eb, i cili \u00ebsht\u00eb \u00e7el\u00ebsi p\u00ebr k\u00ebt\u00eb map\u00eb t\u00eb renditur, \u00ebsht\u00eb Clustering key.<\/p>\n<p>P\u00ebr t\u00eb ilustruar shp\u00ebrndarjen e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, le t\u00eb vizatojm\u00eb tre node. Tani duhet t\u00eb kuptojm\u00eb se si t\u00eb shp\u00ebrndajm\u00eb t\u00eb dh\u00ebnat n\u00eb node. Sepse n\u00ebse do t\u00eb d\u00ebrgojm\u00eb gjith\u00e7ka n\u00eb nj\u00eb (mund t\u00eb ket\u00eb nj\u00eb mij\u00eb, dy mij\u00eb, pes\u00eb \u2013 sa t\u00eb doni), kjo nuk tregon shp\u00ebrndarje. Prandaj na nevojitet nj\u00eb funksion matematikor q\u00eb do t\u00eb kthej\u00eb nj\u00eb num\u00ebr. Thjesht nj\u00eb num\u00ebr, nj\u00eb int i gjat\u00eb, q\u00eb do t\u00eb bjer\u00eb n\u00eb nj\u00eb gam\u00eb t\u00eb caktuar. Dhe nj\u00eb node do t\u00eb p\u00ebrgjigjet p\u00ebr nj\u00eb gam\u00eb, tjetra p\u00ebr nj\u00eb tjet\u00ebr, n-ta p\u00ebr n-tin. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Si t\u00eb mos vdes\u00ebsh, n\u00ebse di vet\u00ebm Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKy num\u00ebr merret me an\u00eb t\u00eb nj\u00eb funksioni hash, i cili aplikohet pik\u00ebrisht n\u00eb at\u00eb q\u00eb ne e quajm\u00eb Partition key. Ky \u00ebsht\u00eb kolona e par\u00eb q\u00eb tregohet n\u00eb direktiv\u00ebn Primary key dhe \u00ebsht\u00eb kolona q\u00eb do t\u00eb jet\u00eb \u00e7el\u00ebsi m\u00eb i r\u00ebnd\u00ebsish\u00ebm i map\u00ebs. Ai p\u00ebrcakton se cilat t\u00eb dh\u00ebna do t\u00eb shkojn\u00eb n\u00eb cilin node. Tabela krijohet n\u00eb Cassandra n\u00eb nj\u00eb sintaks\u00eb pothuajse t\u00eb nj\u00ebjt\u00eb si n\u00eb 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>\u00c7el\u00ebsi kryesor n\u00eb k\u00ebt\u00eb rast p\u00ebrb\u00ebhet nga nj\u00eb kolon\u00eb, e cila \u00ebsht\u00eb gjithashtu \u00e7el\u00ebsi i ndarjes.<\/p>\n<p>Si do t\u00eb p\u00ebrfundojn\u00eb p\u00ebrdoruesit? Nj\u00eb pjes\u00eb do t\u00eb shkoj\u00eb n\u00eb nj\u00eb node, nj\u00eb pjes\u00eb n\u00eb tjetr\u00ebn dhe nj\u00eb pjes\u00eb n\u00eb t\u00eb tret\u00ebn. Kemi nj\u00eb tabel\u00eb hash t\u00eb zakonshme, e cila \u00ebsht\u00eb nj\u00eb map\u00eb, e cila gjithashtu n\u00eb Python \u00ebsht\u00eb nj\u00eb fjalor, e cila \u00ebsht\u00eb \u2013 nj\u00eb struktur\u00eb e thjesht\u00eb Key value, nga e cila mund t\u00eb lexojm\u00eb t\u00eb gjitha vlerat, t\u00eb lexojm\u00eb dhe t\u00eb shkruajm\u00eb sipas \u00e7el\u00ebsit.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Si t\u00eb mos vdes\u00ebsh, n\u00ebse di vet\u00ebm Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: kur allow filtering shnd\u00ebrrohet n\u00eb nj\u00eb skanim t\u00eb plot\u00eb, ose si nuk duhet ta b\u00ebni<\/h2>\n<p>\nLe t\u00eb shkruajm\u00eb ndonj\u00eb select statement: <code>select * from users where userid = <\/code>. Duket sikur n\u00eb Oracle: shkruajm\u00eb select, p\u00ebrcaktojm\u00eb kushtet dhe gjith\u00e7ka funksionon, p\u00ebrdoruesit nxirren. Por n\u00ebse zgjidhni, p\u00ebr shembull, nj\u00eb p\u00ebrdorues me nj\u00eb vit t\u00eb caktuar lindjeje, Cassandra ankohet se nuk mund ta ekzekutoj\u00eb k\u00ebrkes\u00ebn. Sepse ajo n\u00eb fakt nuk di asgj\u00eb p\u00ebr shp\u00ebrndarjen e t\u00eb dh\u00ebnave p\u00ebr vitin e lindjes \u2013 si\u00e7 \u00ebsht\u00eb e p\u00ebrcaktuar vet\u00ebm nj\u00eb kolon\u00eb si \u00e7el\u00ebs. At\u00ebher\u00eb ajo thot\u00eb: \u00abMir\u00eb, un\u00eb mund t\u00eb vazhdoj ta ekzekutoj k\u00ebt\u00eb k\u00ebrkes\u00eb. Shtoni allow filtering\u00bb. Ne e shtojm\u00eb direktiv\u00ebn, gjith\u00e7ka funksionon. Dhe n\u00eb k\u00ebt\u00eb moment ndodh di\u00e7ka e tmerrshme. <\/p>\n<p>Kur ne testojm\u00eb me t\u00eb dh\u00ebna prov\u00eb, gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Por kur b\u00ebjm\u00eb k\u00ebrkesen n\u00eb prodhim, ku kemi, p\u00ebr shembull, 4 milion regjistrime, gj\u00ebrat nuk shkojn\u00eb aq mir\u00eb. Sepse allow filtering \u00ebsht\u00eb nj\u00eb direktiv\u00eb q\u00eb lejon Cassandra-n t\u00eb mbledh\u00eb t\u00eb gjitha t\u00eb dh\u00ebnat nga kjo tabel\u00eb nga t\u00eb gjitha nodet, t\u00eb gjitha <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/kompaniya\/data-centers\/\"   title=\"t\u00eb qendrave t\u00eb t\u00eb dh\u00ebnave\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">t\u00eb qendrave t\u00eb t\u00eb dh\u00ebnave<\/a> (n\u00ebse ka shum\u00eb n\u00eb k\u00ebt\u00eb klaster), dhe pastaj t\u00eb filtroj\u00eb. Kjo \u00ebsht\u00eb e ngjashme me nj\u00eb Full Scan, dhe dyshoj se dikush \u00ebsht\u00eb entuziast p\u00ebr t\u00eb. <\/p>\n<p>N\u00ebse do na duheshin p\u00ebrdoruesit vet\u00ebm sipas identifikuesve, do na mjaftonte. Por ndonj\u00ebher\u00eb na nevojitet t\u00eb shkruajm\u00eb k\u00ebrkesa t\u00eb tjera dhe t\u00eb vendosim kufizime t\u00eb tjera n\u00eb p\u00ebrzgjedhje. Prandaj kujtojm\u00eb: kjo \u00ebsht\u00eb e gjitha nj\u00eb hart\u00eb, e cila ka nj\u00eb \u00e7el\u00ebs partioullimi, por brenda saj \u00ebsht\u00eb nj\u00eb hart\u00eb e renditur. <\/p>\n<p>Dhe ajo gjithashtu ka nj\u00eb \u00e7el\u00ebs, t\u00eb cilin e quajm\u00eb Clustering Key. Ky \u00e7el\u00ebs, i cili p\u00ebrfshin kolonat q\u00eb ne do t\u00eb zgjedhim, lejon Cassandra-n t\u00eb kuptoj\u00eb si jan\u00eb fizikisht t\u00eb renditura dhe ku do t\u00eb jen\u00eb t\u00eb dh\u00ebnat n\u00eb \u00e7do nod. Dometh\u00ebn\u00eb, p\u00ebr nj\u00eb \u00e7el\u00ebs Partition, Clustering Key do t\u00eb tregoj\u00eb se si t'i vendosim t\u00eb dh\u00ebnat n\u00eb k\u00ebt\u00eb pem\u00eb, n\u00eb cilin vend do t\u00eb z\u00ebn\u00eb atje.<\/p>\n<p>\u00cbsht\u00eb me t\u00eb v\u00ebrtet\u00eb nj\u00eb pem\u00eb, vet\u00ebm se th\u00ebrritet nj\u00eb krahasues, n\u00eb t\u00eb cilin ne kalojm\u00eb nj\u00eb grup kolonash n\u00eb form\u00eb objekti, dhe ai p\u00ebrcaktohet gjithashtu si nj\u00eb enumerim kolonash. <\/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>Vini re direktiv\u00ebn Primary key, argumenti i saj i par\u00eb (n\u00eb rastin ton\u00eb viti) gjithmon\u00eb shkon \u00e7el\u00ebsi i Particionit. Ai mund t\u00eb p\u00ebrb\u00ebhet nga nj\u00eb ose disa kolona, nuk ka r\u00ebnd\u00ebsi. N\u00ebse ka disa kolona, duhet ta vendosim p\u00ebrs\u00ebri n\u00eb kllapa, n\u00eb m\u00ebnyr\u00eb q\u00eb p\u00ebrpunuesi i gjuh\u00ebs ta kuptoj\u00eb se p\u00ebrfshin pik\u00ebrisht \u00e7el\u00ebsin e par\u00eb, dhe pastaj t\u00eb gjitha kolonat e tjera \u2014 Clustering Key. Nd\u00ebrsa ato do t\u00eb kalohen n\u00eb krahasues n\u00eb rendin n\u00eb t\u00eb cilin jan\u00eb. Dometh\u00ebn\u00eb, kolona e par\u00eb \u00ebsht\u00eb m\u00eb e r\u00ebnd\u00ebsishmja, e dyta m\u00eb pak e r\u00ebnd\u00ebsishme dhe k\u00ebshtu me radh\u00eb. Si\u00e7 b\u00ebjm\u00eb p\u00ebr klasat e t\u00eb dh\u00ebnave, p.sh., ne listojm\u00eb fushat e ngjashm\u00ebris\u00eb: listojm\u00eb fushat dhe i p\u00ebrcaktojm\u00eb ato q\u00eb jan\u00eb m\u00eb shum\u00eb dhe ato q\u00eb jan\u00eb m\u00eb pak. N\u00eb Cassandra, kjo \u00ebsht\u00eb, n\u00eb m\u00ebnyr\u00eb t\u00eb kushtuar, fusha e klas\u00ebs s\u00eb t\u00eb dh\u00ebnave, p\u00ebr t\u00eb cil\u00ebn do t\u00eb aplikohet ngjashm\u00ebria e shkruar.<\/p>\n<h2>Vendosim renditjen, vendosim kufizime<\/h2>\n<p>\nDuhet t\u00eb mbani mend se rendi i renditjes (zbrit\u00ebs, rrit\u00ebs, nuk ka r\u00ebnd\u00ebsi) p\u00ebrcaktohet n\u00eb momentin kur krijohet \u00e7el\u00ebsi, dhe nuk do t\u00eb jet\u00eb e mundur ta ndryshoni m\u00eb von\u00eb. Ai fizikisht p\u00ebrcakton se si do t\u00eb renditen t\u00eb dh\u00ebnat dhe se si do t\u00eb jen\u00eb ata. N\u00ebse do t\u00eb duhet t\u00eb ndryshoni Clustering Key ose rendin e renditjes, do t\u00eb duhet t\u00eb krijoni nj\u00eb tabel\u00eb t\u00eb re dhe t\u00eb transferoni t\u00eb dh\u00ebnat aty. Me tabel\u00ebn ekzistuese nuk do t\u00eb jet\u00eb e mundur.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Si t\u00eb mos vdes\u00ebsh, n\u00ebse di vet\u00ebm Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe e mbush\u00ebm tabel\u00ebn ton\u00eb me p\u00ebrdorues dhe pam\u00eb se ata u rreshtuan fillimisht sipas vitit t\u00eb lindjes, dhe pastaj brenda \u00e7do nodi sipas pag\u00ebs dhe ID-s\u00eb s\u00eb p\u00ebrdoruesit. Tani mund t\u00eb selektojm\u00eb, vendosim kufizime. <\/p>\n<p>Rishfaqet p\u00ebrs\u00ebri ku <code>where, and<\/code>, dhe p\u00ebrdoruesit na vijn\u00eb, dhe gjith\u00e7ka \u00ebsht\u00eb s\u00ebrish n\u00eb rregull. Por n\u00ebse p\u00ebrpiqemi t\u00eb p\u00ebrdorim vet\u00ebm nj\u00eb pjes\u00eb t\u00eb Clustering Key, dhe p\u00ebr m\u00eb tep\u00ebr, m\u00eb pak t\u00eb r\u00ebnd\u00ebsishme, at\u00ebher\u00eb Cassandra do t\u00eb ankohet menj\u00ebher\u00eb, se nuk mund t\u00eb gjej\u00eb vend n\u00eb hart\u00ebn ton\u00eb ku ndodhet ky objekt, ku jan\u00eb k\u00ebto fusha p\u00ebr krahasuesin null, dhe ky tjet\u00ebr q\u00eb sapo e p\u00ebrcaktuam \u2014 ku \u00ebsht\u00eb ai. M\u00eb duhet t\u00eb ngre s\u00ebrish t\u00eb gjith\u00eb t\u00eb dh\u00ebnat nga kjo nod dhe t'i filtroj ato. Dhe kjo \u00ebsht\u00eb e ngjashme me nj\u00eb Full Scan brenda nodit, e keqe.<\/p>\n<h2>N\u00eb \u00e7do situat\u00eb t\u00eb paqart\u00eb krijoni nj\u00eb tabel\u00eb t\u00eb re<\/h2>\n<p>\nN\u00ebse duam t\u00eb kemi mund\u00ebsin\u00eb t\u00eb marrim p\u00ebrdoruesit sipas ID-s\u00eb, mosh\u00ebs, ose pag\u00ebs, \u00e7far\u00eb t\u00eb b\u00ebjm\u00eb? Asgj\u00eb. Thjesht p\u00ebrdorni dy tabela. N\u00ebse na duhet t\u00eb marrim p\u00ebrdoruesit me tre m\u00ebnyra t\u00eb ndryshme \u2014 do t\u00eb ket\u00eb tre tabela. Ka kaluar koha kur kursenim hap\u00ebsir\u00eb n\u00eb disqet e ngurta. Kjo \u00ebsht\u00eb resurset m\u00eb e lir\u00eb. Kushton m\u00eb shum\u00eb se sa koha e p\u00ebrgjigjes, e cila mund t\u00eb jet\u00eb shkat\u00ebrruese p\u00ebr p\u00ebrdoruesin. P\u00ebrdoruesit preferojn\u00eb shum\u00eb m\u00eb tep\u00ebr t\u00eb marrin di\u00e7ka brenda nj\u00eb sekunde, sesa brenda 10 minutash.<\/p>\n<p>Ne k\u00ebmbjm\u00eb hap\u00ebsir\u00ebn e tepruar t\u00eb z\u00ebn\u00eb, t\u00eb dh\u00ebnat e de-normalizuara me mund\u00ebsin\u00eb p\u00ebr t\u00eb shkall\u00ebzuar mir\u00eb, p\u00ebr t\u00eb punuar me besueshm\u00ebri. Sepse, n\u00eb t\u00eb v\u00ebrtet\u00eb, nj\u00eb klaster q\u00eb p\u00ebrb\u00ebhet nga tre qendra t\u00eb t\u00eb dh\u00ebnave, secila me pes\u00eb nod\u00eb, me nj\u00eb nivel t\u00eb pranuesh\u00ebm t\u00eb ruajtjes s\u00eb t\u00eb dh\u00ebnave (kur asgj\u00eb nuk humbet), \u00ebsht\u00eb n\u00eb gjendje t\u00eb p\u00ebrballoj\u00eb humbjen e nj\u00eb qendre t\u00eb dh\u00ebnash plot\u00ebsisht. Dhe gjithashtu dy nodet n\u00eb \u00e7do nj\u00eb nga dy t\u00eb mbetura. Dhe vet\u00ebm pas k\u00ebsaj do t\u00eb fillojn\u00eb problemet. Ky \u00ebsht\u00eb nj\u00eb rezervim mjaft i mir\u00eb, q\u00eb kushton disa SSD shtes\u00eb dhe procesor\u00eb. Prandaj, p\u00ebr t\u00eb p\u00ebrdorur Cassandra-n, q\u00eb nuk \u00ebsht\u00eb SQL, e cila nuk ka marr\u00ebdh\u00ebnie, \u00e7el\u00ebsa t\u00eb jasht\u00ebm, duhet t\u00eb dini rregullat e thjeshta.<\/p>\n<p>Ne projektojm\u00eb gjith\u00e7ka nga k\u00ebrkesa. Ajo q\u00eb ka r\u00ebnd\u00ebsi nuk jan\u00eb t\u00eb dh\u00ebnat, por m\u00ebnyra se si aplikacioni do t\u00eb punoj\u00eb me to. N\u00ebse aplikacioni ka nevoj\u00eb t\u00eb marr\u00eb t\u00eb dh\u00ebna t\u00eb ndryshme n\u00eb m\u00ebnyra t\u00eb ndryshme ose t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna n\u00eb m\u00ebnyra t\u00eb ndryshme, ne duhet t'i vendosim ato ashtu si do t\u00eb ishte m\u00eb e leht\u00eb p\u00ebr aplikacionin. Ndryshe, do t\u00eb bjer\u00eb n\u00eb Full Scan dhe asnj\u00eb p\u00ebrfitim nga Cassandra nuk do t\u00eb na ndihmoj\u00eb.<\/p>\n<p>Denormalizimi i t\u00eb dh\u00ebnave \u00ebsht\u00eb norma. Harrojm\u00eb n\u00eb lidhje me format normale, nuk kemi m\u00eb baza t\u00eb dh\u00ebnash relacionale. N\u00ebse vendosim di\u00e7ka 100 her\u00eb, do t\u00eb b\u00ebhet e pranishme 100 her\u00eb. Kjo \u00ebsht\u00eb ende m\u00eb e lir\u00eb se sa t\u00eb ngadal\u00ebsohemi. <\/p>\n<p>Zgjidhim \u00e7el\u00ebsat p\u00ebr ndarjen n\u00eb m\u00ebnyr\u00eb q\u00eb ato t\u00eb shp\u00ebrndahen normalisht. Nuk na nevojitet q\u00eb hash i \u00e7el\u00ebsave t\u00eb tanish\u00ebm t\u00eb bjer\u00eb n\u00eb nj\u00eb gam\u00eb t\u00eb ngusht\u00eb. Pra, viti i lindjes n\u00eb shembullin e m\u00ebsip\u00ebrm \u00ebsht\u00eb nj\u00eb shembull i keq. N\u00eb t\u00eb v\u00ebrtet\u00eb, \u00ebsht\u00eb i mir\u00eb n\u00ebse p\u00ebrdoruesit jan\u00eb shp\u00ebrndar\u00eb normalisht sipas vitit t\u00eb lindjes, dhe i keq n\u00ebse b\u00ebhet fjal\u00eb p\u00ebr nx\u00ebn\u00ebsit e klas\u00ebs s\u00eb 5-t\u00eb - atje nuk do t\u00eb ishte shum\u00eb mir\u00eb p\u00ebr t'u ndar\u00eb. <\/p>\n<p>Renditja zgjidhet nj\u00eb her\u00eb n\u00eb faz\u00ebn e krijimit t\u00eb Clustering Key. N\u00ebse ka nevoj\u00eb t\u00eb ndryshohet, do t\u00eb duhet t\u00eb ri-p\u00ebrdorim tabell\u00ebn ton\u00eb me nj\u00eb \u00e7el\u00ebs tjet\u00ebr.<\/p>\n<p>Dhe m\u00eb e r\u00ebnd\u00ebsishmja: n\u00ebse kemi nevoj\u00eb t\u00eb marrim t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna n\u00eb 100 m\u00ebnyra t\u00eb ndryshme, at\u00ebher\u00eb do t\u00eb kemi 100 tabela t\u00eb ndryshme.<br \/>\n<br \/>Burimi: <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.0.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\/sq\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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. Si t\u00eb mbijetosh n\u00ebse njeh vet\u00ebm Oracle | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr. Un\u00eb quhem Misha Butrimov, doja t\u00eb flisja pak p\u00ebr Cassandra.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}