Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Code Ninja: NoSQL

Оригинал: Code Ninja: NoSQL
Автор: Ben Everard
Дата публикации: 30 октября 2015 г.
Перевод: A.Панин
Дата перевода: 23 января 2016 г.

При возникновении необходимости в работе с большими объемами данных следует обратить внимание на NoSQL - данная технология упрочит будущее вашего проекта, а также увеличит ваши шансы на успешное трудоустройство!

Для чего это нужно?

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

Перед рассмотрением баз данных NoSQL, я предлагаю обсудить базы данных в общем. Грубо говоря, базой данных называется любой программный компонент, позволяющий сохранять и извлекать данные. Большинство популярных баз данных использует структурный язык запросов (Structured Query Language, SQL) для доступа к данным и их модификации. Базы данных, использующие язык SQL, относятся к классу реляционных баз данных. В реляционных базах данных все данные хранятся в таблицах, которые связаны с помощью ссылок, известных как ключи. Каждая из таблиц содержит набор столбцов, причем каждый столбец имеет ассоциированный тип данных.

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

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

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

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

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

Командная оболочка MongoDB позволяет создавать простые программы для взаимодействия с базой данных на языке программирования JavaScript

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

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

Знакомство с MongoDB

Рассмотрим одно из наиболее популярных хранилищ документов, MongoDB. В этой базе данных данные хранятся в рамках документов стиля JSON. Каждый документ может быть сохранен в базе данных вне зависимости от его формата.

Для того, чтобы начать работу с этой базой данных, вам придется в первую очередь установить пакет программного обеспечения с компонентами MongoDB. В Ubuntu и производных дистрибутивах соответствующий пакет программного обеспечения носит имя mongodb, поэтому вы можете установить его с помощью команды:

sudo apt-get install mongodb

После окончания процесса установки вы можете выполнить следующую команду:

mongo

Сразу же после этого вы окажетесь в командной оболочке MongoDB. В ней используется урезанная версия языка программирования JavaScript, который может использоваться и при разработке программного обеспечения, но мы не будем подробно рассматривать этот вопрос в рамках данной статьи. В качестве примера давайте добавим в базу данных несколько документов в различных форматах, после чего извлечем их из нее:

db.test.save({writer: "Ben", title: "Code Ninja: MongoDB"})
db.test.save({issue: "11", mag: "Linux Voice"})
db.test.find();

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

Вы также можете извлечь определенные документы, добавляя параметры функции find. Например:

db.test.find({writer: "Ben"});

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

Связывание документов

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

mag = db.test.findOne({issue: "11"});
db.test.save({writer: "Ben", issue: mag, title: "DistroHopper"});
db.test.save({writer: "Ben", issue_id: mag._id, title: "DistroHopper"});

Данные команды создают два различных документа с названиями DistroHopper, один из которых связан с помощью ссылки (ручной ссылки в терминах MongoDB), а другой - встроен. Вы можете ознакомится с различиями после того, как извлечете их:

Для того, чтобы оценить возможности базы данных MongoDB совершенно не обязательно устанавливать ее на свой компьютер. Существует сетевая версия командной оболочки MongoDB, которая (вместе с руководством) доступна по адресу http://try.mongodb.org.

Для того, чтобы оценить возможности базы данных MongoDB совершенно не обязательно устанавливать ее на свой компьютер. Существует сетевая версия командной оболочки MongoDB, которая (вместе с руководством) доступна по адресу http://try.mongodb.org

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

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

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