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

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

По Вашему запросу ничего не найдено.

Рекомендуем сделать следующее:

Темы на странице NoSQL

Что такое NoSQL?

Термин NoSQL обозначает нереляционные типы баз данных, которые хранят данные в формате, отличном от реляционных таблиц. Однако базы данных NoSQL можно запрашивать с помощью API-интерфейсов идиоматических языков, языков декларативных структурированных запросов и языков примеров запросов — вот почему их также называют «не только SQL» базами данных.

Для чего используется база данных NoSQL?

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

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

Сравнение SQL и NoSQL

Базы данных SQL реляционные, а NoSQL нереляционные. Система управления реляционными базами данных (РСУБД) является основой для языка структурированных запросов (SQL), который позволяет пользователям получать доступ и управлять данными в высокоструктурированных таблицах. Это основная модель для таких систем баз данных, как MS SQL Server, IBM DB2, Oracle и MySQL. Но с базами данных NoSQL синтаксис доступа к данным может быть разным в разных базах данных.

Сравнение реляционной базы данных с базой данной NoSQL

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

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

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

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

Когда лучше отдать предпочтение базе данных NoSQL?

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

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

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

Еще одно отличие баз данных NoSQL — сложность запросов. Базы данных NoSQL отлично работают с запросами к одной таблице. Однако в случае увеличения сложности запросов лучше воспользоваться реляционными базами данных. Базы данных NoSQL обычно не поддерживают сложные объединения, подзапросы и вложенные запросы в предложении WHERE.

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

В чем преимущества NoSQL перед другими базами данных?

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

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

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

Преимущества базы данных NoSQL

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

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

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

Четыре основных типа баз данных NoSQL:

Опробуйте Oracle NoSQL Database

Oracle NoSQL Database Cloud Service упрощает разработчикам создание приложений с использованием моделей баз данных на основе документов, столбцов и ключей-значений, которые обеспечивают предсказуемое время отклика в миллисекундах с репликацией данных для обеспечения высокой доступности. Этот сервис предоставляет транзакции ACID, возможность масштабирования без использования серверов, комплексную безопасность и низккую цену и оплату по мере использования.

Oracle NoSQL Database Cloud теперь является частью программы Oracle Cloud Free Tier, которая включает в себя бесплатную пробную версию с ограниченным сроком действия, позволяющую изучить широкий спектр облачных сервисов, а также набор всегда бесплатных сервисов с неограниченным сроком действия.

Источник

NoSQL базы данных: понимаем суть

В последнее время термин “NoSQL” стал очень модным и популярным, активно развиваются и продвигаются всевозможные программные решения под этой вывеской. Синонимом NoSQL стали огромные объемы данных, линейная масштабируемость, кластеры, отказоустойчивость, нереляционность. Однако, мало у кого есть четкое понимание, что же такое NoSQL хранилища, как появился этот термин и какими общими характеристиками они обладают. Попробуем устранить этот пробел.
Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

История.

Самое интересное в термине, что при том, что впервые он стал использоваться в конце 90-х, реальный смысл в том виде, как он используется сейчас, приобрел только в середине 2009. Изначально так называлась опенсорсная база данных, созданная Карло Строззи, которая хранила все данные как ASCII файлы и использовала шелловские скрипты вместо SQL для доступа к данным. С “NoSQL” в его нынешнем виде она ничего общего не имела.

В июне 2009 в Сан-Франциско Йоханом Оскарссоном была организована встреча, на которой планировалось обсудить новые веяния на ИТ рынке хранения и обработки данных. Главным стимулом для встречи стали новые опенсорсные продукты наподобие BigTable и Dynamo. Для яркой вывески для встречи требовалось найти емкий и лаконичный термин, который отлично укладывался бы в Твиттеровский хэштег. Один из таких терминов предложил Эрик Эванс из RackSpace — «NoSQL». Термин планировался лишь на одну встречу и не имел под собой глубокой смысловой нагрузки, но так получилось, что он распространился по мировой сети наподобие вирусной рекламы и стал де-факто названием целого направления в ИТ-индустрии. На конференции, к слову, выступали Voldemort (клон Amazon Dynamo), Cassandra, Hbase (аналоги Google BigTable), Hypertable, CouchDB, MongoDB.

Стоит еще раз подчеркнуть, что термин “NoSQL” имеет абсолютно стихийное происхождение и не имеет общепризнанного определения или научного учреждения за спиной. Это название скорее характеризует вектор развития ИТ в сторону от реляционных баз данных. Расшифровывается как Not Only SQL, хотя есть сторонники и прямого определения No SQL. Сгруппировать и систематизировать знания о NoSQL мире попытались сделать Прамод Садаладж и Мартин Фаулер в своей недавней книге “NoSQL Distilled”.

Характеристики NoSQL баз данных

Общих характеристик для всех NoSQL немного, так как под лэйблом NoSQL сейчас скрывается множество разнородных систем (самый полный, пожалуй, список можно найти на сайте http://nosql-database.org/). Многие характеристики свойственны только определенным NoSQL базам, это я обязательно упомяну при перечислении.

1. Не используется SQL

Имеется в виду ANSI SQL DML, так как многие базы пытаются использовать query languages похожие на общеизвестный любимый синтаксис, но полностью его реализовать не удалось никому и вряд ли удастся. Хотя по слухам есть стартапы, которые пытаются реализовать SQL, например, в хадупе (http://www.drawntoscalehq.com/ и http://www.hadapt.com/ )

2. Неструктурированные (schemaless)

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

Например, при переименовании поля в MongoDB:

Если мы меняем логику приложения, значит мы ожидаем новое поле также и при чтении. Но в силу отсутствия схемы данных поле totalSum отсутствует у других уже существующих объектов Order. В этой ситуации есть два варианта дальнейших действий. Первый — обойти все документы и обновить это поле во всех существующих документах. В силу объемов данных этот процесс происходит без каких-либо блокировок (сравним с командой alter table rename column), поэтому во время обновления уже существующие данные могут считываться другими процессами. Поэтому второй вариант — проверка в коде приложения — неизбежен:

А уже при повторной записи мы запишем это поле в базу в новом формате.

Приятное следствие отсутствия схемы — эффективность работы с разреженными (sparse) данными. Если в одном документе есть поле date_published, а во втором — нет, значит никакого пустого поля date_published для второго создано не будет. Это, в принципе, логично, но менее очевидный пример — column-family NoSQL базы данных, в которых используются знакомые понятия таблиц/колонок. Однако в силу отсутствия схемы, колонки не объявляются декларативно и могут меняться/добавляться во время пользовательской сессии работы с базой. Это позволяет в частности использовать динамические колонки для реализации списков.

У неструктурированной схемы есть свои недостатки — помимо упомянутых выше накладных расходов в коде приложения при смене модели данных — отсутствие всевозможных ограничений со стороны базы (not null, unique, check constraint и т.д.), плюс возникают дополнительные сложности в понимании и контроле структуры данных при параллельной работе с базой разных проектов (отсутствуют какие-либо словари на стороне базы). Впрочем, в условиях быстро меняющегося современного мира такая гибкость является все-таки преимуществом. В качестве примера можно привести Твиттер, который лет пять назад вместе с твиттом хранил лишь немного дополнительной информации (время, Twitter handle и еще несколько байтов метаинформации), однако сейчас в дополнение к самому сообщению в базе сохраняется еще несколько килобайт метаданных.

(Здесь и далее речь идет в-основном о key-value, document и column-family базах данных, graph базы данных могут не обладать этими свойствами).

3. Представление данных в виде агрегатов (aggregates).

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

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

В этом примере продемонстрированы агрегаты для стандартной концептуальной реляционной модели e-commerce “заказ — позиции заказа — платежи — продукт”. В обоих случаях заказ объединяется с позициями в один логический объект, при этом каждая позиция хранит в себе ссылку на продукт и некоторые его атрибуты, например, название (такая денормализация необходима, чтобы не запрашивать объект продукта при извлечении заказа — главное правило распределенных систем — минимум “джоинов” между объектами). В одном агрегате платежи объединены с заказом и являются составной частью объекта, в другом — вынесены в отдельный объект. Этим демонстрируется главное правило проектирования структуры данных в NoSQL базах — она должна подчиняться требованиям приложения и быть максимально оптимизированной под наиболее частые запросы. Если платежи регулярно извлекаются вместе с заказом — имеет смысл их включать в общий объект, если же многие запросы работают только с платежами — значит, лучше их вынести в отдельную сущность.

Многие возразят, заметив, что работа с большими, часто денормализованными, объектами чревата многочисленными проблемами при попытках произвольных запросов к данным, когда запросы не укладываются в структуру агрегатов. Что, если мы используем заказы вместе с позициями и платежами по заказу (так работает приложение), но бизнес просит нас посчитать, сколько единиц определенного продукта было проданно в прошлом месяце? В этом случае вместо сканирования таблицы OrderItem (в случае реляционной модели) нам придется извлекать заказы целиком в NoSQL хранилище, хотя большая часть этой информации нам будет не нужна. К сожалению, это компромисс, на который приходится идти в распределенной системе: мы не можем проводить нормализацию данных как в обычной односерверной системе, так как это создаст необходимость объединения данных с разных узлов и может привести к значительному замедлению работы базы
Плюсы и минусы обоих подходов я попытался сгруппировать в табличке:

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

4. Слабые ACID свойства.

Долгое время консистентность (consistency) данных была “священной коровой” для архитекторов и разработчиков. Все реляционные базы обеспечивали тот или иной уровень изоляции — либо за счет блокировок при изменении и блокирующего чтения, либо за счет undo-логов. С приходом огромных массивов информации и распределенных систем стало ясно, что обеспечить для них транзакционность набора операций с одной стороны и получить высокую доступность и быстрое время отклика с другой — невозможно. Более того, даже обновление одной записи не гарантирует, что любой другой пользователь моментально увидит изменения в системе, ведь изменение может произойти, например, в мастер-ноде, а реплика асинхронно скопируется на слейв-ноду, с которой и работает другой пользователь. В таком случае он увидит результат через какой-то промежуток времени. Это называется eventual consistency и это то, на что идут сейчас все крупнейшие интернет-компании мира, включая Facebook и Amazon. Последние с гордостью заявляют, что максимальный интервал, в течение которого пользователь может видеть неконсистентные данные составляют не более секунды. Пример такой ситуации показан на рисунке:

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

Логичный вопрос, который появляется в такой ситуации — а что делать системам, которые классически предъявляют высокие требования к атомарности-консистентности операций и в то же время нуждаются в быстрых распределенных кластерах — финансовым, интернет-магазинам и т.д? Практика показывает, что эти требования уже давно неактуальны: вот что сказал один разработчик финансовой банковской системы: “Если бы мы действительно ждали завершения каждой транзакции в мировой сети ATM (банкоматов), транзакции занимали бы столько времени, что клиенты убегали бы прочь в ярости. Что происходит, если ты и твой партнер снимаете деньги одновременно и превышаете лимит? — Вы оба получите деньги, а мы поправим это позже.” Другой пример — бронирование гостиниц, показанный на картинке. Онлайн-магазины, чья политика работы с данными предполагает eventual consistency, обязаны предусмотреть меры на случай таких ситуаций (автоматическое решение конфликтов, откат операции, обновление с другими данными). На практике гостиницы всегда стараются держать “пул” свободных номеров на непредвиденный случай и это может стать решением спорной ситуации.

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

5. Распределенные системы, без совместно используемых ресурсов (share nothing).

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

Это, возможно, главный лейтмотив развития NoSQL баз. С лавинообразным ростом информации в мире и необходимости ее обрабатывать за разумное время встала проблема вертикальной масштабируемости — рост скорости процессора остановился на 3.5 Ггц, скорость чтения с диска также растет тихими темпами, плюс цена мощного сервера всегда больше суммарной цены нескольких простых серверов. В этой ситуации обычные реляционные базы, даже кластеризованные на массиве дисков, не способны решить проблему скорости, масштабируемости и пропускной способности. Единственный выход из ситуации — горизонтальное масштабирование, когда несколько независимых серверов соединяются быстрой сетью и каждый владеет/обрабатывает только часть данных и/или только часть запросов на чтение-обновление. В такой архитектуре для повышения мощности хранилища (емкости, времени отклика, пропускной способности) необходимо лишь добавить новый сервер в кластер — и все. Процедурами шардинга, репликации, обеспечением отказоустойчивости (результат будет получен даже если одна или несколько серверов перестали отвечать), перераспределения данных в случае добавления ноды занимается сама NoSQL база. Вкратце представлю основные свойства распределенных NoSQL баз:

Репликация — копирование данных на другие узлы при обновлении. Позволяет как добиться большей масштабируемости, так и повысить доступность и сохранность данных. Принято подразделять на два вида:
master-slave:

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

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

Шардинг — разделение данных по узлам:

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

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

6. NoSQL базы в-основном оупенсорсные и созданы в 21 столетии.

Именно по второму признаку Садаладж и Фаулер не классифицировали объектные базы данных как NoSQL (хотя http://nosql-database.org/ включает их в общий список), так как они были созданы еще в 90-х и так и не снискали большой популярности.

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

Источник

SQL или NoSQL — вот в чём вопрос

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

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

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

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

Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных

Какую технологию выбрать? Ответ на этот вопрос зависит от особенностей проекта, о котором идёт речь.

О выборе SQL-баз данных

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

О выборе NoSQL-баз данных

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

Вот возможности, которые стали причиной популярности таких NoSQL баз данных, как MongoDB, CouchDB, Cassandra, HBase:

SQL и NoSQL

Начнём с некоторых ключевых концепций реляционных и нереляционных баз данных. Ниже показана база данных, содержащая сведения о взаимоотношениях людей. Вариант a — это бессхемная структура, построенная в виде графа, характерная для NoSQL-решений. Вариант b показывает, как те же данные можно представить в структурированном виде, типичном для SQL.
Что такое нереляционная база данных. Смотреть фото Что такое нереляционная база данных. Смотреть картинку Что такое нереляционная база данных. Картинка про Что такое нереляционная база данных. Фото Что такое нереляционная база данных
Два варианта представления данных

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

При реляционном подходе данные надо хранить в заранее спроектированной структуре, из которой эти данные потом можно извлекать. Например, используя оператор JOIN при выборке из двух таблиц:

Как более продвинутый пример, для демонстрации того, когда SQL предпочтительнее NoSQL, рассмотрим особенности применения в NoSQL-базах алгоритмов уплотнения. Проблема заключается в том, что в некоторых NoSQL-базах (например, в CouchDB и HBase) постоянно приходится формировать так называемые sstables — строковые таблицы в формате ключ-значение, отсортированные по ключу. В такие таблицы, которые сохраняются на диск, данные попадают из таблиц, хранящихся в памяти, при их переполнении и в других ситуациях. При интенсивной работе с базой создание таблиц, со временем, приводит к тому, что подсистема ввода-вывода устройства хранения данных становится узким местом для операций чтения данных. Как результат, чтение в NoSQL-базе происходит медленнее, чем запись, что сводит на нет одно из главных преимуществ нереляционных баз данных. Именно для того, чтобы уменьшить этот эффект, системы NoSQL используют, в фоновом режиме, алгоритмы уплотнения данных, пытаясь объединить множество таблиц в одну. Но и сама по себе эта операция весьма ресурсоёмка, система работает под повышенной нагрузкой.

Масштабируемость

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

Тип хранилища данныхСценарий использованияПримерРекомендации
Хранилище типа ключ-значениеПодходит для простых приложений, с одним типом объектов, в ситуациях, когда поиск объектов выполняют лишь по одному атрибуту.Интерактивное обновление домашней страницы пользователя в Facebook.Рекомендовано знакомство с технологией memcached.
Если приходится искать объекты по нескольким атрибутам, рассмотрите вариант перехода к хранилищу, ориентированному на документы.
Хранилище, ориентированное на документыПодходит для хранения объектов различных типов.Транспортное приложение, оперирующее данными о водителях и автомобилях, работая с которым надо искать объекты по разным полям, например — имя или дата рождения водителя, номер прав, транспортное средство, которым он владеет.Подходит для приложений, в ходе работы с которыми допускается реализация принципа «согласованность в конечном счёте» с ограниченными атомарностью и изоляцией. Рекомендуется применять механизм кворумного чтения для обеспечения своевременной атомарной непротиворечивости.
Система хранения данных с расширяемыми записямиБолее высокая пропускная способность и лучшие возможности параллельной обработки данных ценой слегка более высокой сложности, нежели у хранилищ, ориентированных на документы.Приложения, похожие на eBay. Вертикальное и горизонтальное разделение данных для хранения информации клиентов.Для упрощения разделения данных используются HBase или Hypertable.
Масштабируемая RDBMSИспользование семантики ACID освобождает программистов от необходимости работать на достаточно низком уровне, а именно, отвечать за блокировки и непротиворечивость данных, обрабатывать устаревшие данные, коллизии.Приложения, которым не требуются обновления или слияния данных, охватывающие множество узлов.Стоит обратить внимание на такие системы, как MySQL Cluster, VoltDB, Clustrix, ориентированные на улучшенное масштабирование.

Более подробное сравнение SQL и NoSQL можно найти в этом материале. Вот его основные положения. А именно, были проведены испытания трёх основных характеристик систем: параллельная обработка данных, работа с хранилищами информации, репликация данных. Возможности параллельной обработки оценивались путём анализа механизмов блокировки, управления параллельным доступом на основе многоверсионности, и ACID. Тестирование хранилищ охватывало и физические носители, и хранилища использующие оперативную память. Репликацию испытывали в синхронном и асинхронном режимах.

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

Индексация

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

И в SQL, и в NoSQL-базах индексы служат одной и той же цели — ускорить и оптимизировать извлечение данных. Но то, как именно они работают — различается из-за разных архитектур баз данных и особенностей хранения информации в базе. В то время, как SQL-индексы представлены в виде B-деревьев, которые отражают иерархическую структуру реляционных данных, в NoSQL базах данных они указывают на документы, или на части документов, между которыми, в основном, нет никаких отношений. Вот подробный материал на эту тему.

CRM-системы

CRM-приложения — это один из лучших примеров систем, для которых характерны огромные объёмы ежедневно обрабатываемых данных и очень большое количество транзакций. Все разработчики таких приложений используют и SQL, и NoSQL базы данных. И, хотя большая часть данных транзакций всё ещё хранится в SQL-базах, применение находят общедоступные системы класса DBaaS (data-base-as-a-service, база данных как сервис), наподобие AWS DynamoDB и Azure DocumentDB, в результате, серьёзная нагрузка по обработке данных может быть перенесена в облачные NoSQL-базы.

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

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

Итоги

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

Вот признаки проектов, для которых идеально подойдут SQL-базы:

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

Источник

Добавить комментарий

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