0

Краткий обзор Yandex Database

26.04.2022

На предыдущих уроках мы рассматривали и классические реляционные, и NoSQL базы данных. Каждый из этих типов БД имеет свои сильные стороны и области применения.Классические реляционные БД хорошо подходят для сценариев работы, связанных с обработкой транзакций (online transaction processing, OLTP). Они обеспечивают выполнение транзакционных требований ACID, что особенно важно для систем, связанных с финансами или обработкой заказов. Сложности возникают, когда данных становится много, поскольку эти БД плохо масштабируются.Базы данных NoSQL изначально создавались как распределенные системы. Поэтому они легко масштабируются и обеспечивают высокую доступность данных. Однако это имеет свою цену: требования ACID, в частности целостность и надежность, в этих БД выполняются не полностью.Стремление объединить преимущества классических реляционных и NoSQL баз данных привели к созданию нового типа СУБД, который назвали NewSQL или Distributed SQL. Это распределенные реляционные базы данных, которые одновременно обеспечивают строгое выполнение требований ACID и хорошее горизонтальное масштабирование.К таким БД относится и Yandex Database (YDB), которая была разработана компанией Yandex для решения внутренних задач, а с 2019 года стала доступна для внешних пользователей. Она спроектирована с учетом высоких требований к производительности (миллионы запросов в секунду) и объему данных (сотни петабайт). YDB используется для хранения данных сервисов Yandex.Cloud, а также во многих сервисах Yandex (например, Яндекс.Новости, Яндекс.Дзен, Яндекс Go, Яндекс.Погода, Яндекс.Маркет, Авто.ру, Кинопоиск и других).YDB обеспечивает:

  • строгую консистентность с возможностью ослабления для увеличения производительности;
  • высокую доступность БД с автоматической обработкой отказов вычислительных узлов и дата-центров;
  • автоматическую репликацию БД;
  • автоматическое партиционирование данных при увеличении их объема или росте нагрузки.

YDB поддерживает высокопроизводительные распределенные ACID-транзакции, которые могут затрагивать несколько записей из разных таблиц. При этом обеспечивается самый строгий уровень изоляции транзакций — serializable. Если возникает необходимость увеличить производительность БД или уменьшить задержки, можно ослабить уровень изоляции для операций чтения.YDB основана на реляционной модели данных и оперирует таблицами с предопределённой схемой. Таблицы в YDB всегда имеют один или несколько столбцов, являющихся первичным ключом.Для удобной организации хранения таблиц в YDB используется дерево папок (директорий), в которых находятся таблицы и другие сущности БД. По аналогии с обычными файловыми системами в одной директории могут быть несколько поддиректорий и несколько таблиц. Имена у сущностей внутри одной директории должны быть уникальны.YDB может использоваться в двух режимах: dedicated и serverless.В dedicated режиме для БД выделяются отдельные хосты. Вы самостоятельно задаете число и класс хостов, параметры хранилища данных и облачных сетей. Иными словами, в этом режиме вы работаете с YDB как с сервисом управляемой БД.В этом режиме вам будет нужно самостоятельно отслеживать, насколько выделенные вычислительные ресурсы соответствуют нагрузке на БД. Если их будет недостаточно, то скорость обработки запросов будет снижаться вплоть до отказа в обслуживании. Чтобы избежать этого, понадобится самостоятельно наращивать мощности (увеличивать число и/или повышать класс хостов, увеличивать объем хранилища данных).Тарификация в dedicated режиме основана на тех же принципах, что и в сервисах управляемых БД. Вы платите за:

  • время работы вычислительных ресурсов (в зависимости от числа и класса используемых хостов);
  • хранилище данных (с учетом типа и размера групп хранения);
  • хранение резервных копий БД в объектном хранилище;
  • трафик из Yandex.Cloud в интернет.

В serverless, или бессерверном, режиме БД разворачивается без создания отдельных хостов. Все необходимые для работы БД ресурсы (вычислительные мощности, хранилище данных, сети) предоставляются сервисом автоматически и так же автоматически масштабируются в зависимости от нагрузки.Этот режим подходит для небольших проектов, когда отдельный сервер не нужен, или для задач с неравномерной и плохо прогнозируемой нагрузкой. При его использовании вы платите за операции с БД (чтение и запись данных), а также за хранение данных и резервных копий.С работой YDB в бессерверном режиме вы подробно познакомитесь в курсе «Serverless».Для работы с данными в Yandex Database используется декларативный язык запросов YQL, являющийся диалектом SQL. В бессерверном режиме также доступен Document API — HTTP API, совместимый с Amazon DynamoDB. С его помощью можно выполнять операции над документными таблицами (на уровне приложений для работы с такими таблицами используется формат JSON).YDB является альтернативой имеющимся решениям в следующих случаях:

  • при использовании NoSQL систем, когда нужна строгая консистентность данных;
  • при использовании NoSQL систем, когда требуется транзакционное изменение данных, хранящихся в разных строках одной или нескольких таблиц;
  • в системах, где нужно обрабатывать и хранить большой объем данных с возможностью бесконечного масштабирования;
  • в системах с незначительной нагрузкой, когда держать для БД отдельный хост нерационально с финансовой точки зрения (в этом случае YDB используется в бессерверном режиме);
  • в системах с плохо предсказуемой или сезонно меняющейся нагрузкой;
  • в системах, где важно распределять нагрузку между инстансами реляционной БД.

Подробный видеообзор YDB вы можете посмотреть на YouTube-канале Yandex.Cloud.Далее в этой теме вы продолжите знакомство с тем, как YDB используется в dedicated режиме, и потренируетеcь работать с ней на практике.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380