• nav


Эволюция NoSQL, основные преимущества перед SQL

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

Проблема масштабируемости SQL была признана интернет-компаниями с огромными растущими потребностями в данных и инфраструктуре, такими как Google, Amazon и Facebook. Они придумали свои собственные решения проблемы – такие технологии, как BigTable, DynamoDB и Cassandra.

Этот растущий интерес привел к появлению ряда систем управления базами данных NoSQL (СУБД) с упором на производительность, надежность и согласованность. Ряд уже существующих структур индексирования был пересмотрен и усовершенствован с целью повышения производительности поиска и операций чтения.

Во-первых, существовали запатентованные (с закрытым исходным кодом) типы баз данных NoSQL, разработанные крупными компаниями для удовлетворения их конкретных потребностей, такие как Bigtable от Google, которая считается первой системой NoSQL, и DynamoDB от Amazon.

Успех этих проприетарных систем положил начало разработке ряда аналогичных систем баз данных с открытым исходным кодом и проприетарных систем, наиболее популярными из которых являются Hypertable, Cassandra, MongoDB, DynamoDB, HBase и Redis.

Что отличает NoSQL?

Одним из ключевых различий между базами данных NoSQL и традиционными реляционными базами данных является тот факт, что NoSQL является формой неструктурированного хранилища.

NoSQL и обычная реляционная база данных

Это означает, что базы данных NoSQL не имеют фиксированной структуры таблиц, как в реляционных базах данных.

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

Базы данных NoSQL имеют много преимуществ по сравнению с традиционными реляционными базами данных.

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

Некоторые типы хранилища NoSQL баз данных включают хранение столбцов, документов, значений ключей, графов, объектов, XML объектов и другие способы хранения данных.

Обычно каждое значение в базе данных обозначается ключом. Некоторые хранилища баз данных NoSQL также позволяют разработчикам хранить сериализованные объекты в базе данных, а не только простые строковые значения.

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

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

Недостатки NoSQL баз данных

Конечно, базы данных NoSQL не идеальны, и они не всегда могут использоваться в качестве систем хранения данных.

Во-первых, большинство баз данных NoSQL не заточены на надёжность в той мере, в которой это относится к традиционным базам данных. Такие характеристики как атомарность, консистентность, изоляция и стойкость данных в системах NoSQL принесены в жертву производительности и масштабируемости.

Для поддержки функций надежности и согласованности разработчикам необходимо реализовать собственный проприетарный код, что усложняет работу системы. Это ограничивает использование NoSQL в областях, где важна безопасность и надёжность транзакции, таких как банковские системы.

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

NoSQL против реляционных баз данных

Давайте сравним NoSQL с обычной базой данных:

Характеристика

База данных NoSQL

Реляционная база данных

Производительность

Высокая

Низкая

Надёжность

Низкая

Хорошая

Доступность

Хорошая

Хорошая

Консистентность данных

Плохая

Хорошая

Размер данных

От больших до огромных

От средних до больших

Масштабирование

Лёгкое, дешёвое

Лёгкое, дорогое

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

Типы хранения данных. Хранилище Значений Ключей

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

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

Одним из самых больших недостатков этой формы базы данных является отсутствие согласованности на уровне базы данных.

Самой известной базой данных NoSQL, построенной на базе хранилища ключевых значений, является Amazon DynamoDB.

Типы хранения данных. Хранилище Документов

Хранилища документов аналогичны хранилищам значений ключей, поскольку они не имеют схемы и основаны на модели "ключ-значение". Таким образом, и то и другое имеет много общих преимуществ и недостатков, однако между ними существуют важные различия.

В хранилищах документов значения (документы) обеспечивают кодирование хранимых данных. Эти кодировки могут иметь формат XML, JSON или BSON (двоичная кодировка JSON).

Также можно выполнять запросы на основе данных.

Наиболее популярным приложением базы данных, использующим хранилище документов, является MongoDB.

Типы хранения данных. Хранилище Столбцов

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

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

Хранилища столбцов имеют высокую скорость чтения и записи. Здесь все строки, соответствующие одному столбцу, хранятся как одна запись на диске. Это делается для более быстрого доступа во время операций чтения/записи.

К наиболее популярным базам данных, использующим хранилище столбцов, относятся Google BigTable, HBase и Cassandra.

Типы хранения данных. Графовые базы данных

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

Графовые базы данных

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

В настоящее время InfoGrid и InfiniteGraph являются наиболее популярными графовыми базами данных.

Системы Управления Базами Данных NoSQL

Для краткого сравнения баз данных в следующей таблице приводится краткое сравнение различных систем управления базами данных NoSQL.

Название базы данных

Тип хранения данных

Язык запросов

ИнтерфейсЯзык программи-рованияИсходный код

Cassandra

Столбцы

Thrift API

ThriftJavaОткрытый

MongoDB

Документы

Mongo Query

TCP/IPC++Открытый

HyperTable

Столбцы

HQL

ThriftJavaОткрытый

CouchDB

Документы

MapReduce

RESTErlangОткрытый

BigTable

Столбцы

MapReduce

TCP/IPC++Открытый

HBase

Столбцы

MapReduce

RESTJavaОткрытый

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

Cassandra

Cassandra-это система управления базами данных, разработанная компанией Facebook для хранения огромных объемов данных, распределенных между различными узлами. Целью Cassandra было создание СУБД, которая не имеет единой точки отказа и обеспечивает максимальную доступность.

Кассандра-это в основном база данных хранилища столбцов. В некоторых исследованиях Cassandra упоминается как гибридная система, имеющая много общего с Bigtable от Google и DynamoDB от Amazon.

Особенности Cassandra:

Когда происходит сбой в одном из узлов Кассандры, данные на этом узле будут недоступны, однако другие узлы (и данные) по-прежнему будут работать.

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

Относительно простой в использовании клиентский интерфейс. Кассандра использует Apache Thrift, кросс-языковой клиент RPC, но большинство разработчиков предпочитают альтернативы с открытым исходным кодом, построенные поверх Apple Thrift, такие как Hector.

Одной из особенностей Cassandra является репликация данных. По сути, она отражает данные на другие узлы кластера. Репликация может быть случайной или специфичной для обеспечения максимальной защиты данных путем размещения узла в другом центре обработки данных. Другой особенностью Cassandra является политика секционирования, определяющая, где и на каком узле разместить ключ. Расположение может быть случайным или упорядоченным. При использовании обоих типов политик секционирования Cassandra удается найти компромисс между балансировкой нагрузки и оптимизацией производительности запросов.

Согласованность. Все узлы должны быть актуальными в любой момент времени с последними значениями. Это сложный настраиваемый процесс, поэтому Cassandra поддерживая баланс между операциями репликации и чтения/записи, позволяет разработчику настроить репликацию под свои нужды.

Чтение/Запись. Клиент отправляет запрос на один узел Cassandra. Узел в соответствии с политикой репликации хранит данные в кластере. Каждый узел сначала выполняет изменение данных в журнале фиксации, а затем обновляет структуру таблицы с изменениями, и это происходит синхронно. Операция чтения осуществляется тем же образом: запрос на чтение отправляется на один узел, и этот единственный узел определяет, какой узел содержит данные, в соответствии с политикой секционирования/размещения.

MongoDB

MongoDB - это ориентированная на документы база данных, написанная на C++. База данных основана на хранилище документов, что означает, что она хранит значения (называемые документами) в виде закодированных данных JSON. Это очень важно, поскольку даже если данные вложены в документы JSON, они все равно останутся доступными через запросы и индексируемы.

В следующих подразделах описываются некоторые ключевые функции, доступные в MongoDB.

Как говорилось выше, MongoDB использует RESTful API. Для получения определенных документов из БД, создается документ запроса, содержащий поля, которым должны соответствовать требуемые документы.

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

Архитектура MongoDB

Подобно Cassandra, сегмент в MongoDB имеет схему репликации данных, которая создает набор реплик каждого сегмента, содержащего точно такие же данные. В MongoDB существует два типа схем реплик: Master-Slave репликация и Replica-Set репликация. Replica-Set обеспечивает большую автоматизацию и лучшую обработку для сбоев, в то время как Master-Slave иногда требует вмешательства администратора. Независимо от схемы репликации, в любой момент времени в наборе реплик только один сегмент выступает в качестве основного, все остальные сегменты реплики являются вторичными сегментами. Все операции записи и чтения переходят в основной сегмент, а затем распределяются равномерно (при необходимости) на другие вторичные сегменты в наборе.

На рисунке выше мы видим архитектуру MongoDB, описанную выше, показывающую серверы маршрутизаторов зеленым цветом, серверы конфигурации желтым цветом и сегменты, содержащие синие узлы MongoDB.

Следует отметить, что сегментирование (или обмен данными между сегментами) в MongoDB полностью автоматизировано, что снижает частоту отказов и делает MongoDB высокомасштабируемой системой управления базами данных.

Заключение

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

Рон Амадео
22/02.2019





ПОХОЖИЕ СТАТЬИ:

Сравнение Secure Erase и других методов удаления данных в гос. ведомствах

Почему мин.обороны США не использует программную очистку дисков? Рассмотрим методы удаления данных на HDD/SSD и дадим ссылки на программы очистки по ГОСТ и военным стандартам очистки секретных данных.

...

Проблемы утилизации носителей данных в ЦОДах

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

Тренды хранения данных в 2019 году - прогноз Toshiba Electronics

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

Seagate Exos 10E2400 - тестируем гибридный SFF диск расширенной методикой

Этот гибридный жёсткий диск объёмом 2.4 Тб для серверов интересен тем, что поддерживает энергонезависимый кэш записи и имеет 16-гигабайтный NAND буфер чтения. Мы протестировали его, чтобы посмотреть, как кэш ускоряет приложения, им...

Выбираем внешнее хранилище для нетбуков

Вам не хватает встроенного SSD или HDD на нетбуке, и вы понимаете, что надо увеличить его дисковое пространство, но не знаете, каким способом? Стоит ли покупать внешний USB 2.0 диск или поддаться тенденциям и приобрести сетевое х...


НА ФОРУМЕ ГОВОРЯТ



НОВЫЕ СТАТЬИ
Обзор видеокарты Palit GTX 1660 Super: тестируем новинку в задачах вычислений и машинного обучения

Новая серия видеокарт GTX 1660 Super интересна, прежде всего, памятью GDDR6, имеющей высокую пропускную способность. Это именно то, что надо для задач машинного обучения и работы в Tensorflow. Как минимум, вы можете создать...

Neffos C9 Max – недорогой смартфон с большим IPS-экраном

Мы регулярно тестируем смартфоны бренда Neffos, недавно у нас была модель X20 стоимостью 8500 рублей, а сегодня мы познакомимся с моделью чуть дешевле, за 7000 рублей – C9 Max. Это шестидюймовый смартфон с мощным...