Cassandra Модел на данни с пример за проста база данни
Въпреки че Cassandra езикът на заявките наподобява с SQL език, техните методи за моделиране на данни са напълно различни.
In Cassandra, лош модел на данни може да влоши производителността, особено когато потребителите се опитват да внедрят концепциите на RDBMS Cassandra. Най-добре е да имате предвид няколко правила, описани по-долу.
Cassandra Правила за модел на данни
In Cassandra, пише не са скъпи. Cassandra не поддържа присъединяване, групиране по, клауза ИЛИ, агрегиране и т.н. Така че трябва да съхранявате данните си по такъв начин, че да могат да бъдат напълно извличани. Така че тези правила трябва да се имат предвид при моделиране на данни Cassandra.
Увеличете максимално броя на писанията
In Cassandra, пише са много евтини. Cassandra е оптимизиран за висока производителност на запис. Така че опитайте се да увеличите записите си за по-добра производителност при четене и наличност на данни. Има компромис между запис на данни и четене на данни. Така че, оптимизирайте ефективността на четене на данни, като увеличите максимално броя на записите на данни.
Увеличете дублирането на данни
Денормализацията на данните и дублирането на данни са дефакто Cassandra. Дисковото пространство не е по-скъпо от паметта, обработката на процесора и работата на IO. като Cassandra е разпределена база данни, така че дублирането на данни осигурява незабавна наличност на данни и няма нито една точка на отказ.
Cassandra Цели за моделиране на данни
Трябва да имате следните цели, докато моделирате данни Cassandra:
Разпръснете данните равномерно около Cluster
Искате еднакво количество данни за всеки възел на Cassandra Cluster. Данните се разпространяват към различни възли въз основа на ключове за дялове, които са първата част от първичния ключ. Така че, опитайте се да изберете цели числа като първичен ключ за равномерно разпространение на данни около клъстера.
Намалете до минимум броя на прочетените дялове, докато заявявате данни
Дялът е група от записи с един и същ ключ за дял. Когато се издаде заявка за четене, тя събира данни от различни възли от различни дялове.
Ако ще има много дялове, всички тези дялове трябва да бъдат посетени за събиране на данните за заявката.
Това не означава, че не трябва да се създават дялове. Ако вашите данни са много големи, не можете да запазите това огромно количество данни на един дял. Единичният дял ще се забави.
Затова се опитайте да изберете балансиран брой дялове.
Добър първичен ключ Cassandra
Нека вземем пример и да открием кой първичен ключ е добър.
Ето таблицата MusicPlaylist.
Create table MusicPlaylist
(
SongId int,
SongName text,
Year int,
Singer text,
Primary key(SongId, SongName)
);
В горния пример таблицата MusicPlaylist,
- Songid е ключът на дяла и
- SongName е колоната за клъстериране
- Данните ще бъдат групирани въз основа на SongName. Ще бъде създаден само един дял с SongId. Няма да има друг дял в таблицата MusicPlaylist.
Извличането на данни ще бъде бавно от този модел на данни поради лош първичен ключ.
Ето още една таблица MusicPlaylist.
Create table MusicPlaylist
(
SongId int,
SongName text,
Year int,
Singer text,
Primary key((SongId, Year), SongName)
);
В горния пример таблицата MusicPlaylist,
- Songid и Year са ключът за разделяне и
- SongName е колоната за клъстериране.
- Данните ще бъдат групирани въз основа на SongName. В тази таблица всяка година ще се създава нов дял. Всички песни на годината ще бъдат на един и същ възел. Този първичен ключ ще бъде много полезен за данните.
Нашето извличане на данни ще бъде бързо с този модел на данни.
Моделирайте вашите данни Cassandra
Трябва да имате предвид следните неща, докато моделирате вашите заявки:
Определете какви заявки искате да поддържате
Първо, определете какви заявки искате.
Например, имате ли нужда?
- Се присъедини към
- Групирай по
- Филтриране по коя колона и т.н.
Създайте таблица според вашите заявки
Създайте таблица според вашите заявки. Създайте таблица, която ще задоволи вашите запитвания. Опитайте се да създадете таблица по такъв начин, че да трябва да се прочетат минимален брой дялове.
Справяне с взаимоотношения едно към едно в Cassandra
Връзката едно към едно означава, че две таблици имат съответствие едно към едно. Например, студентът може да регистрира само един курс и аз искам да търся за студент, в който курс е регистриран конкретен студент.
Така че в този случай схемата на вашата таблица трябва да включва всички подробности за ученика, съответстващи на този конкретен курс, като името на курса, номер на кандидата, име на ученика и т.н.

Create table Student_Course
(
Student rollno int primary key,
Student_name text,
Course_name text,
);
Управление на връзката „един към много“. Cassandra
Връзките едно към много означава да има кореспонденция едно към много между две таблици.
Например, един курс може да се изучава от много студенти. Искам да търся всички студенти, които учат определен курс.
Така че чрез запитване за име на курс ще имам много имена на студенти, които ще изучават определен курс.

Create table Student_Course
(
Student_rollno int,
Student_name text,
Course_name text,
);
Мога да извлека всички студенти за определен курс чрез следната заявка.
Select * from Student_Course where Course_name='Course Name';
Справяне с много към много взаимоотношения в Cassandra
Много към много връзки означава да има много към много кореспонденция между две таблици.
Например, един курс може да се изучава от много студенти и един студент също може да изучава много курсове.

Искам да търся всички студенти, които учат определен курс. Освен това искам да търся в целия курс, който изучава конкретен студент.
Така че в този случай ще имам две таблици, т.е. разделям проблема на два случая.
Първо, ще създам таблица, чрез която можете да намерите курсове от конкретен студент.
Create table Student_Course
(
Student_rollno int primary key,
Student_name text,
Course_name text,
);
Мога да намеря всички курсове от конкретен студент чрез следната заявка.
Select * from Student_Course where student_rollno=rollno;
Второ, ще създам таблица, чрез която можете да намерите колко студенти учат определен курс.
Create table Course_Student
(
Course_name text primary key,
Student_name text,
student_rollno int
);
Мога да намеря студент в определен курс чрез следната заявка.
Select * from Course_Student where Course_name=CourseName;
Разлика между RDBMS и Cassandra Моделиране на данни
| RDBMS | Cassandra |
|---|---|
| Съхранява данните в нормализирана форма | Съхранява данни в денормализирана форма |
| Наследени dbms; структурирани данни | Магазин с широки редове, динамичен; структурирани и неструктурирани данни |
Oбобщение
- Моделиране на данни в Cassandra е различен от другия RDBMS бази данни.
- Cassandra моделирането на данни има някои правила. Тези правила трябва да се спазват за добро моделиране на данни. Освен тези правила, видяхме три различни случая на моделиране на данни и как да се справим с тях.
- Връзката едно към едно означава, че две таблици имат съответствие едно към едно.
- Връзките едно към много означава да има кореспонденция едно към много между две таблици.
- Много към много връзки означава да има много към много кореспонденция между две таблици.
