Введение в базу данных

TOC

  • Что такое база данных?
  • Особенности базы данных
  • Зачем нужна база данных?
  • Различные типы баз данных
  • Важные понятия
    • ACID
    • Разделение данных
    • Разделение данных
    • БАЗА

Что такое база данных:

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

Особенности

  • Организованная
  • Доступность
  • легкость получения, поиска, чтения и записи данных
  • Низкая задержка
  • Восстановление данных
  • ACID*
  • Гибкая схема*

*не все базы данных обеспечивают это.

Зачем нужна база данных

  • для организации данных
  • для хранения данных
  • для извлечения данных
  • для резервного копирования данных
  • поиск с низкой задержкой

Популярные базы данных

  • RDBMS: MySQL, Oracle и т.д.
  • NoSQL: MongoDB, DynamoDB

Тип базы данных

  • Таблица
    • База данных на основе таблицы состоит из строк и столбцов.
    • База данных на основе таблицы имеет первичный ключ для связи подмножеств данных или разделения базы данных.
    • Лучше всего подходит для вертикального масштабирования
    • Основанная на схеме
  • Документ
    • База данных на основе документов состоит из коллекции, документов и полей.
    • Данные хранятся в виде пары ключ-значение в полях.
    • Лучше всего подходит для горизонтального масштабирования
    • Без схемы
  • Граф
    • База данных на основе графа хранит данные в виде узлов и отношений.
    • Она не содержит схем
    • Легко масштабируется

РСУБД против NoSQL

РСУБД NoSQL (не только SQL)
Пример MySQL, Oracle, Maria и т.д. mongo, couch DB, Dynamo DB
Дизайн таблицы документ, ключ-значение, графы
Масштабирование вертикальный горизонтальное
Легкость масштабирования сложно легко
Гибкий не очень гибкий очень гибкий
Схема нужна схема нет необходимости в схеме
Первичный ключ Да нет
DBA требуется только если БД большая
Динамическая (внесение любых изменений в любое время) нет да
ACID да нет
Шардинг нет да
Раздел да нет
сложность Высокая Низкая
Язык Язык запросов MQL (язык запросов mongo)
Интегрированное кэширование Необходимо реализовывать отдельно встроенный
Безопасность Да не так, как в MySQL
Хранимые процедуры Да Нет
Примеры использования Где требуются свойства ACID, например: финансовые банки Где ACID не является приоритетом
Производительность Быстрее при выборе количества данных Быстрее при вставке и обновлении данных. Запись выполняется быстрее
Когда использовать Лучше всего подходит для данных в подходящей таблице/строках Лучше всего подходит для неструктурированных данных
Лучше всего подходит для небольшого набора данных Лучше всего подходит для большого набора данных
высокая доступность в нестабильной среде
Сильная зависимость от многорядных транзакций

Важные концепции:

1) Транзакции

Для любой базы данных мы общаемся с помощью термина «транзакции». Сколько транзакций происходит?

Например: Есть счета A и B с 500 и 1000 рупий. А переведет 200 на счет Б и увеличит баланс Б на 1200.

Здесь мы имеем 3 шага:

  1. Счет А переводит 200 рупий
  2. Счет Б получит сумму от А
  3. Баланс счета Б увеличится

Приведенные выше 3 шага являются одной транзакцией.

2) ACID

a. Атомарность

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

Например: в примере с транзакциями, если 1 шаг не будет выполнен, то вся транзакция должна быть выполнена. Для атомарности вся транзакция должна быть выполнена на 100%.

b. Согласованность

База данных должна быть последовательной до и после транзакции всегда. Параллельность не должна влиять на целостность базы данных.

Например: Если пользователь положил на счет 100, но транзакция не прошла. База данных должна отражать последнее значение, чтобы сохранить целостность базы данных.

c. Изоляция

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

Например: баланс банка составляет 600. Пользователь А снимает 100, а пользователь Б добавляет 50. Для пользователя А баланс будет равен 600, а после снятия — 500. Для пользователя B баланс равен 500, после снятия добавляется 50, и новый баланс становится равным 550. Это выглядит так, как будто транзакции выполняются последовательно.

d. Долговечность

Изменения, сделанные транзакцией, должны сохраняться.

Например: пользователь совершил транзакцию на сумму 200 рупий. Если произошел перебой в работе, успех/неудача транзакции должны быть сохранены в базе данных. Это можно сделать с помощью WAL (Write-Ahead-logs).

3) Шардинг

Шардинг данных — это способ распределения одной базы данных между несколькими базами данных, которые могут храниться на нескольких машинах. Это способ снизить нагрузку на одну базу данных.

Разделение данных — это своего рода «горизонтальное масштабирование». В процессе разделения данные распределяются по нескольким машинам, известным как «физические осколки». Каждый шард будет «автономным» — они не разделяют никаких данных или вычислительных ресурсов. Шардинг может быть реализован на уровне приложений, а некоторые базы данных поддерживают его изначально.

Преимущества шардинга:

  • Быстрый поиск
  • Избегание SPoF
  • Легко модернизировать горизонтальную структуру

Недостатки шардинга:

  • Несбалансированный шард
  • Не поддерживается многими базами данных
  • Архитектура шардов сложна
  • Снятие шардинга затруднено

Техники для шардинга:

  • На основе ключей
  • На основе диапазона
  • На основе каталогов

4) Разделение

Разбиение данных — это способ распределения данных на несколько подмножеств данных под одним экземпляром. MySQL поддерживает разделение. Существуют различные типы разделов.

Способ связать различные таблицы вместе — это первичный ключ.

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

Преимущества:

  • Производительность запросов
  • Доступность данных
  • Производительность
  • Управляемость данных
  • Повышение безопасности

Методы разделения данных:

  • Горизонтальное разделение (разделение базы данных)
  • Вертикальное разделение
  • Функциональное разделение

Техники:

  • На основе диапазона
  • На основе хэша
  • На основе списков

Разница между разделением данных и шардингом данных.

Цель разделения данных и разбиения данных одна и та же — распределить данные. Разделение данных является основой архитектуры распределенной системы. Разделение данных фокусируется на распределении базы данных на несколько подмножеств данных под одним единственным экземпляром. Разделение данных — это распределение данных по нескольким машинам.

5 БАЗА

БА: В принципе доступно

S: Мягкое состояние

E: В конечном итоге согласованное

Примеры использования:

РСУБД

  • MySQL отлично подойдет для финансовых транзакций, где требуется соответствие ACID
  • Данные структурированы
  • Горизонтальное масштабирование не является требованием
  • Поиск осуществляется быстрее

NoSQL

  • Там, где соответствие ACID не является приоритетом. Например: блог-приложение, электронная коммерция (продукты).
  • Данные неструктурированы. Например: продукты
  • Скорость чтения и записи выше. Например: блог, где мы будем создавать блоги и читать их.
  • Ищем горизонтальное масштабирование базы данных.

Большое спасибо тем, кто просмотрел это и дал ценные отзывы: Ahsan, Tauseef, Naman, Anand, Uddeshya.

Понравился блог? Следуйте за мной на [Twitter],(https://twitter.com/hellonehha)

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *