Цассандра модел података са једноставним примером

Преглед садржаја:

Anonim

Иако Цассандра језик упита подсећа на СКЛ језик, њихови методи моделирања података су потпуно различити.

У Цассандри лош модел података може погоршати перформансе, посебно када корисници покушавају да примене РДБМС концепте на Цассандри. Најбоље је имати на уму неколико правила која су детаљно описана у наставку.

У овом упутству ћете научити-

  • Правила модела података Цассандра
  • Моделирајте своје податке у Цассандри
  • Руковање односом један према један
  • Руковање једном до многим везама
  • Руковање односима многи са многима

Правила модела података Цассандра

У Цассандри писања нису скупа. Цассандра не подржава придруживања, груписање по клаузулама, клаузулу ИЛИ, агрегације итд. Тако да податке морате складиштити на такав начин да би требали бити у потпуности доступни. Дакле, ова правила се морају имати на уму приликом моделирања података у Цассандри.

  1. Увећајте број уписа

    У Цассандри су писања врло јефтина. Цассандра је оптимизована за високе перформансе писања. Зато покушајте да максимизирате писање ради бољих перформанси читања и доступности података. Постоји компромис између писања података и читања података. Дакле, оптимизујте перформансе читања података максимизирањем броја уписаних података.

  2. Увећајте дуплицирање података

    Денормализација података и дуплирање података су дефацто Цассандре. Простор на диску није скупљи од меморије, обраде ЦПУ-а и рада ИО-а. Како је Цассандра дистрибуирана база података, тако и дуплирање података омогућава тренутну доступност података и ниједну тачку квара.

Циљеви моделирања података

Требали бисте имати следеће циљеве док моделирате податке у Цассандри.

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

    Желите једнаку количину података на сваком чвору кластера Касандра. Подаци се шире на различите чворове на основу партицијских кључева који су први део примарног кључа. Дакле, покушајте да одаберете целе бројеве као примарни кључ за равномерно ширење података око кластера.

  2. Смањите број прочитаних партиција док тражите податке

    Партиција је група записа са истим партицијским кључем. Када се изда упит за читање, он прикупља податке са различитих чворова са различитих партиција.

    Ако ће бити много партиција, онда је потребно прикупити све ове партиције за прикупљање података о упиту.

    То не значи да партиције не треба стварати. Ако су ваши подаци врло велики, не можете задржати ту огромну количину података на једној партицији. Појединачна партиција ће бити успорена.

    Зато покушајте да изаберете уравнотежен број партиција.

Добар примарни кључ

Узмимо пример и пронађимо који је примарни кључ добар.

Ево табеле МусицПлаилист.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));

У горњем примеру, табела МусицПлаилист,

  • Сонгид је партицијски кључ и
  • СонгНаме је колона за груписање
  • Подаци ће се групирати на основу СонгНаме. Са СонгИд-ом биће створена само једна партиција. У табели МусицПлаилист неће бити ниједне друге партиције.

Овај модел података успорава преузимање података због лошег примарног кључа.

Ево још једне табеле МусицПлаилист.

Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));

У горњем примеру, табела МусицПлаилист,

  • Сонгид и Иеар су партицијски кључ, и
  • СонгНаме је колона за груписање.
  • Подаци ће се групирати на основу СонгНаме. У овој табели ће се сваке године креирати нова партиција. Све песме године биће на истом чвору. Овај примарни кључ ће бити врло користан за податке.

Наше претраживање података биће брзо помоћу овог модела података.

Моделирајте своје податке у Цассандри

При моделирању упита треба имати на уму следеће ствари.

  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;

Разлика између РДБМС и Цассандра моделирања података

РДБМС

Цассандра

Похрањује податке у нормализованом облику

Похрањује податке у денормализованом облику

Застарели ДБМ; структурирани подаци

Широка продавница, Динамиц; структурирани и неструктурирани подаци

Резиме

Моделирање података у Цассандри разликује се од осталих РДБМС база података. Моделирање података Цассандра има нека правила. Ова правила се морају поштовати за добро моделирање података. Поред ових правила, видели смо три различита случаја моделирања података и како се с њима поступати.