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

Источник · Перевод автора

База данных NoSQL получила свое название от того, чем она не является: это база данных, которая не использует язык структурированных запросов (SQL) для доступа к данным. Некоторые из хорошо известных баз данных, такие как Oracle и PostgreSQL, являются базами данных SQL, но большинство новых баз данных, появившихся за последние несколько лет, считаются базами данных NoSQL. Некоторые люди настаивают на том, что NoSQL не является полной противоположностью SQL, и утверждают, что это название действительно означает «Not Only SQL». В любом случае важно то, что базы данных NoSQL ослабили многие требования, которые определяли более ранние базы данных SQL.

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

Различия между NoSQL и SQL

Наиболее заметное различие между NoSQL и SQL заключается в том, как данные структурированы в базе данных. Базы данных SQL организуют информацию в прямоугольные таблицы со столбцами, которые предопределены и заполнены заданными типами данных, такими как целые числа и даты. С другой стороны, базы данных NoSQL хранят пары данных: ключ, содержащий имя поля и значение, связанное с этим полем. Такая гибкость позволяет некоторым записям иметь несколько ключей, а другим статьям – совершенно разные наборы ключей. Например, одна запись может содержать ключи «имя», «звание» и «порядковый номер», в то время как другая может содержать только «имя», а третья может содержать «имя», «возраст», «родной город, »И« высота ».

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

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

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

Насколько важна согласованность данных?

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

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

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

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

Менее очевидная, но все же существенная разница между базами данных SQL и NoSQL – это формат, который базы данных используют для своих ответов. В то время как базы данных SQL использовали резервный формат для возврата ответов на запросы, некоторые базы данных NoSQL отформатировали свои ответы в JSON. Разработчикам нравится JSON, потому что он упрощает написание кода для браузера. Некоторые базы данных SQL также приняли JSON, чтобы воспользоваться этим удобством.

Унаследованные базы данных используют функции NoSQL

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

Microsoft CosmosDB считается «многомодельной» базой данных, потому что она предлагает два API, один из которых говорит на традиционном SQL, а другой – на NoSQL. Приведенные ниже данные хранятся в формате NoSQL, который является надмножеством табличной модели, и API при необходимости интерпретирует запросы SQL.

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

Выскочки на рынке NoSQL

Хотя большинство баз данных NoSQL относительно новы, по крайней мере, по сравнению с базами данных SQL, многие из них хорошо зарекомендовали себя на предприятии. Например, MongoDB – это публичная компания, предлагающая несколько различных версий своей основной базы данных как в качестве услуги, так и локально. Выпуск с открытым исходным кодом часто устанавливается в качестве основного компонента веб-приложений.

Couchbase – еще одна независимая компания, которая начала свою деятельность более десяти лет назад, но так и не стала публичной. Его ядро ​​NoSQL-движок с годами расширилось, и теперь компания предлагает другие услуги, такие как полнотекстовая поддержка, поддержка мобильных устройств и API-интерфейс, подобный SQL, для более сложных запросов.

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

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

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

Некоторые из популярных баз данных NoSQL тесно связаны с поддержкой распределенного анализа. HBase и Accumulo – это два варианта, которые интегрированы с миром Hadoop для обработки больших данных.

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

Ряд баз данных следуют традиции NoSQL по ослаблению некоторых структурных правил, определяющих генерацию SQL, при сохранении элементов SQL. Инструмент EraDB для поиска данных журнала временных рядов, например, считается «свободным от схемы», потому что не существует предопределенных правил для структуры данных. Однако языком запросов компании является SQL, поэтому он охватывает оба лагеря.

Есть ли что-нибудь, что NoSQL не может сделать?

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

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