Учебники

4) Модель данных

Хотя язык запросов Cassandra похож на язык SQL , их методы моделирования данных совершенно разные.

В Cassandra плохая модель данных может ухудшить производительность, особенно когда пользователи пытаются реализовать концепции RDBMS на Cassandra. Лучше всего помнить несколько правил, подробно описанных ниже.

В этом уроке вы узнаете

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

На Кассандре пишет не дорого. Cassandra не поддерживает объединения, группирование, предложение OR, агрегирование и т. Д. Поэтому вы должны хранить данные таким образом, чтобы их можно было полностью извлечь. Поэтому необходимо учитывать эти правила при моделировании данных в Cassandra.

  1. Максимизировать количество записей

    На Кассандре пишет очень дешево. Cassandra оптимизирована для высокой производительности записи. Поэтому постарайтесь максимально увеличить количество записей для повышения производительности чтения и доступности данных. Существует компромисс между записью данных и чтением данных. Таким образом, оптимизируйте производительность чтения данных, максимизировав количество записей данных.

  2. Максимизация дублирования данных

    Денормализация данных и дублирование данных являются де-факто Кассандры. Дисковое пространство не дороже, чем память, обработка процессора и операции ввода-вывода. Как 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. В этой таблице каждый год будет создаваться новый раздел. Все песни года будут на одном узле. Этот первичный ключ будет очень полезен для данных.

Наш поиск данных будет быстрым благодаря этой модели данных.

Смоделируйте ваши данные в Кассандре

При моделировании ваших запросов следует учитывать следующее.

  1. Определите, какие запросы вы хотите поддерживать
  2. Прежде всего, определите, какие запросы вы хотите.

    Например, тебе нужно?

  • присоединяется
  • Группа по
  • Фильтрация по какому столбцу и т. Д.
  • Создать таблицу по вашим запросам

    Создать таблицу в соответствии с вашими запросами. Создайте таблицу, которая удовлетворит ваши запросы. Попробуйте создать таблицу таким образом, чтобы было прочитано минимальное количество разделов.

  • Обработка отношений один на один

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

    Таким образом, в этом случае ваша схема таблицы должна включать в себя все детали учащегося в соответствии с этим конкретным курсом, например, название курса, номер ученика, имя студента и т. Д.

    Изучите моделирование данных 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 на простом примере

    Я хочу найти всех студентов, которые изучают определенный курс. Кроме того, я хочу найти все курсы, которые изучает конкретный студент.

    Так что в этом случае у меня будет две таблицы, т.е. разделю задачу на два случая.

    First, I will create a table by which you can find courses by a particular student.

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

    I can find all the courses by a particular student by the following query.

    Select * from Student_Course where student_rollno=rollno;
    

    Second, I will create a table by which you can find how many students are studying a particular course.

    Create table Course_Student
        (
            Course_name text primary key,
            Student_name text,
            student_rollno int
        );
    

    I can find a student in a particular course by the following query.

    Select * from Course_Student where Course_name=CourseName;
    

    Difference between RDBMS and Cassandra Data Modelling

    RDBMS

    Cassandra

    Stores data in normalized form

    Stores data in denormalized form

    Legacy dbms; structured data

    Широкий рядный магазин, Dynamic; структурированные и неструктурированные данные

    Резюме

    Моделирование данных в Cassandra отличается от других баз данных RDBMS. У моделирования данных Кассандры есть некоторые правила. Эти правила должны соблюдаться для хорошего моделирования данных. Помимо этих правил, мы рассмотрели три различных случая моделирования данных и способы их решения.