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

CH. Описание ClickHouse

Кратко:

  • ClickHouse - популярная столбцовая БД с открытым исходным кодом, созданная Яндексом для обработки аналитических онлайн-запросов к Яндекс Метрике.
  • ClickHouse работает на Linux, FreeBSD и macOS, а также доступен в Yandex Cloud.
  • ClickHouse позволяет создавать БД, загружать данные и выполнять запросы.
  • Высокая скорость работы достигается благодаря шардированию, автоматическому распараллеливанию запросов и возможностям приближенных вычислений.
  • ClickHouse предназначен для аналитических запросов, но не подходит для транзакционной целостности и построчной выборки данных по ключу.
  • ClickHouse используется для анализа логов, метрик поведения пользователей и как аналитический инструмент.

Описание ClickHouse

В этой теме вы узнаете о сервисе управляемых баз данных ClickHouse. Эта БД предназначена для задач, связанных с аналитической обработкой данных, и не подходит там, где основная часть операций — обработка транзакций. Чтобы разобраться в том, почему это так, давайте сначала разберёмся с различными сценариями работы с данными.
Базы данных помогают решать различные задачи. То, какие при этом делаются запросы, насколько их много и как соотносятся операции чтения и записи, называют сценарием работы с данными. Универсальной БД, которая подходит для любого сценария, не существует.
Сценарии можно разделить на две группы:
  1. Обработка транзакций, т. е. связанных между собой операций с данными. Классический пример — банковский перевод, при котором в БД одновременно изменяются записи о количестве денег на двух счетах.
  2. Обработка аналитических запросов (online analytical processing, OLAP). В этом случае требуется быстро извлечь из БД сведения.
Например, если у вас есть мобильное приложение, то вас интересуют его продуктовые метрики: количество уникальных пользователей, среднее время нахождения на экране, среднее время, необходимое, чтобы выполнить последовательность действий... Вы отслеживаете, как меняются метрики, и решаете, как развивать приложение. Если метрики хранятся в большой БД, а запросы к ней выполняются медленно, то анализ метрик тоже станет весьма небыстрым.
Как правило, при OLAP-сценариях:
  • данные в базе не изменяются или изменяются редко (нет команд модификации существующих данных типа UPDATE или REPLACE);
  • данные добавляются в базу крупными порциями (командой INSERT);
  • большинство запросов — это операции чтения;
  • данные читаются из большого количества строк и небольшого количества столбцов;
  • на выходе данные фильтруют или агрегируют, поэтому результат выполнения запроса содержит гораздо меньше исходных данных;
  • нет транзакций;
  • нет строгих требований к консистентности данных.
Классические реляционные БД не всегда удобно использовать для задач, в которых идут частые и сложные запросы к большому массиву данных. Для решения таких задач разработаны столбцовые (колоночные) БД. О них мы кратко говорили раньше.
Строковые и столбцовые БД обрабатывают аналитические запросы по-разному. Предположим, для выполнения запроса нужны данные из трёх  столбцов БД. В строковой придётся полностью прочитать несколько десятков или сотен тысяч строк со всеми столбцами, а в столбцовой — только данные из этих трёх столбцов.
Более того, в столбцовой БД эти данные физически хранятся вместе, что ещё больше ускоряет ответ.
 
ClickHouse
ClickHouse — одна из популярных столбцовых БД с открытым исходным кодом. Яндекс создал ClickHouse, когда понадобилось быстро обрабатывать аналитические онлайн-запросы к Яндекс Метрике.
Метрика — это одна из крупнейших систем веб-аналитики. Она установлена более чем на миллионе сайтов и каждый день собирает больше 20 миллиардов событий (посещений сайтов, кликов, переходов со страницы на страницу и т. д.). Объём данных превышает 3,5 петабайта (13 триллионов записей) и постоянно увеличивается, к этим данным обращаются сотни тысяч раз в день. Чтобы такая система работала стабильно, в Яндексе создали ClickHouse — распределённую столбцовую СУБД, оптимизированную для быстрого выполнения большого числа аналитических запросов к огромному объёму данных.
ClickHouse работает на любой операционной системе Linux, FreeBSD или macOS, а также доступна в виде сервиса управляемой БД в Yandex Cloud.
ClickHouse позволяет создавать БД и таблицы, загружать в них данные из разных источников и выполнять к данным запросы. Эту СУБД можно интегрировать с Apache Kafka, а также с внешними источниками данных, включая БД MySQL и PostgreSQL.
Высокая скорость работы ClickHouse достигается за счёт:
  • Шардирования. Вы можете разделить данные на шарды (т. е. части) и хранить их на одном или нескольких хостах-репликах. Кроме того, шардирование повышает доступность БД.
  • Автоматического распараллеливания запросов на несколько процессорных ядер одного сервера и распределённых вычислений на шардированном кластере.
  • Возможности приближенных вычислений. Система способна выполнять запросы на основе части данных (выборки). Можно агрегировать данные не по всем ключам, а по некоторым. Иногда это помогает получить довольно точный результат, задействовав меньше ресурсов.
  • Других архитектурных особенностей: индекса (первичного ключа), физической сортировки данных по первичному ключу с помощью merge дерева, хранения данных в сжатом виде и т. д.
ClickHouse предназначен прежде всего для работы с аналитическими запросами. Если вам нужны транзакционная целостность и построчная выборка данных по ключу — применяйте другие БД, например MySQL или PostgreSQL.
Эту СУБД используют:
  • чтобы анализировать логи (и мгновенно получать полную информацию об инцидентах в системе);
  • чтобы отслеживать метрики поведения пользователей на сайтах (например, переходы на страницы, клики) или в онлайн-играх;
  • как аналитический инструмент, когда данные в БД ClickHouse копируются из основной БД (например, PostgreSQL или Oracle), которая медленно обрабатывает аналитические запросы.
Если вам интересны подробности о том, как устроен ClickHouse и что у неё под капотом, посмотрите доклады разработчиков:
  • Виктор Тарнавский. ClickHouse: как сделать самую быструю распределённую аналитическую СУБД.
  • Как работает ClickHouse. Лекция в ШАД.
Проверьте себя
Какие особенности ClickHouse ускоряют работу с аналитическими запросами?
 
Правильный ответ:
  • Поддержка приближенных вычислений
  • Шардирование БД
  • Распараллеливание выполнения запросов

 

 

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

MDB. Особенности сервиса управляемых баз данных MongoDB

Кратко:

  • MongoDB - сервис управляемых баз данных с различными особенностями.
  • Сервис выполняет задачи администрирования инфраструктуры, такие как создание кластеров, обновление ПО, создание резервных копий и обеспечение отказоустойчивости.
  • Yandex Managed Service for MongoDB предоставляет интерактивный интерфейс и драйверы для Python и Java.
  • Обновление базы данных происходит вручную, но кластеры обновляются автоматически при выходе новых версий.
  • Резервное копирование выполняется автоматически и вручную, с возможностью восстановления из резервной копии.
  • Сервис поддерживает мониторинг и логи, а также репликацию и отказоустойчивость.
  • Лимиты и тарификация сервиса определены, с максимальным числом шардов и одновременных подключений.

Особенности сервиса управляемых баз данных MongoDB

Ответственность сервиса

Как вы могли увидеть, в работе с различными сервисами управляемых БД в облаке есть много общего. При этом, каждый из сервисов имеет свои особенности, обусловленные как самой СУБД, так и спецификой её реализации в облаке.
Как и в случае реляционных БД, сервис управляемых баз данных MongoDB выполняет задачи, связанные с администрированием инфраструктуры:
  • при создании кластера выделяет ресурсы, устанавливает СУБД и создает БД;
  • обновляет программное обеспечение;
  • автоматически создает резервные копии БД;
  • предоставляет инструменты мониторинга хостов и БД;
  • обеспечивает репликацию данных между хостами;
  • при аварии автоматически переключает нагрузку на резервную реплику.
Вы можете выбирать любые клиенты для MongoDB. Yandex Managed Service for MongoDB гарантирует работу интерактивного интерфейса the mongo Shell, а также драйверов для Python и Java.

Обновление базы данных

Сервис поддерживает мажорные версии MongoDB 5.0 и 6.0. Переходить на новую мажорную версию следует вручную. При выходе новых минорных версий MongoDB кластеры обновляется автоматически. Владельцы кластеров получают оповещение о сроках работ и доступности БД.
Когда разработчики перестают поддерживать версию MongoDB, создание хостов с ней становится невозможным, а кластеры автоматически обновляются до ближайшей поддерживаемой версии. Это происходит через семь дней после оповещения для минорных версий и через месяц для мажорных.

Резервное копирование

Сервис создает резервные копии БД автоматически, а также позволяет делать это вручную. Резервные копии сохраняются в специальном хранилище в сжатом виде. Вы не платите за их хранение, пока размер БД и всех резервных копий не превышает размера хранилища, который вы выбрали при создании кластера.
По умолчанию автоматическое резервное копирование выполняется раз в день с 01:00 по 05:00 по московскому времени, а резервные копии хранятся неделю. Время начала резервного копирования и срок хранения резервных копий (от 7 до 35 дней) можно установить при создании или изменении кластера.
image
Автоматически созданные копии удаляются, когда истекает срок хранения. Копии, созданные вручную, хранятся бессрочно.
Из резервной копии можно восстановить как существующий, так и удаленный кластер. Средняя скорость восстановления — 10 МБ/с.
Для версий MongoDB 4.2 и выше сервис поддерживает технологию point-in-time recovery (восстановление состояния кластера на заданный момент). Вы можете восстановить кластер в состояние на любой момент времени после создания самой старой полной резервной копии. Это достигается за счет дополнения данных выбранной резервной копии записями из архивируемого журнала операций.
Point-in-time recovery работает только для кластеров с выключенным шардированием.

Мониторинг и логи

Сервис отслеживает и выводит на дашборд следующие метрики: общий объём данных, размер журнала операций, место на диске, число подключений к базе, сессий и операций, лаг репликации и пр. 
image
Кроме того, сервис ведет запись логов событий.
image

Репликация и отказоустойчивость

Сервис управляемых БД MongoDB по умолчанию реплицирует данные, т. е. копирует их на несколько хостов. Если в кластере больше одного активного хоста, из них автоматически выбирается главный — первичная реплика. Этот хост обрабатывает все запросы на запись.
image
Первичная реплика выбирается автоматически, если в кластере работоспособно больше половины хостов. По этой причине кластер из двух хостов не обеспечивает отказоустойчивости. Если первый хост отказал, второй не сможет назначить сам себя первичной репликой и будет обрабатывать только операции чтения.
Кластер из трёх хостов продолжит обрабатывать операции записи при потере одного хоста. Кластер из четырёх хостов также может потерять только один хост: при потере второго оставшихся хостов не хватит, чтобы автоматически выбрать первичную реплику. Поэтому в MongoDB лучше разворачивать кластеры с нечетным числом хостов.
image

Лимиты и тарификация

 
В кластере БД MongoDB можно создать не более 10 шардов. Шард состоит не более чем из семи хостов. Таким образом, максимальное число хостов в одном кластере не может превышать 70.
Максимальное число одновременных подключений к одному хосту зависит от объёма его оперативной памяти: не более 2048 подключений на каждые 2 ГБ.
Максимальный объём данных на хосте — 605 ГБ при использовании сетевого хранилища или 600 ГБ при использовании локального хранилища.
MongoDB тарифицируется по тем же принципам, что и управляемые реляционные БД. 
 
Проверьте себя
Вы используете для своего приложения управляемую базу данных MongoDB. Кластер состоит из одного хоста s2.large (12 vCPU, 48 ГБ) с быстрым сетевым хранилищем объёмом 50 ГБ.
С учётом растущей нагрузки на кластер и далеко идущих планов по развитию приложения вы решаете разбить БД на два шарда, понизив при этом класс хостов до s2.medium (8 vCPU, 32 ГБ) и увеличив объём хранилища до 100 ГБ, а также сделать БД отказоустойчивой.
 
Сколько хостов в кластере вам для этого понадобится?
 
Правильный ответ:
  • 6 (два хоста для шардов и еще по две реплики на каждый шард)
Сколько примерно времени займет восстановление кластера размером 10 ГБ из резервной копии?
 
Правильный ответ:
  • 17 минут

 

Поздравляем, вы завершили тему «MongoDB»

В этой теме вы узнали о различиях классических реляционных и NoSQL баз данных, научились создавать кластер баз данных MongoDB, познакомились с концепцией шардирования БД, выяснили некоторые особенности сервиса управляемых баз данных MongoDB в Yandex Cloud.

 

 

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

MDB. Шардирование

Кратко:

  • Шардирование - горизонтальное масштабирование данных, разбиение на шарды и размещение на разных хостах.
  • Плюсы: обходит технические ограничения, ускоряет доступ к данным для пользователей из конкретного региона, выполняет юридические требования.
  • Недостатки: неправильно шардировать данные, могут возникнуть горячие точки, шардирование в MongoDB доступно только для кластеров с версией не ниже 4.0.
  • В MongoDB шардирование поддерживается по умолчанию, части коллекций размещаются на разных хостах.
  • Данные на шардах должны быть не связаны между собой, выбор ключа шардирования влияет на удобство работы с коллекцией и производительность.
  • Шардирование имеет смысл, если данных много или они неоднородны и делятся на категории.
  • Сервис поддерживает две основные стратегии: по хешу и по диапазону значений.
  • Отменить шардирование невозможно, для восстановления до шардирования нужно сделать резервную копию и создать новый кластер.

Шардирование

Шардирование — это горизонтальное масштабирование данных, при котором данные разбиваются на шарды (т. е. части) и размещаются на разных хостах кластера. Нагрузка на БД при этом распределяется по хостам, что позволяет добиться большей производительности системы, чем если бы она была расположена на одном мощном сервере. Это особенно важно, если данных или запросов к ним очень много.
Плюсы шардирования в том, что оно позволяет:
  • Обойти технические ограничения. Если БД работает на пределе производительности — можно разбить её на части и распределить запросы на чтение между ними.
  • Ускорить доступ к данным для пользователей из конкретного региона. Например, международные соцсети могут хранить контент на русском языке на серверах ближе к России.
  • Выполнить юридические требования. Например, хранить конфиденциальные данные на шарде, публичный доступ к которому отключен.
  • Повысить доступность. Если БД находится на одном нешардированном хосте, то его выход из строя приведет к потере всех данных. Если же БД шардирована, то при отказе одного шарда все данные на других остаются доступными.
    Для шардов можно дополнительно настроить репликацию. Так вы обойдетесь без потерь, если сервер выйдет из строя. А размещение реплик шарда в разных зонах доступности даст вам отказоустойчивую систему.
  • Ускорить запросы. Они могут выполняться медленнее из-за того, что конкурируют за ресурсы сервера. Шардирование устраняет конкуренцию, исполняя запросы параллельно на разных серверах.
Каким бы замечательным ни было шардирование, у него есть и недостатки:
  • Правильно шардировать данные, т. е. разбить их на части — непростая задача. Если вы сделаете это неверно, то мощности серверов будут использоваться нерационально. Например, потребуется много межсерверных запросов.
  • Из-за несбалансированного распределения данных между шардами появляются горячие точки — разделы БД, к которым идет намного больше обращений по сравнению с остальными. Запросы к горячим точкам обрабатываются заметно медленнее.

Шардирование в MongoDB

В MongoDB шардирование коллекций поддерживается по умолчанию — части коллекций MongoDB размещаются на разных хостах кластера. На какой шард попадет фрагмент данных, определяет ключ шардирования.
От выбора ключа зависит удобство работы с коллекцией и производительность. Следует логично распределить данные коллекции по шардам. Данные на шардах не должны быть связаны между собой.
Шардировать данные имеет смысл, если:
  • Данных много (коллекция больше 200 ГБ).
  • Данные неоднородны и четко делятся на примерно одинаковые по объему данных категории.
  • Требования к скорости чтения и записи данных высоки. Шардирование распределит нагрузку по хостам, чтобы обойти технические ограничения.
Шардирование доступно для кластеров MongoDB с версией не ниже 4.0. Оно происходит с автоматическим созданием служебных хостов mongos (для маршрутизации запросов пользователей) и mongocfg (для хранения конфигурации шардов), которые тарифицируются отдельно от основных хостов БД.
Сервис поддерживает две основные стратегии шардирования данных: - по хешу (ключ шардирования на базе хеша); - по диапазону значений (ranged sharding).
Отменить шардирование кластера невозможно. Чтобы воссоздать кластер до шардирования, придется сделать его резервную копию, а затем из копии создать новый кластер.
Чтобы повысить доступность, составляйте каждый шард из трёх или более хостов БД.
 
 
Проверьте себя:
Шардирование позволяет изолировать:
 
Правильный ответ:
  • отказы хостов
  • отказы наборов реплик
Шард — это:
 
Правильный ответ:
  • часть БД, хранящаяся на хосте
Выберите правильные утверждения. Ключ шардирования:
 
Правильный ответ:
  • может быть причиной возникновения горячих точек
  • говорит БД о том, где найти или куда записать фрагмент данных
  • влияет на скорость чтения и записи данных

 

 

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

MDB. ПР. Создание кластера MongoDB

Кратко:

  • Создание кластера MongoDB в Yandex Cloud
  • Установка основных настроек кластера: тип хоста, класс, стандартное сетевое хранилище
  • Подключение к базе данных через интернет или с виртуальных машин
  • Установка утилиты MongoDB Shell
  • Создание коллекции "users" в базе данных
  • Загрузка тестовых данных с помощью методов db.insertOne() и db.insertMany()
  • Работа с данными, содержащими разный набор данных
  • Проверка наличия пользователей старше 37 лет с помощью метода db.users.find()

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

На этом уроке вы создадите кластер MongoDB, подключитесь к нему и загрузите в него данные. Раньше вы работали только с реляционными БД, но использование кластера MongoDB принципиально не отличается от работы с кластером MySQL или PostgreSQL, так что многое будет вам знакомо.

Создание кластера базы данных

Выберите в консоли управления Yandex Cloud каталог для кластера БД. На дашборде каталога откройте раздел Managed Service for MongoDB. В открывшемся окне нажмите кнопку Создать кластер.
Установите основные настройки кластера. Для этого урока создайте кластер с минимальной конфигурацией: тип хоста burstable, класс b2.nano, стандартное сетевое хранилище размером 10 ГБ. Откройте публичный доступ к хосту и задайте пароль пользователя БД. Остальные значения оставьте по умолчанию.
image

Подключение к базе данных

В сервисе управляемых БД MongoDB к хостам можно подключаться через интернет или с виртуальных машин в той же сети. Порт для подключения — 27018.
Для подключения через интернет хосты кластера должны находиться в публичном доступе. Подключаться можно только через зашифрованное соединение.
Обратите внимание: если публичный доступ настроен только для некоторых хостов в кластере, то при автоматической смене основной реплики она может оказаться недоступной из интернета.
Если к хосту нет публичного доступа и вы подключаетесь к нему с виртуальных машин Yandex Cloud, то зашифрованное соединение необязательно.
Подключитесь к созданной БД из интернета. Используйте SSL-сертификат, который вы подготовили на одной из предыдущих практических работ, или команду (для Ubuntu):
sudo mkdir -p /usr/local/share/ca-certificates/Yandex && \
sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt
 
Если всё пройдет успешно — вы получите сообщение операционной системы о том, что сертификат сохранён.image
Установите утилиту MongoDB Shell:
 
  1. Обновление индекса пакетов. Для этого нужно запустить команду 
    sudo apt update
    .
  2. Установка curl. Теперь можно установить пакет curl с помощью команды 
    sudo apt install curl

     

  3. Проверка установки. После установки можно проверить версию curl, чтобы убедиться, что она установлена правильно. Для этого нужно выполнить команду 
    curl --version
Чтобы установить актуальный пакет MongoDB, необходимо добавить его в список репозиториев. Но предварительно следует импортировать открытый ключ для MongoDB в вашу систему. Для этого используйте следующую команду:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
Теперь добавьте репозиторий MongoDB 7.0 в директорию /etc/apt/sources.list.d:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
В результате вы создадите файл с именем mongodb-org-7.0.list. Для просмотра его содержимого можно использовать команду cat находясь в директории /etc/apt/sources.list.d/:
cd /etc/apt/sources.list.d/
cat mongodb-org-7.0.list
Просмотр содержимого файла mongodb-org-7.0.list

Затем обновите локальный список пакетов, в результате чего репозиторий MongoDB 7.0 будет добавлен в систему:

sudo apt update

Далее уже можно будет запустить установку непосредственно пакета MongoDB:

sudo apt install mongodb-org
По окончании установки следующей командой можно проверить версию установленного пакета:
mongod --version
Просмотр версии установленного пакета MongoDB

При установке служба MongoDB по умолчанию будет отключена. Её включение производится при помощи системной утилиты systemctl:

sudo systemctl start mongod
 Убедиться в том, что сервис работает, можно посмотрев его состояние:
sudo systemctl status mongod
Просмотр состояния службы mongod

Кроме того, вы можете проверить, прослушивает ли сервер соответствующий порт. По умолчанию таким портом является порт 27017. Сделать это можно при помощи команды ss:

sudo ss -pnltu | grep 27017
Вывод сетевой статистики по порту 27017 - Как установить MongoDB на Ubuntu

После того, как вы убедились, что служба работает должным образом, при помощи следующей команды следует активировать её запуск при старте системы:

sudo systemctl enable mongod
Теперь ваш экземпляр MongoDB запущен и настроен для удаленного доступа. Чтобы подключиться к интерфейсу, используйте следующую команду:
mongosh
 
Подключитесь к БД с помощью команды mongosh. Чтобы получить строку подключения, на основной странице сервиса в консоли управления выберите кластер, на вкладке Обзор нажмите кнопку Подключиться.
image
Сервис сформирует пример строки подключения для кластера. Там же вы можете посмотреть примеры кода на Python, PHP, Java, Node.js, Go для подключения из приложений.
Подключитесь к кластеру из командной строки.
mongosh --norc \
        --tls \
        --tlsCAFile /home/<домашняя директория>/.mongodb/root.crt \
        --host '<FQDN хоста MongoDB>:27018' \
        --username <имя пользователя БД> \
        --password <пароль пользователя БД> \
        <имя БД>
 
При успешном подключении вы получите сообщение:
image
Создадим в БД коллекцию users. Предположим, в ней содержится информация о пользователях вашего приложения.
db.createCollection("users")
Проверьте себя
image
Загрузим в коллекцию тестовые данные с помощью методов добавления одного документа db.insertOne(...) и сразу нескольких db.insertMany(...).
Сначала добавим один документ (данные одного пользователя).
db.users.insertOne({firstName: "Adam", lastName: "Smith", age: 37, email: "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript."});
 
Ответ должен выглядеть примерно так:
image
Дополним коллекцию данными еще двух пользователей.
db.users.insertMany( [
      {firstName: "Viktoria", lastName: "Holmes", age: 73, email: "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.", phone: "737772727"},
      {firstName: "Tina", lastName: "Anders", age: 29, email: "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.", children: [{firstName: "Sam", lastName: "Anders"},{firstName: "Anna", lastName: "Anders"}]}
   ] );
 
Обратите внимание, что документы в коллекции users содержат разный набор данных. С помощью MongoDB мы можем работать с данными, структура которых частично не совпадает.
Теперь посмотрим на содержимое коллекции с помощью команды db.users.find(). Результат показывает, что все данные успешно добавлены:
image
Проверим, есть ли среди пользователей те, кому больше 37 лет. Сделаем запрос к БД с помощью метода find.
db.users.find({age: {$gt: 37}});
Проверьте себя
image
Подробности о методах работы с данными в MongoDB вы найдете в документации.

 

 

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

MDB. Введение. Несколько слов о NoSQL

Кратко:

  • Реляционные БД подходят не для всех задач, поэтому были созданы нереляционные модели данных, такие как NoSQL.
  • Нереляционные модели данных хранят данные в разных формах, таких как документы, графы, пары "ключ-значение" и т.д.
  • В MongoDB данные хранятся в документах, которые могут иметь сложную структуру и могут отличаться размером и полями.
  • Однотипные документы объединяются в коллекции, аналог таблиц в реляционных БД.
  • MongoDB подходит для управления большим объемом данных с неизвестной структурой и горизонтального масштабирования.
  • Пример использования MongoDB: интернет-магазин с множеством товаров с разными характеристиками и национальной БД медицинских карт.

Введение. Несколько слов о NoSQL

Вы уже знаете, что реляционные БД — это набор таблиц и связей между ними. Такие БД подходят не для всех задач. Например, данные без структуры невозможно уложить в таблицу. В итоге разработчики создали для нереляционных моделей данных NoSQL (not only SQL) БД.
Различия реляционных и нереляционных БД
 
  Реляционные Нереляционные
Способ хранения данных В таблицах По-разному: как документы, как граф из вершин и ребер, как пары «ключ-значение» и т. д.
Структура данных Жесткая: у каждого объекта одни и те же поля Жестких требований нет — у объектов могут быть разные поля
Добавление полей Потребует изменить структуру таблицы и все объекты в ней Не потребует ничего менять — можно добавить поля только к новым объектам
ACID* Соответствуют требованиям ACID ACID могут жертвовать, чтобы увеличить скорость работы или горизонтально масштабировать БД
Масштабирование В основном вертикальное: с помощью увеличения мощности серверов Вертикальное и горизонтальное: с помощью увеличения мощности серверов или их количества
Язык запросов SQL или близкие к нему диалекты Разные синтаксисы. Например, в MongoDB используются запросы в формате JSON
 
* Требования ACID — это:
  • Atomicity — атомарность: транзакция не выполняется, пока не выполнены все ее части;
  • Consistency — целостность: когда транзакция завершилась, данные соответствуют схеме БД, а все реплики базы синхронизированы;
  • Isolation — изолированность: параллельные транзакции выполняются отдельно друг от друга;
  • Durability — надежность: способность восстанавливаться до последнего сохраненного состояния после сбоя.
На этом и следующих уроках вы познакомитесь с документо-ориентированной БД MongoDB и тем, как с ней работать в Yandex Cloud.
MongoDB — это популярная NoSQL БД, в которой данные хранятся не в строках таблиц, а в документах. Один объект — один документ. Структура каждого документа подобна структуре JSON (JavaScript Object Notation).
Так может выглядеть документ из базы данных поликлиники с медицинскими картами пациентов:
{
  "Имя":"Сергей",
  "Фамилия":"Шишкин",
  "Дата рождения":"02.12.1961",
  "Номер медицинской карты":23264,
  "Посещения врача":[
    {
      "Дата":"24.02.2021",
      "Врач":"Сидорова О.С.",
      "Анамнез":"...",
      "Назначенные обследования":"Общий анализ крови",
      "Диагноз":"ОРВИ",
      "Лечение":"Теплый чай с медом перорально до 12 раз в сутки"
    },
    {
      "Дата":"05.03.2021",
      "Врач":"Сидорова О.С.",
      "Анамнез":"...",
      "Назначенные обследования":"",
      "Диагноз":"Здоров"
    }
  ]
}
 
В отличие от строк в реляционных БД, документы:
  • позволяют сохранять объекты со сложной структурой, которая может изменяться;
  • могут отличаться друг от друга размером и полями.
Высокоуровнево документы состоят из пар «ключ - значение». В примере с медицинской картой имя — это ключ, а Сергей — его значение. Значениями могут быть числа, строки, аудиофайлы, изображения, массивы или другие объекты, даже сложные.
Однотипные документы объединяются в коллекции — аналог таблиц в реляционных БД. Например, в БД поликлиники могут входить коллекции «Медицинские карты пациентов», «Результаты лабораторной диагностики» и «Листы нетрудоспособности».
MongoDB подойдет, если необходимо:
  • Управлять большим объемом данных с заранее неизвестной структурой (каталоги товаров, пользовательские профили, системы управления контентом).
    Пример: интернет-магазин, где продается множество товаров с разными характеристиками. Чтобы выставить товар на сайт, контент-менеджер выбирает характеристики и их значения из набора. Менеджер также может добавить или удалить любое поле и установленные для него значения.
  • Горизонтально масштабироваться.
    Пример: создание национальной БД медицинских карт. Реляционная БД здесь — не лучшее решение: ее горизонтальное масштабирование сопряжено с трудностями и плохо автоматизируется.
Проверьте себя
 
Модель данных в MongoDB называется:
 
Правильный ответ:
  • документо-ориентированной

 

 

Категория: Cloud Services Engineer
Просмотров: 527
  1. RBD. Data Transfer. Инструмент для миграции баз данных
  2. RBD. Миграция данных в облако репликацией
  3. RBD. Репликация
  4. RBD. Практическая работа. Создание кластера базы данных PostgreSQL

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

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