• Главная
  • DataScience
  • CloudServicesEngineer
  • Поиск
Data Science

YDB. Диагностика и мониторинг

Кратко:

  • YDB предоставляет инструменты мониторинга и диагностики для работы с БД.
  • В разделе Мониторинг доступны дашборды с графиками метрик и временем задержки транзакций.
  • В разделе Диагностика доступны системные таблицы с подробной информацией о работе БД.
  • YQL запросы позволяют извлекать нужные сведения из системных таблиц.
  • Раздел Диагностика предоставляет информацию о размерах таблиц, нагрузке на них и длительности запросов.
  • Примеры запросов для диагностики: размер таблиц, нагрузка на партиции, количество строк и партиций.
  • Улучшение работы БД возможно через правильное партиционирование и оптимизацию запросов.
  • Подробная информация о системных таблицах и данных в них доступна в документации.
  • Инструменты диагностики и мониторинга помогают улучшить работу и надежность БД.

Диагностика и мониторинг

Когда вы работаете с БД, важно отслеживать, как она справляется с нагрузкой. YDB предоставляет пользователям необходимые для этого инструменты мониторинга и диагностики.
В разделе Мониторинг консоли управления вы найдёте дашборды, на которых приведены графики изменения метрик, характеризующих потребление ресурсов (CPU, оперативной памяти и дискового пространства) и время задержки транзакций (например, задержки операций чтения и операций записи на сервере или на клиенте БД).
image
В разделе Диагностика предоставлена возможность доступа к «системным» (то есть, специальным служебным) таблицам, содержащим детализированную информацию о работе БД. Нужные сведения извлекаются из системных таблиц с помощью YQL запросов.
В этом разделе вы можете получить информацию о размерах партиций таблиц и нагрузке на них; выяснить, какие запросы выполняются дольше других, больше всего нагружают CPU или приводят к чтению наибольшего объёма данных. Для наиболее характерных вопросов о работе БД нужные YQL запросы уже составлены. Вам остаётся только их запустить и проанализировать полученные результаты.
image
Давайте посмотрим, как это работает. Откройте раздел Диагностика в консоли управления и кликните на пункт «Топ таблиц по размеру».
Вы перейдете в раздел Навигация, где в SQL-редакторе увидите заполненное поле ввода с запросом к служебной таблице partition_stats, в которой хранится информация об отдельных партициях всех таблиц БД.
image
Нажмите кнопку Выполнить. YDB выведет информацию об имеющихся в БД таблицах, их размере, суммарном числе строк и количестве партиций, а также значениях нагрузки на партиции (доли ядра).
image
Эти сведения могут помочь вам улучшить работу БД или предвосхитить возможные проблемы. Например, если основная нагрузка (потребление процессора) приходится на одну из таблиц, то впору задуматься о её правильном партиционировании и/или оптимизации идущих к ней запросов.
 
Подробная информация о системных таблицах и о том, какие данные в них хранятся, приведена в документации.
 
Пользуйтесь инструментами диагностики и мониторинга, это поможет вашей БД работать быстро и надёжно.

 

Категория: Cloud Services Engineer
Просмотров: 650

YDB. План запроса

Кратко:

  • Оптимизатор запросов YDB составляет наилучший план выполнения запроса.
  • Для оптимизации запросов нужно получить и проанализировать план запроса.
  • План запроса можно получить через консоль управления или YDB CLI.
  • План запроса содержит информацию об обращениях к таблицам и операциях чтения и записи.
  • Типы чтения включают FullScan, Scan, Lookup и MultiLookup.
  • Типы записи включают Upsert, MultiUpsert, Erase и MultiErase.
  • План запроса из примера показывает FullScan для таблицы seasons и чтение по ключу для таблицы series.
  • Такой запрос может привести к избыточному росту нагрузки на БД и задержкам.

План запроса

Когда вы обращаетесь к БД, оптимизатор запросов YDB пытается составить наилучший, по его мнению, план выполнения запроса.
Чтобы оптимизировать свои запросы к БД с точки зрения скорости их выполнения (и/или стоимости, что актуально для бессерверного режима YDB), нужно получить и проанализировать этот план. Вы можете это сделать через консоль управления или с помощью YDB CLI.
Давайте разберём план запроса, который мы использовали на прошлом уроке в качестве примера объединения таблиц.
SELECT 
    sa.title AS season_title, 
    sr.title AS series_title, 
    sr.series_id, sa.season_id 
FROM seasons AS sa 
INNER JOIN series AS sr ON sa.series_id = sr.series_id 
WHERE sa.season_id = 1

 

Войдите в редактор SQL вашей БД и вставьте в поле ввода текст запроса. Нажмите на стрелку справа от кнопки Выполнить и в выпадающем меню выберите опцию Explain.
image
В результате внизу отобразится поле, содержащее план запроса.
image
Секция tables плана запроса содержит информацию об обращениях к таблицам. Операции чтения описываются в разделе reads, а операции записи — в разделе writes (в этом плане запроса данный раздел отсутствует).
"tables": [
  {
    "name": "/ru-central1/b1glk1805em030s2ir60/etnm1bh37e2hova06qhf/seasons",
      "reads": [
        {
          "columns": [
            "season_id",
            "series_id",
            "title"
          ],
          "scan_by": [
            "series_id (-∞, +∞)",
            "season_id (-∞, +∞)"
          ],
          "type": "FullScan"
        }
      ]
    },
    {
      "name": "/ru-central1/b1glk1805em030s2ir60/etnm1bh37e2hova06qhf/series",
      "reads": [
        {
          "columns": [
          "series_id",
          "title"
          ],
          "type": "Lookup"
        }
      ]
    }
  ]

 

Ключевой характеристикой любого обращения к таблице является его тип.
Типы чтения:
  • FullScan — полное сканирование таблицы, читаются все записи на всех шардах;
  • Scan — читается определённый диапазон записей;
  • Lookup — чтение по ключу или префиксу ключа;
  • MultiLookup — множественные чтения по ключу или префиксу ключа (такой тип обращения возможен, например, при выполнении инструкций JOIN).
Типы записи:
  • Upsert — добавление одной записи;
  • MultiUpsert — добавление нескольких записей;
  • Erase — единичное удаление по ключу;
  • MultiErase — множественные удаления.
Рассмотрим план запроса из нашего примера.
Параметр scan_by показывает, по каким колонкам выполняется scan, то есть чтение всех записей в определённом диапазоне значений. В columns перечислены колонки, значения которых будут считываться из таблицы.
Из плана запроса следует, что для таблицы seasons будет выполнен FullScan, а для таблицы series — чтение по ключу (Lookup). Тип чтения FullScan означает, что для выполнения запроса потребуется полностью прочитать всю таблицу. Если таблица большая, то такой запрос приведет к избыточному росту нагрузки на БД и задержкам, а в режиме serverless — ещё и к повышенным расходам.

 

Категория: Cloud Services Engineer
Просмотров: 661

YDB. ПР. YQL и работа с данными

Кратко:

  • SELECT season_id, episodes_id, title, imdb_rating FROM ratings VIEW rating_index WHERE imdb_rating >= 85 ORDER BY imdb_rating DESC;
  • CREATE TABLE ratings (season_id Uint64, episodes_id Uint64, title Utf8, air_date Date, imdb_rating Uint64, PRIMARY KEY (season_id, episodes_id), INDEX rating_index GLOBAL ON (imdb_rating));
  • REPLACE INTO ratings (season_id, episodes_id, title, air_date, imdb_rating) VALUES (1, 1, "Yesterday's Jam", Date("2006-02-03"), 76), (1, 2, "Calamity Jen", Date("2006-02-03"), 82), (1, 3, "Fifty-Fifty", Date("2006-02-10"), 79);
  • ALTER TABLE ratings DROP COLUMN air_date;
  • SELECT series_id, COUNT(*) AS total_episodes FROM episodes GROUP BY series_id ORDER BY series_id;
  • SELECT sa.title AS season_title, sr.title AS series_title, sa.season_id FROM seasons AS sa INNER JOIN series AS sr ON sa.series_id = sr.series_id WHERE sa.season_id = 1 ORDER BY sr.series_id;
  • ВЫБЕРИТЕ название сериала IT Crowd и название каждого эпизода из таблицы episodes.

Практическая работа. YQL и работа с данными

В этом уроке вы освоите базовый набор операций для работы с данными с использованием YQL и консоли управления Yandex Cloud. Подробная информация о YQL приведена в разделе Справочник YQL в документации.
Чтобы начать, войдите в раздел Навигация консоли управления и откройте редактор SQL, нажав на кнопку Новый SQL-запрос.
image
На прошлом уроке мы уже создали в нашей БД три таблицы, содержащие информацию о сериалах «IT Crowd» и «Silicon Valley».
  1. Добавим в БД еще одну таблицу с рейтингами эпизодов сериала IT Crowd на IMDb.com.
YQL является диалектом SQL, поэтому многие инструкции в этих языках идентичны.
Для создания таблицы вам понадобится сделать запрос к БД, содержащий инструкцию CREATE TABLE. Например, если бы мы хотели создать таблицу seasons (она уже есть в вашей БД), то SQL запрос выглядел бы следующим образом:
CREATE TABLE seasons
(
    series_id Uint64, 
    season_id Uint64, 
    first_aired Date, 
    last_aired Date, 
    title Utf8, 
        PRIMARY KEY (series_id, season_id)
);

 

Обратите внимание, что в пределах директории YDB имена таблиц должны быть уникальны. Первичный ключ (PRIMARY KEY) — это столбец или комбинация столбцов, однозначно идентифицирующих каждую строку в таблице. Он может содержать только неповторяющиеся значения. Для таблицы YDB указание первичного ключа обязательно, при этом он может быть только один.
 
Первичный ключ по сути является первичным индексом, который помогает СУБД быстрее обнаруживать отдельные записи в таблице и сокращает время выполнения запросов. Также в таблицу можно добавить один или несколько вторичных индексов. Они служат той же цели, но в отличие от первичного индекса могут содержать повторяющиеся значения. Добавить вторичные индексы можно в любой момент, когда возникнет необходимость, и это не вызовет деградацию производительности БД. Чтобы при создании таблицы добавить в нее вторичный индекс, используется такая конструкция:
INDEX <имя индекса> GLOBAL ON (<имя столбца1>, <имя столбца2>, ...)

 

Вторичный индекс можно добавить и в уже существующую таблицу. Работа БД при этом не прерывается. В отличие от предыдущего случая в существующую таблицу можно добавлять только один вторичный индекс за раз. Делается это с помощью следующей команды:
ALTER TABLE <имя таблицы> ADD INDEX <имя индекса> GLOBAL ON (<имя столбца>);

 

Задание 1: создайте таблицу ratings, в которой будут содержаться рейтинги всех эпизодов сериала IT Crowd, со столбцами season_id (Uint64), episodes_id (Uint64), title (Utf8), air_date (Date) и imdb_rating (Uint64) и вторичным индексом rating_index по полю imdb_rating.
 
Ваш запрос должен быть написан так:
CREATE TABLE ratings (
    season_id Uint64, 
    episodes_id Uint64, 
    title Utf8, 
    air_date Date, 
    imdb_rating Uint64, 
        PRIMARY KEY (season_id, episodes_id), 
        INDEX rating_index GLOBAL ON (imdb_rating)
);
  1. Добавим в эту таблицу данные. Для вставки данных в YDB помимо обычной SQL инструкции INSERT также используются инструкции REPLACE и UPSERT.
При выполнении INSERT перед операцией записи выполняется операция чтения данных. Это позволяет убедиться, что уникальность первичного ключа будет соблюдена. При выполнении инструкций REPLACE и UPSERT осуществляется слепая запись.
Инструкции REPLACE и UPSERT используются для добавления новой или изменения существующей строки по заданному значению первичного ключа. При операциях записи и изменения данных использование этих инструкций эффективнее.
Если при выполнении этих инструкций строка с указанным значением первичного ключа не существует, то она будет создана. Если же такая строка существует, то значения ее столбцов будут заменены на новые. Отличие между REPLACE и UPSERT заключается в том, что первая из этих инструкций устанавливает значения столбцов, не участвующих в операции, в значения по умолчанию, а вторая такие значения не меняет.
Одним запросом REPLACE, UPSERT или INSERT можно вставить в таблицу несколько строк.
Например, если бы мы хотели добавить в таблицу series те данные, которые в ней сейчас содержатся, то SQL запрос выглядел бы так:
REPLACE INTO series (series_id, title, release_date, series_info) 
VALUES 
    ( 
        1, 
        "IT Crowd", 
        Date("2006-02-03"), 
        "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."), 
    ( 
        2, 
        "Silicon Valley", 
        Date("2014-04-06"), 
        "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley." 
    );

 

Задание 2: добавьте в таблицу ratings данные из этого файла.
 
Ваш запрос должен выглядеть таким образом:
REPLACE INTO ratings (season_id, episodes_id, title, air_date, imdb_rating) VALUES 
    (1, 1, "Yesterday's Jam", Date("2006-02-03"), 76),
    (1, 2, "Calamity Jen", Date("2006-02-03"), 82),
    (1, 3, "Fifty-Fifty", Date("2006-02-10"), 79),
    (1, 4, "The Red Door", Date("2006-02-17"), 80),
    (1, 5, "The Haunting of Bill Crouse", Date("2006-02-24"), 85),
    (1, 6, "Aunt Irma Visits", Date("2006-03-03"), 81),
    (2, 1, "The Work Outing", Date("2006-08-24"), 95),
    (2, 2, "Return of the Golden Child", Date("2007-08-31"), 82),
    (2, 3, "Moss and the German", Date("2007-09-07"), 82),
    (2, 4, "The Dinner Party", Date("2007-09-14"), 87),
    (2, 5, "Smoke and Mirrors", Date("2007-09-21"), 78),
    (2, 6, "Men Without Women", Date("2007-09-28"), 76),
    (3, 1, "From Hell", Date("2008-11-21"), 78),
    (3, 2, "Are We Not Men?", Date("2008-11-28"), 85),
    (3, 3, "Tramps Like Us", Date("2008-12-05"), 82),
    (3, 4, "The Speech", Date("2008-12-12"), 90),
    (3, 5, "Friendface", Date("2008-12-19"), 85),
    (3, 6, "Calendar Geeks", Date("2008-12-26"), 78),
    (4, 1, "Jen The Fredo", Date("2010-06-25"), 80),
    (4, 2, "The Final Countdown", Date("2010-07-02"), 84),
    (4, 3, "Something Happened", Date("2010-07-09"), 75),
    (4, 4, "Italian For Beginners", Date("2010-07-16"), 82),
    (4, 5, "Bad Boys", Date("2010-07-23"), 84),
    (4, 6, "Reynholm vs Reynholm", Date("2010-07-30"), 76);
 
  1. C помощью SQL запросов можно добавлять и удалять не только строки таблицы, но и столбцы. Для этого используется команда ALTER TABLE и фразы ADD COLUMN и DROP COLUMN.
Например, если вы хотите добавить в таблицу ratings столбец viewed с данными о том, какие эпизоды сериала вы уже посмотрели, то это можно сделать с помощью следующей команды.
ALTER TABLE ratings ADD COLUMN viewed Bool;

 

Задание 3: Вы решили, что столбец с датой выхода эпизодов в таблице ratings не нужен, поскольку эта информация уже содержится в другой таблице. Удалите столбец air_date из таблицы ratings.
 
Для этого понадобится выполнить такую команду:
ALTER TABLE ratings DROP COLUMN air_date;

 

  1. Теперь потренируемся извлекать данные из БД. Для этого используется команда SELECT. В простейшем случае ее синтаксис выглядит так:
    SELECT <имя столбца1>, <имя столбца2>, ...
    FROM <имя таблицы>;
 
 
Например, чтобы выбрать всю информацию из таблицы seasons, нужно сделать следующий запрос к БД.
SELECT * FROM seasons;

 

Если нужно выбрать из таблицы только те строки, которые удовлетворяют определенному условию, в запросе используют секцию WHERE. В этой секции должно находиться выражение, возвращающее логический результат. Обычно оно состоит из логических операций and, or, not и операций сравнения.
Например, выбрать из таблицы episodes только первые эпизоды всех сезонов можно так:
SELECT * FROM episodes
WHERE episode_id = 1
;

 

Запрос SELECT извлекает строки без определенного порядка. Чтобы отсортировать полученные данные нужным образом, в этот запрос включают секцию ORDER BY. В ней указывается список столбцов, которые будут определять порядок сортировки результатов запроса.
 
Задание 4: получите список самых популярных (с рейтингом не менее 85) эпизодов сериала IT Crowd. При поиске используйте созданный ранее вторичный индекс rating_index. Чтобы упорядочить результаты по убыванию рейтинга используйте конструкцию ORDER BY … DESC.
 
Используемый для этого запрос:
SELECT 
    season_id, 
    episodes_id, 
    title, 
    imdb_rating
FROM ratings VIEW rating_index 
WHERE 
    imdb_rating >= 85 
ORDER BY 
    imdb_rating DESC
;

 

  1. Для получения обобщённых сведений о содержащихся в таблице данных — например, о числе строк в таблице или среднем значении какого-либо выражения — в запрос SELECT включают агрегатные функции и секцию GROUP BY. Эта секция используется для агрегации внутри каждого ключа. Ключом является значение одной или более колонок, указанных в GROUP BY.
Примеры агрегатных функций:
COUNT(*) — вычисляет число строк в таблице.
MAX(expr) — находит максимум выражения expr по всем строкам.
SUM(expr) — суммирует выражение expr по всем строкам. Тип выражения должен быть числовым.
AVG(expr) — находит среднее значение выражения expr по всем строкам. Тип выражения должен быть числовым или интервалом.
SOME(expr) — возвращает одно произвольное значение выражения по всем строкам.
 
Результаты выполнения агрегатной функции выводятся в отдельном столбце. Чтобы задать этому столбцу имя, используют оператор AS. Конструкция может выглядеть, например, так:
SELECT 
    <имя столбца1>, 
    MAX(<имя столбца2>) AS max_value
...
;

 

Задание 5: Напишите SQL запрос к таблице episodes, который выводит данные о числе эпизодов каждого сериала.
 
Подсказка:
Вам понадобится вычислить число строк для каждого значения столбца series_id и сгруппировать результаты по series_id.
 
Ответ:
SELECT 
    series_id, 
    COUNT(*) AS total_episodes 
FROM episodes 
GROUP BY 
    series_id 
ORDER BY 
    series_id 
;

 

Задание 6: Напишите SQL запрос, с помощью которого можно сравнить популярность сезонов сериала IT Crowd.
 
Подсказка:
Вам понадобится вычислить средний рейтинг эпизодов для каждого сезона и сгруппировать результаты по столбцу season_id.
 
Ответ:
SELECT 
    season_id, 
    AVG (imdb_rating) AS avg_rating
FROM ratings 
GROUP BY season_id
ORDER BY avg_rating DESC;

 

  1. В реляционной БД таблицы логически связаны друг с другом. С помощью объединений (JOIN) можно получить данные из нескольких связанных друг с другом таблиц и представить их в виде одной результирующей таблицы.
Столбцы, по которым выполняется объединение, можно указать одним из двух способов.
  • После ключевого слова USING, например table1 AS a JOIN table2 AS b USING (foo). Это более короткий способ записи, удобный для простых случаев. Имена столбцов, по которым происходит объединение таблиц, должны быть одинаковы.
  • После ключевого слова ON (например, a JOIN b ON a.foo = b.bar). Этот способ позволяет использовать разные имена столбцов и указывать дополнительные условия по аналогии с WHERE.
Поскольку такие запросы затрагивают столбцы разных таблиц, имена столбцов должны содержать и имя таблицы (то есть, например, не просто series_id, а seasons.series_id).
В YDB доступны следующие логические типы объединений:
  • INNER (используется по умолчанию) — строки попадают в результат, только если значение ключевых колонок присутствует в обеих таблицах;
  • FULL, LEFT и RIGHT — при отсутствии значения в обеих или в одной из таблиц включает строку в результат, но оставляет пустыми (NULL) колонки, соответствующие противоположной таблице.
  • LEFT/RIGHT SEMI — одна сторона выступает как белый список (whitelist) ключей, её значения недоступны. В результат включаются столбцы только из одной таблицы, декартового произведения не возникает;
  • LEFT/RIGHT ONLY — вычитание множеств по ключам (blacklist). Практически эквивалентно добавлению условия IS NULL на ключ противоположной стороны в обычном LEFT/RIGHT, но, как и в SEMI, нет доступа к значениям;
  • CROSS — декартово произведение двух таблиц целиком без указания ключевых колонок, секция с ON/USING явно не пишется;
  • EXCLUSION — обе стороны минус пересечение.
Простой пример запроса с объединением таблиц приведен ниже.
SELECT
    sa.title AS season_title,
    sr.title AS series_title,
    sr.series_id, sa.season_id 
FROM seasons AS sa
INNER JOIN series AS sr ON sa.series_id = sr.series_id 
WHERE sa.season_id = 1
ORDER BY sr.series_id;

 

Этот запрос извлекает из таблиц series и seasons сведения о первых сезонах всех сериалов и выводит объединённые данные в результирующей таблице.
 
Задание 7: напишите запрос, который выводит таблицу, содержащую название сериала IT Crowd и названия всех его эпизодов (то есть, каждая строка итоговой таблице должна содержать название сериала и название отдельного эпизода).
 
Это запрос может выглядеть следующим образом:
SELECT 
    sr.title AS series_title, 
    ep.title AS episode_title, 
    ep.season_id,     
    ep.episode_id 
FROM 
    series AS sr 
INNER JOIN 
    episodes AS ep 
ON sr.series_id = ep.series_id 
WHERE sr.series_id = 1 
ORDER BY 
    ep.season_id,     
    ep.episode_id 
;

 

 

 

 

Категория: Cloud Services Engineer
Просмотров: 682

YDB. ПР. Создание базы данных

Кратко:

  • Создание базы данных YDB в dedicated режиме.
  • Создание базы данных требует выбора имени, вычислительных ресурсов и количества групп хранения.
  • Выбор облачной сети и подсетей для работы с БД, присвоение публичного IP-адреса.
  • Создание БД занимает несколько минут, после чего можно подключиться к ней и запустить тестовое приложение.
  • В тестовом приложении создаются таблицы с данными о сериалах.
  • В следующей практической работе вы научитесь работать с данными в вашей БД при помощи YQL-запросов.

Практическая работа. Создание базы данных

В этой практической работе вы создадите БД YDB в dedicated режиме, научитесь подключаться к ней и добавлять данные из тестового приложения.

Создание базы данных

  1. На стартовой странице консоли управления перейдите в дашборд каталога, в котором будете создавать БД, нажмите кнопку Создать ресурс и выберите в списке База данных YDB.
    image
  2. В открывшемся окне выберите тип БД dedicated. Интерфейс создания новой БД немного отличается от уже знакомых вам интерфейсов создания кластеров управляемых БД. Это связано с архитектурными особенностями сервиса.
    image
  3. Выберите для вашей БД имя и необходимые вычислительные ресурсы (для практических работ этой темы достаточно одного хоста конфигурации medium), а также количество групп хранения (достаточно одной группы).
    Группа хранения — это массив независимых дисковых накопителей, объединённых по сети в единый логический элемент. Она состоит из 9 дисков, расположенных по три в каждой из трёх зон доступности. Такая конфигурация обеспечивает устойчивость при одновременном отказе одной из зон и отказе диска в другой зоне. Стандартный размер группы хранения — 100 ГБ.
  4. Выберите облачную сеть и подсети для работы с БД. Можно оставить сеть по умолчанию или выбрать ту, которую создали в предыдущем курсе. БД будет доступна для всех виртуальных машин, которые подключены к той же облачной сети.
    image
    👉 Не забудьте выбрать опцию присвоения публичного IP-адреса, чтобы иметь возможность подключаться к БД из интернета.
     
     
  5. Нажмите кнопку Создать базу данных.
    Создание БД занимает несколько минут. Когда статус БД изменится с Provisioning на Running, она готова к работе.
  6. Кликнув на созданную БД в консоли управления, вы перейдёте на вкладку Обзор.
    image
    В блоке Соединение приведена информация, которая понадобится для подключения к БД:
    • Эндпоинт — точка подключения с указанием протокола, представляющая собой в данном случае адрес, на который посылаются сообщения;
    • Размещение базы данных — полный путь к БД.
    Примеры подключений из командной строки и приложений вы можете посмотреть, нажав на кнопку Подключиться.

Подключение к базе данных и запуск тестового приложения

В этой части практической работы вы подключитесь к БД и запустите тестовое приложение, которое создаст в ней несколько таблиц с данными о популярных сериалах.
  1. Для того, чтобы выполнить эту задачу, вам понадобится сервисный аккаунт с ролями viewer и editor. Перейдите в дашборд каталога и выберите вкладку Сервисные аккаунты. Создайте сервисный аккаунт, назначив для него указанные роли.
    image
  2. Вы можете запускать тестовое приложение со своего компьютера или с виртуальной машины в Yandex Cloud. В данном примере используется OC Ubuntu и приложение на Python.
    Для запуска приложения нужно склонировать на свою машину репозиторий YDB Python SDK, из которого оно будет вызываться, а также установить библиотеки ydb, iso8601 и yandexcloud. Воспользуйтесь для этого следующими командами:
    git clone https://github.com/yandex-cloud/ydb-python-sdk.git
    sudo pip3 install iso8601 ydb yandexcloud
     
  3. Создайте авторизованный ключ для вашего сервисного аккаунта и сохраните его в файл с помощью интерфейса командной строки Yandex Cloud.
    mkdir ~/.ydb
    
    yc iam key create \
    --service-account-name <имя сервисного аккаунта> \
    --output ~/.ydb/<key_name>.json
     
  4. Добавьте ключ в переменную окружения YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS.
    export YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=~/.ydb/<key_name>.json
     
     
  5. Запустите тестовое приложение basic_example_v1 из репозитория YDB Python SDK, указав в качестве параметров подключения значения эндпоинта и полного пути к БД.
    cd ./ydb-python-sdk/examples/basic_example_v1
    python3 __main__.py \
    -e <Эндпоинт> \
    -d <Размещение базы данных>
     
    Результат выполнения приложения должен выглядеть так:
    > describe table: series
    column, name: series_id , Uint64
    column, name: title , Utf8
    column, name: series_info , Utf8
    column, name: release_date , Uint64
    
    > select_simple_transaction:
    series, id:  1 , title:  IT Crowd , release date:  b'2006-02-03'
    
    > bulk upsert: episodes
    
    > select_prepared_transaction:
    episode title: To Build a Better Beta , air date: b'2016-06-05'
    
    > select_prepared_transaction:
    episode title: Bachman's Earnings Over-Ride , air date: b'2016-06-12'
    
    > explicit TCL call
    
    > select_prepared_transaction:
    episode title: TBD , air date: b'2022-08-24'
     
  6. Вернитесь в консоль управления Yandex Cloud, чтобы посмотреть на результаты работы приложения. Переключитесь на вкладку Навигация.
    image
    В БД были созданы три таблицы — episodes, seasons и series — с информацией о сериалах «IT Crowd» и «Silicon Valley». Кликнув по названию таблицы, вы увидите содержащиеся в ней данные. А если подвести к названию таблицы курсор и кликнуть на значок «информация» справа, то внизу появится дополнительное окно с вкладками Обзор, Схема и Партиции.
    image
    Кнопка +Создать на панели Навигация служит для создания директорий и таблиц. С её помощью можно создать новую таблицу, не прибегая к командам YQL.
    image
В следующей практической работе вы научитесь работать с данными в вашей БД при помощи YQL-запросов.

 

Категория: Cloud Services Engineer
Просмотров: 821

YDB. Модель и схема данных в YDB, запросы и транзакции

Кратко:

  • YDB основана на реляционной модели данных, где данные организованы в виде таблиц с столбцами и строками.
  • Таблицы содержат столбцы с определенными типами данных, а строки представляют собой наборы связанных значений.
  • В YDB таблицы всегда упорядочены по ключу, что позволяет выполнять точечное чтение и диапазонные запросы с высокой эффективностью.
  • Схема данных определяет имена столбцов и типы данных, которые хранятся в них.
  • В YDB можно создавать партиции таблиц для разделения данных на несколько частей, которые могут храниться на разных хостах распределенной БД.
  • Типы данных в YDB включают логический, числовой, строковый, временной и композитные типы данных.
  • Основным средством работы с данными в YDB является язык запросов YQL, который позволяет выполнять операции чтения и записи данных.

Модель и схема данных в YDB, запросы и транзакции

В этом уроке мы более подробно разберем, как в YDB организованы данные, каких типов они могут быть, а также познакомимся с поддерживаемыми режимами транзакций.

Модель и схема данных

YDB основана на реляционной модели данных. Это означает, что данные организованы в виде связанных друг с другом таблиц, которые состоят из столбцов и строк.
Таблицы хранят записанную в БД информацию об объектах или сущностях. В столбцах таблицы записываются определённые типы данных, а в ячейках — значения. Каждая строка таблицы представляет собой набор связанных значений, относящихся к одному объекту или сущности.
Таблица YDB всегда имеет один или несколько столбцов, являющихся первичным ключом (primary key). Первичный ключ представляет собой уникальный идентификатор строки, то есть для одного значения ключа может быть не больше одной строки. Допускаются таблицы, состоящие только из ключевых столбцов.
 
👉 Таблицы без первичного ключа создавать нельзя!
 
В YDB таблицы всегда упорядочены по ключу. Это приводит к тому, что точечное чтение по ключу и диапазонные запросы по ключу или префиксу ключа фактически выполняются с использованием индекса, то есть с высокой эффективностью.
Схема данных определяет имена (names) столбцов таблицы и то, какие типы данных (types) в них хранятся. Пример схемы данных приведен на рисунке.
image
Здесь изображена схема таблицы series, которая состоит из четырех столбцов с именами series_id, release_date, series_info и title. Первый столбец имеет тип данных Uint64, второй — Date, а последние два — Utf8. В качестве первичного ключа (PK) объявлен столбец series_id.

Партиционирование таблиц

Первичный ключ также используется в YDB для партиционирования таблиц, то есть разбиения их на несколько частей. Каждая часть — партиция — включает отдельный диапазон первичных ключей, то есть диапазоны ключей, обслуживаемых разными партициями, не пересекаются.
Партиции одной таблицы могут располагаться на разных, в том числе расположенных в разных локациях, хостах распределённой БД. Они могут перемещаться между хостами независимо друг от друга для перебалансировки данных и равномерного распределения нагрузки, а также для поддержания работоспособности партиции при отказах серверов или сетевых сбоях.
Если данных немного, таблица может состоять из одной партиции. YDB автоматически разобьёт партицию на две части, когда объём данных в ней или нагрузка увеличатся сверх определенного предела. Включение и выключение автоматического разделения можно настроить для каждой таблицы БД индивидуально.
Помимо автоматического разделения таблиц на партиции YDB дает возможность создавать пустые таблицы с предопределённым количеством партиций. Для этого нужно либо задать границы диапазонов ключей вручную, либо указать, что таблица разделяется на заданное число партиций равномерно. В последнем случае границы диапазонов будут созданы по первой компоненте первичного ключа, которая должна быть целым числом.

Типы данных

Тип данных определяет множество значений, которые эти данные могут принимать, и то, какие операции можно выполнять со значениями. Например, данные логического типа (Bool) могут принимать значения true и false, и с ними можно выполнять логические операции И, ИЛИ, НЕ, ИСКЛЮЧАЮЩЕЕ ИЛИ, а также операции сравнения.
Для работы с данными в YDB применяется декларативный язык запросов YQL (Yandex Query Language). Соответственно, в YDB можно использовать те типы данных, которые есть в YQL. Некоторые из типов данных YQL поддерживаются в YDB с ограничениями: они могут использоваться только в вычислениях, но не могут быть типом столбца или первичным ключом.
Элементарными или примитивными типами данных называют такие, для которых значения нельзя разделить на несколько значений другого типа. К таким типам данных относят, например:
  • логический – Bool;
  • числовой – IntXX, UintXX, Float, Double (целые знаковые и беззнаковые числа, где XX показывает разрядность в битах; числа с плавающей точкой; числа двойной точности);
  • строковый – String, Utf8, Json, Uuid (произвольные бинарные данные, текст, форматы данных);
  • временной – Date, Datetime, Timestamp, Interval (дата, дата и время с точностью до секунд, временная отметка и интервал с точностью до микросекунд).
Композитные типы данных, или контейнеры, состоят из данных других элементарных или композитных типов. Такие типы данных в YQL включают:
  • список (List) – последовательность из 0 и более элементов одного типа. Количество элементов не фиксировано.
  • кортеж (Tuple) – упорядоченный набор из 0 и более элементов произвольных типов. Количество элементов фиксировано.
  • структуру (Struct) – именованный неупорядоченный набор из 0 или более элементов произвольных типов. Количество элементов фиксировано.
  • словарь (Dict) – набор пар «ключ-значение». Все значения ключей уникальны. Все ключи имеют один и тот же тип, как и значения. Количество элементов не фиксировано.
  • опциональный тип (Optional) – последовательность из 0 или 1 элементов некоторого типа. Случай, когда в последовательности 0 элементов, изображается как NULL.
  • вариант (Variant) – подвид кортежа или структуры, в котором заполнен ровно один элемент.
Все столбцы, в том числе столбцы с первичным ключом, также могут содержать специальное значение NULL, которое используется, чтобы обозначить отсутствие значения.
С полным перечнем типов данных, а также возможных операций над ними вы можете познакомиться в документации.

Запросы и транзакции

Основным средством добавления, обновления и удаления строк данных, извлечения наборов данных, а также управления работой БД в YDB является декларативный язык запросов YQL. Для выполнения YQL запросов можно использовать консоль управления Yandex Cloud в браузере, консольный клиент для командной строки, а также SDK для различных языков программирования, которые позволяют встраивать запросы в приложения.
Запрос – это команда на выполнение операции чтения или записи данных в БД. Например, запрос на чтение всех данных из таблицы будет выглядеть так:
 
SELECT * FROM <имя таблицы>
 
В одном из следующих практических уроков вы потренируетесь выполнять различные запросы к базе данных YDB.
Транзакция – это несколько связанных запросов к БД, то есть последовательность операций чтения и записи данных, представляющая собой единую логическую задачу. Например, если вы перечисляете деньги с одного счёта на другой, то с точки зрения работы с БД транзакция будет включать:
  • чтение данных о состоянии первого счёта, чтобы проверить достаточно ли на нём средств;
  • уменьшение значения баланса этого счёта на сумму перевода;
  • чтение данных о состоянии второго счёта;
  • увеличение значения баланса этого счёта на сумму перевода.
Транзакция будет выполнена только в том случае, если будут успешно завершены все операции, которые она включает.
Транзакции в YDB по умолчанию выполняются в режиме Serializable. Это самый строгий уровень изоляции транзакций. Иными словами, в этом режиме гарантируется, что каждая транзакция полностью независима от других.
Если требования к консистентности или свежести читаемых данных могут быть ослаблены (например для повышения производительности БД, увеличения пропускной способности или уменьшения задержек), то пользователь может использовать режимы с менее строгими уровнями изоляции транзакций:
  • Online Read-Only – каждая из операций чтения в транзакции получает последние данные из имеющихся на момент выполнения. Консистентность полученных данных определяется настройкой allow_inconsistent_reads;
  • Stale Read Only – операции чтения данных возвращают результаты с возможным отставанием от актуальных (отставание составляет доли секунды). Для каждой отдельной операции чтения данные консистентны, но для разных операций чтения консистентность не гарантируется.
Поскольку таблицы в YDB могут быть партицированы, а отдельные партиции – храниться на разных шардах, YDB поддерживает распределённые транзакции, то есть транзакции, которые затрагивают более одного шарда одной или нескольких таблиц.
А теперь давайте посмотрим, как YDB работает на практике.

 

Категория: Cloud Services Engineer
Просмотров: 1073
  1. YDB. Краткий обзор YDB
  2. CH. Особенности сервиса управляемых баз данных ClickHouse
  3. CH. ПР. Добавление данных
  4. CH. ПР. Работа с данными из объектного хранилища

Страница 12 из 19

  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
© Gantry Framework 2016 - 2026
Developed by RocketTheme exclusively
for Gantry 5.
  • Главная
  • Начало
  • Карта
Back to top