4.1 Նկարագրություն
Apache Cassandra-ն դա բաշխված տվյալների բազայի համակարգ է NoSQL դասից։ Այն ստեղծվել է մեծածավալ և հուսալի տվյալների պահոցներ ստեղծելու համար, ներկայացված հեշի տեսքով։
Սկզբում նախագիծը ստեղծվել է Facebook-ում և փոխանցվել է Apache Software Foundation-ի վերահսկողության տակ 2009 թվականին։ Այս կազմակերպությունը շարունակում է զարգացնել նախագիծը։ Cassandra-ի հիման վրա ստեղծվել են արդյունաբերական լուծումներ այնպիսի ընկերությունների համար, ինչպիսիք են Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter և Spotify։ 2011 թվականին ամենավերադարցված սերվերների կլաստերը, որը կառավարում էր մեկ տվյալների բազա, ունեին ավելի քան 400 մեքենա և պարունակում էր տվյալներ ավելի քան 300 ՏԲ ծավալով։
Java-ն օգտագործվում է բաշխված հեշ համակարգի իրականացում համար, որը նման է DynamoDB-ին։ Դա ապահովում է գրեթե գծային մասշտաբացում տվյալների աճի ժամանակ։ Օգտագործում է սյունակների ընտանիք տվյալների պահելու համար, ի տարբերություն նման MemcacheDB-ի, որը պահում է միայն բանալի-արժեք։ Նաև հնարավոր է կազմակերպել հեշերի պահոցներ բազմամակարդակ ներդրմամբ։
Այս տվյալների բազայի համակարգը պատկանում է անխափանացված հավաստիացման դասին։ Տվյալները բազայում ավտոմատ կերպով բաշխվում են մի քանի հանգույցներով ցանցում կամ հավասարապես մի քանի տվյալների կենտրոնների վրա։ Մի հանգույցի խափանման դեպքում մյուսները վերցնում են նրա գործառույթները։ Հանգույցներ ավելացնելու և թարմացնելու պրոցեսը տեղի է ունենում առանց հավելյալ միջամտության։
Խորհուրդ է տրվում վերականգնել բանալիները բոլոր հանգույցների համար, նույնիսկ եթե դրանց քանակը ավելացել է մի քանի անգամ։

4.2 Տվյալների մոդել
Cassandra-ում ծրագիրը աշխատում է բանալիների տարածքի (keyspace) հետ, որը համապատասխանում է տվյալների բազայի սխեմային (database schema) հարաբերական մոդելում։ Այս տարածքում կարող են լինել մի քանի սյունական ընտանիքներ (column family), որոնք համապատասխանում են սեղանի հարաբերական մոդելում։
Սյունական ընտանիքները պարունակում են սյունակներ (columns), որոնք միավորվում են տողային բանալով (row key) գրառման (row) մեջ։ Ամեն սյունակ բաղկացած է երեք մասերից՝ անվանումը (column name), ժամանակային կնիքը (timestamp) և արժեքը (value)։ Սյունակները գրառման մեջ հերթականացված են։ Ի տարբերություն հարաբերական բազայի, Cassandra-ում չկա սահմանափակում, որ գրառումները (տողերը) ունենան նույն անուններով սյունակները։
Վերջին տարբերակներում Cassandra-ում ներկայացվել է CQL լեզուն, որը նպատակադրված է կատարելու տվյալների որոշման և փոփոխման հարցումներ (DDL, DML) և ստեղծելու երկրորդային ինդեքսներ (secondary indices)։

Cassandra-ն պահում է կոնկրետ արժեք, որը կարելի է նույնականացնել։
- բանալիների տարածքով — դա կապն է ծրագրի (առարկայի դաշտի) հետ։ Դա թույլ է տալիս տեղադրել տարբեր ծրագրերի տվյալները միևնույն կլաստերի վրա։
- սյունական ընտանիքով — դա կապված է հարցման հետ;
- բանալով — դա կապն է կլաստերի հանգույցի հետ։ Բանալին որոշում է, թե որ հանգույցները պետք է հասանելիություն ստանան պահված սյունակների։
- սյունակի անունով — դա կապն է գրառման ատրիբուտի հետ, որը թույլ է տալիս պահել մի քանի արժեքներ մեկ գրառման մեջ։
Ամեն արժեքին համապատասխանում է ժամանակային կնիքը, որը սահմանում է օգտատերը։ Որքան մեծ է թիվը, այնքան նոր է սյունակը։ Համեմատության մեջ հների սյունակները տեղահանվում են։
4.3 Տվյալների տեսակներ
Տվյալների տեսակների մասին՝ բանալիների տարածքը և սյունական ընտանիքը դա տողեր են (անուններ)։ Ժամանակային կնիքը 64-բիտ թիվ է, իսկ բանալին, սյունակի անունը և սյունակի արժեքը՝ դա բայթերի զանգված։ Նաև Cassандրա-ն թույլ է տալիս սահմանել տվյալների տեսակները (data type)։ Դա կարող է կատարվել սյունական ընտանիքի ստեղծման ժամանակ։
Սյունակների անունների համար դա անվանում է համեմատիչ (comparator), իսկ արժեքների և բանալիների համար՝ վալիդատոր (validator)։ Համեմատիչը որոշում է, թե ինչ բայթերի արժեքներ են թույլատրելի սյունակների անունների համար և ինչպես նրանց հերթականացնել։ Վալիդատորը՝ ինչ բայթերի արժեքներ են թույլատրելի սյունակների արժեքների և բանալիների համար։
Եթե տվյալների տեսակները չեն նշված, ապա Cassандրա-ն պահում և համեմատում է նրանց որպես բայթային տողեր (BytesType), որովհետև այդպես են նրանք պահպանվում ներսում։
Տվյալների տեսակները լինում են հետևյալը՝
- BytesType: ցանկացած բայթային տողեր (առանց վալիդացիայի)
- AsciiType: ASCII տող
- UTF8Type: UTF-8 տող
- IntegerType: կամայական չափի թիվ
- Int32Type: 4-բայթային թիվ
- LongType: 8-բայթային թիվ
- UUIDType: UUID 1-րդ կամ 4-րդ տեսակ
- TimeUUIDType: UUID 1-րդ տեսակ
- DateType: 8-բայթային արժեք ժամանակային կնիքի
- BooleanType: երկու արժեք՝ true = 1 կամ false = 0
- FloatType: 4-բայթային լողացող կետով թիվ
- DoubleType: 8-բայթային լողացող կետով թիվ
- DecimalType: կամայական չափի և լողացող կետով թիվ
- CounterColumnType: 8-բայթային հաշվիչ
Cassandra-ում տվյալների գրառումը նշանակում է գրառման արդիացում։ Դա նշանակում է, որ եթե նույն անվանումով և բանալիով սյունակը գալիս է սյունական ընտանիք, և ժամանակային կնիքը ավելի մեծ է արդեն պահպանվածից, ապա արժեքը կվերագրվի։ Գրառված արժեքները չեն փոփոխվում, պարզապես գալիս են նոր արժեքներ։
Cassandra-ում գրառումը տևում է ավելի քիչ ժամանակ, քան կարդալը։ Դա նշանակում է, որ նախագծողները պետք է օգտագործեն այլ մոտեցում։ Եթե դիտարկենք սյունական ընտանիքը տվյալների մոդելի նախագծման տեսանկյունից, ապա ավելի հեշտ կլինի ներկայացնել այն որպես նյութականացված պատկերացում (materialized view) — կառուցվածք, որը ներկայացնում է որոշ հարցման տվյալներ, բայց պահում է դրանք սկավառակի վրա։
Որպեսզի չարտադրի ոչ մի հավելյալ հաշվարկներ, ավելի լավ է սյունական ընտանիքում գրառել բոլոր տվյալները, որոնք անհրաժեշտ են հարցման մշակման համար։ Դա նշանակում է, որ նախագծողները պետք է մոտենան հարցին ոչ սուբյեկտների միջև հարաբերությունների կամ օբյեկտների միջև կապերի տեսանկյունից, այլ հարցումների տեսանկյունից՝ ինչ դաշտեր պետք է ընտրվեն, ինչ հերթականությամբ պետք է լինեն գրառումները և ինչ տվյալներ, կապված հիմնականի հետ, պետք է ստացվեն։
Գրառման մեջ սյունակների քանակը սահմանափակ է 2 միլիարդով։ Այս ամենը ավելի մանրամասն կարելի է կարդալ նախագծման և օպտիմալացման տեխնիկաներին նվիրված հոդվածում։ Սկսենք տվյալների գրառման և կարդալու գործընթացը Cassandra-ից։
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ