NoSQL

NoSQL (от англ. not only SQL) — категория, объединяющая системы управления базами данных, отличающимися от реляционных БД, для работы с которыми используется язык SQL. Такие СУБД появились в 2000-х годах как попытка решить проблемы масштабируемости при сохранении простоты и гибкости.

Впервые термин NoSQL был использован еще в 90-х годах как название конкретной системы, разработанной Карло Стрози. С современными СУБД, объединенными понятием «not only SQL», она не имела ничего общего, кроме того, что для управления данными в ней не использовался язык SQL. В своем смысле термин NoSQL стал применяться с 2009 года — с одноименной IT-конференции, посвященной новым опенсорсным продуктам на рынке обработки и хранения данных. Несмотря на то что организаторы мероприятия просто хотели придумать емкое и звучное название «на один раз», оно мгновенно завирусилось в твиттере и стало названием для целого направления в IT-индустрии.

История NoSQL

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

Новый виток популярности нереляционных баз данных начался с появлением интернета и его главного инструмента — поисковых систем. Для работы было нужно обеспечивать параллельную обработку больших массивов данных и масштабируемость. Первой в направлении стала работать компания Google, создавшая крупнейшую поисковую систему и комплекс других сервисов и приложений, работавших с большими объемами информации. Наработки подстегнули создателей открытого программного обеспечения и другие коммерческие компании разрабатывать похожие или альтернативные продукты, основанные на тех же принципах доступности, простоты и масштабируемости.

Как работают нереляционные базы данных

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

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

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

Особенности NoSQL

Термин объединяет множество СУБД, имеющих различную архитектуру и характеристики. Однако, можно выделить несколько присущих им всем особенностей:

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

Виды NoSQL-баз данных

  • Ключ-значение. В таких БД для доступа к значению используется ключ. Они применяются в качестве хранилищ изображений, специализированных файловых систем, кэшей, информационных платформ для онлайн-игр и т.д. — везде, где главными требованиями являются высокая масштабируемость и минимальная задержка обработки запроса.
  • Матричные. В таких БД данные хранятся в виде разреженных матриц, где строки и столбцы используются как ключи доступа к значению. Чаще всего такие СУБД применяют в индексировании веб-страниц и других задачах, связанных с обработкой больших данных.
  • Документо-ориентированные. В базах данных этого типа данные записываются в специальный документ в формате JSON или близком к нему. Таким БД свойственны одновременно иерархичность и гибкость. Чаще всего они применяются в системах управления контентом, каталогах, специализированных поисковых системах (например, в электронных архивах).
  • Графовые. Такие БД сохраняют информацию в виде сложно связанных друг с другом графов. Связанность данных упрощает их хранение, навигацию и поиск. Типичными примерами использования графовых БД являются социальные сети, системы выявления мошенничества.

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

  • Горизонтальная масштабируемость для увеличения производительности достаточно добавить новый сервер в систему, а не наращивать мощности уже имеющихся.
  • Высокая устойчивость так как NoSQL-БД размещаются на независимых серверах, выход одного из них из строя не обрушит всю базу данных и, следовательно, не приведет к полному отказу приложения.
  • Производительность с одной стороны, каждый сервер обрабатывает только свои запросы, не растрачивая свои мощности на все; с другой — информационные модели таких СУБД адаптируются под специфику каждого приложения.
  • Гибкость нереляционные БД могут работать с неструктурированными данными и различными моделями представления информации.
  • Широкая применимость горизонтальная масштабируемость и производительность позволяют применять нереляционные БД в обработке больших данных, онлайн-играх, интернете вещей, электронной коммерции, научной деятельности, издательском бизнесе и т.д.

Недостатки NoSQL

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

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

Другие термины на букву «N»

NestJS
NetworkX
Nginx
NLP
Node.js
NumPy

Все термины

(рейтинг: 5, голосов: 1)
Добавить комментарий