Как стать автором
Обновить
1206.83
OTUS
Цифровые навыки от ведущих экспертов

Кратко про NewSQL

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров16K

Привет, Хабр! 🚀

NewSQL - это класс систем управления реляционными БД, представляет собой слияние преимуществ SQL-бд с инновациями, направленными на решение проблем масштабируемости и производительности.

В основе NewSQL лежит стремление сохранить полную совместимость с SQL, т.е разработчики, уже знакомые с SQL, могут легко адаптироваться к использованию NewSQL систем без необходимости изучения чего-либо другого.

Помимо базового SQL синтаксиса, многие NewSQL системы вводят дополнительные расширения, направленные на улучшение производительности Эти расширения могут включать в себя новые функции, процедуры и методы оптимизации запросов, которые традиционные SQL-системы не поддерживают.

Классификации NewSQL систем

Первый подход - это создание NewSQL систем с нуля. Эти системы разрабатываются с учетом последних технических фич и потребностей рынка, чтобы преодолеть ограничения как классических реляционных бдшек так и NoSQL решений.

Основа NewSQL - это использование оперативной памяти и технологий быстрого хранения, таких как SSD, для обеспечения очень быстрой скорости доступа к данным и обработки транзакций.

Примеры таких систем:

VoltDB: один из ярких примеров NewSQL систем, созданных с нуля. VoltDB разработан для обеспечения обработки транзакций с гарантией ACID в реал тайме. Он использует полностью In-Memory архитектуру, что дает очень большой ресурс производительности. VoltDB оптимизирован для обработки транзакций с очень низкой задержкой

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

NewSQL предлагает решения, которые могут масштабироваться горизонтально, распределяя нагрузку по нескольким узлам.

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

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

Примеры модификаций:

Percona Server включает в себя ряд оптимизаций и функций, которые не доступны в стандартной версии MySQL, к примеру: улучшенная работа с памятью, более эффективные инструменты для мониторинга и управления, а также расширенная поддержка различных сценариев репликации.

TokuDB - это движок хранения для MySQL и MariaDB, который дает больше производительность из-за использования фрактальных индексов. Эти индексы уменьшают количество операций ввода/вывода при выполнении и обновлениях. Поскольку TokuDB теперь является частью Percona Server и MariaDB, ваши взаимодействия с базой данных на уровне SQL в большинстве случаев не будут отличаться от стандартных операций MySQL/MariaDB. Различия заключаются в настройке и конфигурации сервера базы данных для использования TokuDB в качестве движка хранения.

При создании можно указать TokuDB в качестве движка хранения с помощью директивы ENGINE=TokuDB.

Реализация масштабируемости

Прозрачное объединение в кластеры подразумевает создание кластера из нескольких узлов бд, работающих совместно как единая система

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

Примеры реализаций:

MySQL NDB Cluster предлагает решение для кластеризации базы данных MySQL, которое автоматически управляет распределением данных и балансировкой нагрузки.

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

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

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

Используя ключ шардинга, данные разбиваются на логические блоки или шарды. Метод разбиения может варьироваться; одним из подходов является использование хэш-функции от ключа шардинга для определения, в какой шард попадут данные. Другой подход — диапазонное разбиение, при котором данные распределяются по шардам на основе диапазонов значений ключа шардинга.

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

Например, Google Spanner использует механизм синхронизации времени, известный как TrueTime, который дает строгую согласованность данных на глобальном уровне.

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

Для работы с Google Spanner обычно используется Google Cloud SDK и клиентские библиотеки для различных япах. Пример того, как можно создать базу данных и таблицу в Spanner с помощью Google Cloud SDK:

gcloud spanner databases create [DATABASE_NAME] --instance=[INSTANCE_ID] --ddl="CREATE TABLE my_table (id INT64 NOT NULL, name STRING(255)) PRIMARY KEY (id)"

Для работы в Python можно установить соответствующую либу:

pip install google-cloud-spanner

Вставить данные в таблицу можно таким образом:

from google.cloud import spanner

# Инициализация клиента Spanner
spanner_client = spanner.Client()
instance = spanner_client.instance([INSTANCE_ID])
database = instance.database([DATABASE_NAME])

# Вставка данных
with database.batch() as batch:
    batch.insert(
        table="my_table",
        columns=("id", "name"),
        values=[
            (1, "First Value"),
            (2, "Second Value")
        ]
    )

Код создает соединение с базой данных Spanner, определенной в [DATABASE_NAME], и вставляет две строки в таблицу my_table.


Напоследок напомню о том, что для тех, кто интересуется образованием в сфере IT мои друзья из OTUS разработали ряд онлайн-курсов от экспертов индустрии. Ознакомиться с каталогом можно тут.

Теги:
Хабы:
Всего голосов 15: ↑8 и ↓7+6
Комментарии9

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS