Модел на данни на Касандра с опростен пример

Съдържание:

Anonim

Въпреки че езикът за заявки на Cassandra прилича на SQL език, методите им за моделиране на данни са напълно различни.

В Cassandra лошият модел на данни може да влоши производителността, особено когато потребителите се опитват да внедрят концепциите за RDBMS на Cassandra. Най-добре е да имате предвид няколко правила, описани по-долу.

В този урок ще научите -

  • Правила на модела за данни на Касандра
  • Моделирайте вашите данни в Cassandra
  • Справяне с взаимоотношенията един към един
  • Справяне с една към много връзки
  • Работа с връзката между много и много

Правила на модела за данни на Касандра

В Касандра писанията не са скъпи. Касандра не поддържа присъединявания, групиране по, ИЛИ клауза, агрегиране и т.н. Така че трябва да съхранявате данните си по такъв начин, че да бъдат напълно извличащи. Така че тези правила трябва да се имат предвид при моделиране на данни в Касандра.

  1. Увеличете броя на записите

    В Касандра пише много евтино. Касандра е оптимизирана за висока производителност при запис. Затова се опитайте да увеличите максимално броя на вашите записи за по-добра производителност при четене и наличност на данни. Има компромис между запис на данни и четене на данни. Така че, оптимизирайте ефективността си при четене на данни, като увеличите максимално броя на записите на данни.

  2. Увеличете дублирането на данни

    Денормализацията и дублирането на данни са дефакто на Касандра. Дисковото пространство не е по-скъпо от паметта, обработката на процесора и работата на IO. Тъй като Касандра е разпределена база данни, така дублирането на данни осигурява незабавна наличност на данни и няма единична точка на отказ.

Цели за моделиране на данни

Трябва да имате следните цели, докато моделирате данни в Cassandra.

  1. Разпределете данните равномерно около клъстера

    Искате еднакво количество данни на всеки възел на клъстера Cassandra. Данните се разпространяват в различни възли въз основа на дяловете, които са първата част на първичния ключ. Така че, опитайте се да изберете цели числа като първичен ключ за равномерно разпространение на данните около клъстера.

  2. Намалете до минимум броя на прочетените дялове при заявки за данни

    Разделянето е група от записи със същия дялов ключ. Когато е издадена заявката за четене, тя събира данни от различни възли от различни дялове.

    Ако ще има много дялове, тогава всички тези дялове трябва да бъдат посетени за събиране на данните за заявката.

    Това не означава, че не трябва да се създават дялове. Ако данните ви са много големи, не можете да съхранявате това огромно количество данни на отделния дял. Единичният дял ще бъде забавен.

    Затова се опитайте да изберете балансиран брой дялове.

Добър първичен ключ

Да вземем пример и да открием кой първичен ключ е добър.

Ето таблицата 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

Следвайки нещата трябва да имате предвид, докато моделирате вашите заявки.

  1. Определете какви заявки искате да поддържате
  2. На първо място, определете какви заявки искате.

    Например, имате ли нужда?

    • Присъединява се
    • Групирай по
    • Филтриране върху коя колона и т.н.
  3. Създайте таблица според вашите запитвания

    Създайте таблица според вашите запитвания. Създайте таблица, която ще задоволи вашите запитвания. Опитайте се да създадете таблица по такъв начин, че да се прочете минимален брой дялове.

Справяне с взаимоотношенията един към един

Отношението едно към едно означава, че две таблици имат съответствие едно към едно. Например студентът може да регистрира само един курс и аз искам да потърся в студент това, в кой курс е регистриран определен студент.

Така че в този случай схемата на вашата таблица трябва да обхваща всички подробности за студента, съответстващи на конкретния курс, като името на курса, номер на студента, името на студента и т.н.

Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);

Справяне с една към много връзки

Взаимоотношенията един към много означава да има кореспонденция между две таблици.

Например, курс може да се изучава от много студенти. Искам да претърся всички студенти, които учат определен курс.

Така че, като запитвам името на курса, ще имам много имена на студенти, които ще учат определен курс.

Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);

Мога да извлека всички студенти за определен курс чрез следната заявка.

Select * from Student_Course where Course_name='Course Name';

Работа с връзката между много и много

Много към много взаимоотношения означава да има много до много кореспонденция между две таблици.

Например, курс може да се изучава от много студенти, а студентът може да изучава и много курсове.

Искам да претърся всички студенти, които учат определен курс. Също така искам да потърся целия курс, който изучава определен студент.

Така че в този случай ще имам две таблици, т.е. ще разделя проблема на два случая.

Първо, ще създам таблица, чрез която можете да намерите курсове от определен студент.

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 Data Modeling

RDBMS

Касандра

Съхранява данни в нормализиран вид

Съхранява данни в денормализирана форма

Наследени dbms; структурирани данни

Магазин с широк ред, динамичен; структурирани и неструктурирани данни

Обобщение

Моделирането на данни в Cassandra е различно от другите бази данни на RDBMS. Моделирането на данни от Касандра има някои правила. Тези правила трябва да се спазват за добро моделиране на данни. Освен тези правила, видяхме три различни случая за моделиране на данни и как да се справим с тях.