Cassandra. Yadda ba za a mutu ba idan kun san Oracle kawai

Hai Habr.

Sunana Misha Butrimov, Ina so in gaya muku kadan game da Cassandra. Labari na zai zama da amfani ga waɗanda ba su taɓa cin karo da bayanan NoSQL ba - yana da fasalulluka da yawa na aiwatarwa da ramuka waɗanda kuke buƙatar sani game da su. Kuma idan baku ga wani abu ba banda Oracle ko duk wani bayanan alaƙa, waɗannan abubuwan zasu ceci rayuwar ku.

Menene kyau game da Cassandra? Rubutun NoSQL ne wanda aka tsara ba tare da gazawar ma'auni guda ɗaya ba wanda ya daidaita da kyau. Idan kana buƙatar ƙara terabytes biyu don wasu bayanai, kawai kuna ƙara nodes zuwa zobe. Fadada shi zuwa wani cibiyar bayanai? Ƙara nodes zuwa gungu. Ƙara sarrafa RPS? Ƙara nodes zuwa gungu. Yana aiki a kishiyar hanya kuma.

Cassandra. Yadda ba za a mutu ba idan kun san Oracle kawai

Me kuma tayi kyau? Yana da game da sarrafa buƙatun da yawa. Amma nawa ne mai yawa? 10, 20, 30, 40 buƙatun a sakan daya ba yawa. Bukatun dubu 100 a sakan daya don yin rikodi - kuma. Akwai kamfanonin da suka ce suna kiyaye buƙatun miliyan 2 a sakan daya. Wataƙila za su yi imani da shi.

Kuma bisa ga ka'ida, Cassandra yana da babban bambanci guda ɗaya daga bayanan alaƙa - ba ya kama da su kwata-kwata. Kuma wannan yana da matukar muhimmanci a tuna.

Ba duk abin da ya yi kama daya aiki iri daya ba ne

Da zarar abokin aiki ya zo wurina ya tambaye ni: “A nan akwai yaren tambaya na CQL Cassandra, kuma yana da zaɓaɓɓen bayani, yana da inda, yana da kuma. Ina rubuta wasiƙu kuma ba ya aiki. Me yasa?" Ma'anar Cassandra kamar ma'ajin bayanai na dangantaka ita ce cikakkiyar hanyar yin kisan kai mai tsanani. Kuma ba na inganta shi ba, an haramta shi a Rasha. Za ku tsara wani abu ba daidai ba.

Alal misali, wani abokin ciniki ya zo wurinmu ya ce: “Bari mu gina rumbun adana bayanai don shirye-shiryen talabijin, ko kuma ma’adanar bayanan girke-girke. Za mu sami jita-jita a wurin ko jerin jerin shirye-shiryen TV da 'yan wasan kwaikwayo a ciki. " Muna cewa da murna: “Mu tafi!” Kawai aika bytes biyu, alamun biyu kuma kun gama, komai zai yi aiki cikin sauri da dogaro. Kuma duk abin yana da kyau har sai abokan ciniki sun zo su ce matan gida kuma suna magance matsalar kishiyar: suna da jerin samfuran, kuma suna so su san abincin da suke so su dafa. Ka mutu.

Wannan saboda Cassandra babban rumbun adana bayanai ne: a lokaci guda yana ba da ƙima mai mahimmanci kuma yana adana bayanai a cikin ginshiƙai masu faɗi. A cikin Java ko Kotlin, ana iya siffanta shi kamar haka:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Wato taswira wanda kuma ya ƙunshi taswirar da aka jera. Makullin farko na wannan taswira shine maɓallin Layi ko Maɓallin Rarraba - maɓallin rarrabawa. Maɓalli na biyu, wanda shine maɓalli na taswirar da aka riga aka jera, shine maɓallin Clustering.

Don kwatanta yadda ake rarraba rumbun adana bayanai, bari mu zana nodes guda uku. Yanzu kuna buƙatar fahimtar yadda ake lalata bayanan cikin nodes. Domin idan muka cusa komai zuwa daya (a hanya, za a iya samun dubu, dubu biyu, biyar - gwargwadon yadda kuke so), wannan ba batun rarraba ba ne. Don haka, muna buƙatar aikin lissafi wanda zai dawo da lamba. Kawai lamba, dogon int wanda zai fada cikin wani kewayon. Kuma za mu sami kumburi ɗaya da ke da alhakin kewayo ɗaya, na biyu don na biyu, na nth na nth.

Cassandra. Yadda ba za a mutu ba idan kun san Oracle kawai

Ana ɗaukar wannan lambar ta amfani da aikin hash, wanda ake amfani da shi akan abin da muke kira maɓallin Partition. Wannan shi ne ginshiƙin da aka kayyade a cikin umarnin maɓalli na Farko, kuma wannan shi ne ginshiƙin da zai zama maɓalli na farko kuma mafi mahimmanci na taswirar. Yana ƙayyade ko wane kumburi zai karɓi bayanan. An ƙirƙiri tebur a Cassandra tare da kusan maƙasudi ɗaya kamar a cikin SQL:

CREATE TABLE users (
	user_id uu id,
	name text,
	year int,
	salary float,
	PRIMARY KEY(user_id)

)

Maɓalli na Farko a wannan yanayin ya ƙunshi ginshiƙi ɗaya, kuma shine maɓalli na rarrabawa.

Yaya masu amfani da mu za su yi? Wasu za su je wani kumburi, wasu zuwa wani, wasu kuma zuwa uku. Sakamakon shi ne tebur na zanta na yau da kullun, wanda kuma aka sani da taswira, wanda kuma aka sani da ƙamus a Python, ko tsarin ƙima mai sauƙi na Maɓalli wanda za mu iya karanta duk dabi'u, karantawa da rubuta ta maɓalli.

Cassandra. Yadda ba za a mutu ba idan kun san Oracle kawai

Zaɓi: lokacin da izinin tacewa ya juya zuwa cikakken dubawa, ko abin da ba za a yi ba

Bari mu rubuta wasu zaɓaɓɓun bayani: select * from users where, userid = . Ya zama kamar a cikin Oracle: muna rubuta zaɓi, ƙayyade yanayin kuma duk abin da ke aiki, masu amfani suna samun shi. Amma idan ka zaɓi, alal misali, mai amfani da takamaiman shekara ta haihuwa, Cassandra ya koka cewa ba zai iya cika buƙatar ba. Domin ba ta san komai ba game da yadda muke rarraba bayanai game da shekarar haihuwa - tana da shafi ɗaya kawai da aka nuna a matsayin maɓalli. Sannan ta ce, “Ok, har yanzu zan iya cika wannan bukata. Ƙara izinin tacewa." Muna ƙara umarnin, komai yana aiki. Kuma a wannan lokacin wani mummunan abu ya faru.

Lokacin da muka gudu akan bayanan gwaji, komai yana da kyau. Kuma lokacin da kuka aiwatar da tambaya a cikin samarwa, inda muke da, alal misali, rikodin miliyan 4, to komai ba shi da kyau a gare mu. Domin ba da izinin tacewa umarni ne da ke ba Cassandra damar tattara duk bayanai daga wannan tebur daga duk nodes, duk cibiyoyin bayanai (idan akwai da yawa daga cikinsu a cikin wannan gungu), sannan kawai tace. Wannan kwatankwacin Cikakken Scan ne, kuma da kyar kowa ya gamsu da shi.

Idan muna buƙatar masu amfani kawai ta ID, da mun yi kyau da wannan. Amma wani lokacin muna buƙatar rubuta wasu tambayoyi kuma mu sanya wasu hani akan zaɓin. Saboda haka, muna tunawa: wannan duk taswira ce da ke da maɓallin rarrabawa, amma a ciki akwai taswirar da aka jera.

Kuma tana da maɓalli, wanda muke kira da Maɓalli na Clustering. Wannan maɓalli, wanda, bi da bi, ya ƙunshi ginshiƙan da muka zaɓa, tare da taimakon Cassandra ya fahimci yadda aka jera bayanansa a zahiri kuma zai kasance a kan kowane kumburi. Wato, ga wasu maɓallai na Partition, maɓallin Clustering zai gaya muku daidai yadda ake tura bayanan cikin wannan bishiyar, wurin da zai kai can.

Wannan itaciya ce da gaske, ana kiran mai kwatantawa a wurin, inda za mu wuce wasu ginshiƙai a cikin nau'in abu, kuma an ayyana shi a matsayin jerin ginshiƙai.

CREATE TABLE users_by_year_salary_id (
	user_id uuid,
	name text,
	year int,
	salary float,
	PRIMARY KEY((year), salary, user_id)

Kula da umarnin maɓalli na Farko; hujjarsa ta farko (a cikin yanayinmu, shekara) koyaushe shine maɓallin Rarraba. Yana iya ƙunshi ɗaya ko fiye ginshiƙai, ba kome. Idan akwai ginshiƙai da yawa, yana buƙatar sake cire shi a cikin maƙallan don mai sarrafa harshe ya fahimci cewa wannan shine maɓallin Farko, kuma a bayansa duk sauran ginshiƙan akwai maɓallin Clustering. A wannan yanayin, za a watsa su a cikin comparator a cikin tsarin da suka bayyana. Wato ginshiƙi na farko ya fi mahimmanci, na biyu kuma ba shi da mahimmanci, da sauransu. Yadda muke rubutawa, alal misali, daidai yake da filayen azuzuwan bayanai: muna jera filayen, kuma don su muna rubuta waɗanne ne suka fi girma da ƙanana. A cikin Cassandra, waɗannan su ne, in mun gwada da magana, filayen ajin bayanai, waɗanda za a yi amfani da daidaitattun da aka rubuta don su.

Mun saita rarrabuwa kuma mun sanya hani

Kuna buƙatar tuna cewa nau'in tsari (saukarwa, hawan, ko menene) an saita shi a daidai lokacin da aka ƙirƙiri maɓalli, kuma ba za a iya canza shi daga baya ba. A zahiri yana ƙayyade yadda za a jera bayanan da yadda za a adana su. Idan kana buƙatar canza maɓallin Clustering ko tsara tsari, dole ne ka ƙirƙiri sabon tebur da canja wurin bayanai a ciki. Wannan ba zai yi aiki da wanda yake ba.

Cassandra. Yadda ba za a mutu ba idan kun san Oracle kawai

Mun cika teburinmu tare da masu amfani kuma mun ga cewa sun fada cikin zobe, na farko ta shekara ta haihuwa, sannan a ciki a kan kowane kumburi ta hanyar albashi da ID na mai amfani. Yanzu za mu iya zaɓar ta hanyar sanya hani.

Aikinmu ya sake bayyana where, and, kuma muna samun masu amfani, kuma komai yana da kyau kuma. Amma idan muka yi ƙoƙari mu yi amfani da wani ɓangaren maɓalli na Clustering kawai, kuma mafi ƙarancin mahimmanci, to Cassandra zai yi gunaguni nan da nan cewa ba zai iya samun wurin a cikin taswirar mu ba, wanda ke da waɗannan filayen don kwatancen ɓarna, kuma wannan. wanda aka saita kawai, - inda yake kwance. Dole ne in sake cire duk bayanan daga wannan kullin in tace su. Kuma wannan analogue ne na Cikakken Scan a cikin kumburi, wannan ba shi da kyau.

A kowane yanayi mara tabbas, ƙirƙirar sabon tebur

Idan muna so mu iya kai hari ga masu amfani da ID, ko ta shekaru, ko ta albashi, menene ya kamata mu yi? Babu komai. Yi amfani da tebur biyu kawai. Idan kana buƙatar isa ga masu amfani ta hanyoyi daban-daban guda uku, za a sami tebur guda uku. Kwanaki sun shuɗe lokacin da muka ajiye sarari akan dunƙule. Wannan shine albarkatu mafi arha. Kudinsa ƙasa da lokacin amsawa, wanda zai iya cutar da mai amfani. Yana da daɗi da yawa ga mai amfani don karɓar wani abu a cikin daƙiƙa fiye da cikin mintuna 10.

Muna musayar sarari mara amfani da bayanan da ba su dace ba don ikon daidaitawa da aiki da dogaro. Bayan haka, a gaskiya, cluster wanda ya ƙunshi cibiyoyin bayanai guda uku, kowannensu yana da nodes guda biyar, tare da ingantaccen matakin adana bayanai (lokacin da ba a rasa kome ba), yana iya tsira daga mutuwar daya cibiyar bayanai gaba daya. Da kuma ƙarin nodes biyu a cikin kowane saura biyun. Kuma kawai bayan wannan matsalolin sun fara. Wannan kyakkyawan aiki ne mai kyau, yana da darajar wasu ƙarin fa'idodin SSD da na'urori masu sarrafawa. Saboda haka, don amfani da Cassandra, wanda ba SQL ba, wanda babu dangantaka, maɓallan kasashen waje, kuna buƙatar sanin dokoki masu sauƙi.

Mun tsara komai bisa ga buƙatarku. Babban abu ba shine bayanan ba, amma yadda aikace-aikacen zai yi aiki da shi. Idan yana buƙatar karɓar bayanai daban-daban ta hanyoyi daban-daban ko bayanai iri ɗaya ta hanyoyi daban-daban, dole ne mu sanya su ta hanyar da ta dace da aikace-aikacen. In ba haka ba, za mu gaza a Cikakken Scan kuma Cassandra ba zai ba mu wata fa'ida ba.

Denormalizing bayanai shine al'ada. Mun manta game da siffofin al'ada, ba mu da alaƙa da bayanan bayanai. Idan muka ajiye abu sau 100, zai kwanta sau 100. Har yanzu yana da arha fiye da tsayawa.

Muna zaɓar maɓallan don rarrabawa don a rarraba su akai-akai. Ba ma son zaton makullin mu ya faɗi cikin kunkuntar kewayo ɗaya. Wato shekarar haihuwa a cikin misalin da ke sama misali ne mara kyau. Fiye da daidai, yana da kyau idan masu amfani da mu yawanci ana rarraba su ta shekara ta haihuwa, kuma mara kyau idan muna magana game da ɗaliban aji 5 - rarrabuwar ba za ta yi kyau sosai ba.

Ana zaɓar rarrabuwa sau ɗaya a matakin ƙirƙirar Maɓalli. Idan ana buƙatar canza shi, dole ne mu sabunta teburinmu da maɓalli daban.

Kuma abu mafi mahimmanci: idan muna buƙatar dawo da bayanai iri ɗaya ta hanyoyi 100 daban-daban, to za mu sami teburi 100 daban-daban.

source: www.habr.com

Add a comment