NoSQL Введение

NoSQL (NoSQL = Not Only SQL) означает «не только SQL».

В современных вычислительных системах огромное количество данных ежедневно генерируется в сети.

Большая часть этих данных обрабатывается системами управления реляционными базами данных (RDBMS). В 1970 году работа Э.Ф. Кодда по реляционной модели «Реляционная модель данных для больших совместно используемых банков данных» сделала моделирование данных и программирование приложений проще.

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

NoSQL — это революционно новое движение в области баз данных. Оно было предложено на раннем этапе и к 2009 году набирало всё большую популярность. Сторонники NoSQL выступают за использование нереляционного хранения данных. По сравнению с подавляющим использованием реляционных баз данных эта концепция, несомненно, привносит совершенно новое мышление.

. Эрик Эванс из Rackspace вновь предложил концепцию NoSQL. В то время NoSQL в основном обозначал нереляционные распределённые шаблоны проектирования баз данных, не обеспечивающие ACID.

Транзакция по-английски называется «transaction», подобно транзакциям в реальном мире. Она имеет следующие четыре характеристики:

1. A (Атомарность)

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

Например, при банковском переводе 100 yuan со счёта A на счёт B есть два шага: 1) взять 100 yuan со счёта A; 2) положить 100 yuan на счёт B. Эти два шага должны быть выполнены вместе или не выполнены вовсе. Если выполнен только первый шаг, а второй не удался, денег необъяснимо не хватит на 100 yuan.

2. C (Согласованность)

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

Например, при ограничении целостности a+b=10, если транзакция изменяет a, то b также должно быть изменено так, чтобы после транзакции a+b=10 по-прежнему выполнялось, иначе транзакция завершается неудачей.

3. I (Изоляция)

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

Например, если транзакция переводит 100 юаней со счёта A на счёт B и до завершения этой транзакции B в этот момент запросит свой счёт, он не увидит только что добавленные 100 юаней.

4. D (долговечность)

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


Распределённые системы

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

Распределённая система — это программная система, построенная поверх сети. Благодаря особенностям программного обеспечения распределённые системы обладают высокой степенью связности и прозрачности.

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

Распределённые системы могут применяться на различных платформах, таких как ПК, рабочие станции, локальные сети и глобальные сети.


Преимущества распределённых вычислений

Надёжность (отказоустойчивость):

Важным преимуществом распределённых вычислительных систем является надёжность. Сбой системы на одном сервере не влияет на другие серверы.

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

В распределённой вычислительной системе можно добавлять дополнительные машины по мере необходимости.

Совместное использование ресурсов:

Совместное использование данных — важное приложение, например банковские системы и системы резервирования.

Гибкость:

Поскольку система очень гибкая, легко устанавливать, внедрять и отлаживать новые сервисы.

Более высокая скорость:

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

Открытая система:

Поскольку это открытая система, доступ к сервису можно получить локально или удалённо.

Более высокая производительность:

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


Недостатки распределённых вычислений

Устранение неполадок:

Устранение неполадок и диагностика проблем.

Программное обеспечение:

Недостаточная поддержка программного обеспечения — крупный недостаток распределённых вычислительных систем.

Сеть:

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

Безопасность:

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


Что такое NoSQL?

NoSQL — это нереляционные базы данных. NoSQL иногда также называют аббревиатурой Not Only SQL. Это общий термин для систем управления базами данных, отличных от традиционных реляционных баз данных.

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

Зачем использовать NoSQL?

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


Примеры

Социальные сети:

Каждая запись: UserID1, UserID2
Отдельные записи: UserID, first_name,last_name, age, gender,...
Задача: найти всех друзей друзей друзей ... друзей данного пользователя.

Страницы Википедии:

Большая коллекция документов
Сочетание структурированных и неструктурированных данных
Задача: извлечь все страницы, касающиеся легкой атлетики летних Олимпийских игр до 1950 года.

RDBMS против NoSQL

РСУБД
- Высокоорганизованные структурированные данные
- Язык структурированных запросов (SQL)
- Данные и связи хранятся в отдельных таблицах.
- Язык манипулирования данными, язык определения данных
- Строгая согласованность
- Базовые транзакции

NoSQL
- Обозначает "Not Only SQL"
- Нет декларативного языка запросов
- Нет предопределённой схемы
- Хранение пар ключ-значение, колоночное хранение, документное хранение, графовые базы данных
- Согласованность в конечном счёте, а не свойства ACID
- Неструктурированные и непредсказуемые данные
- Теорема CAP
- Высокая производительность, высокая доступность и масштабируемость


Краткая история NoSQL

Термин NoSQL впервые появился в 1998 году. Это была легковесная реляционная база данных с открытым исходным кодом, разработанная Карло Строцци, которая не предоставляла функциональность SQL.

В 2009 году Йохан Оскарссон из Last.fm инициировал обсуждение распределённых баз данных с открытым исходным кодом

Конференция "no:sql(east)", состоявшаяся в Атланте в 2009 году, стала вехой; её слоган — "select fun, profit from real_world where relational=false;". Поэтому наиболее распространённая трактовка NoSQL — «нереляционные», подчёркивающая преимущества хранилищ «ключ — значение» и документных баз данных, а не просто противопоставление RDBMS.


Теорема CAP

В информатике теорема CAP, также известная как теорема Брюера, утверждает, что для распределённой вычислительной системы невозможно одновременно удовлетворить следующие три требования:

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

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

Поэтому согласно теореме CAP базы данных NoSQL делятся на три категории: системы, удовлетворяющие принципу CA, системы, удовлетворяющие принципу CP, и системы, удовлетворяющие принципу AP:

  • CA — одноточечный кластер; системы, удовлетворяющие согласованности и доступности, обычно не обладают высокой масштабируемостью.
  • CP — системы, удовлетворяющие согласованности и устойчивости к разделению, обычно не отличаются особо высокой производительностью.
  • AP — системы, удовлетворяющие доступности и устойчивости к разделению, обычно могут иметь более низкие требования к согласованности.


Преимущества/недостатки NoSQL

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

  • - Высокая масштабируемость
  • - Распределённые вычисления
  • - Низкая стоимость
  • - Гибкая архитектура, полуструктурированные данные
  • - Отсутствие сложных связей

Недостатки:

  • - Отсутствие стандартизации
  • - Ограниченная функциональность запросов (пока что)
  • - Согласованность в конечном счёте — неинтуитивное программирование

BASE

BASE: Basically Available, Soft-state, Eventually Consistent. Определено Эриком Брюером.

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

BASE — это принцип слабых требований, который базы данных NoSQL обычно предъявляют к доступности и согласованности:

  • Базовая доступность -- в основном доступна
  • Мягкое состояние -- мягкое состояние/гибкая транзакция. «Мягкое состояние» можно понимать как «без установления соединения», тогда как «жёсткое состояние» — это «с установлением соединения»
  • Согласованность в конечном счёте -- согласованность в конечном счёте, которая также является конечной целью ACID.

ACID против BASE

ACID BASE
Атомарность (Atomicity) Базовая доступность (Basically Available)
Согласованность (Consistency) Мягкое состояние/гибкая транзакция (Soft state)
Изоляция (Isolation) Согласованность в конечном счёте (Eсогласованность в конечном счёте)
Долговечность (Dдолговечность)  

Классификация NoSQL баз данных

Type Некоторые представители

Характеристики Колоночное хранилище

Hbase

Cassandra

Hypertable

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

Хранилище документов

MongoDB

CouchDB

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

Хранилище «ключ-значение»

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

Значение можно быстро получить по ключу. Вообще говоря, хранилищу безразличен формат значения, и оно принимает его как есть. (Redis включает другие функции)

Хранилище графов

Neo4J

FlockDB

Лучшее хранилище для графовых связей. Использование традиционных реляционных баз данных для решения этой задачи привело бы к низкой производительности и неудобству проектирования и использования.

Объектное хранилище

db4o

Versant

Управление базой данных через синтаксис, аналогичный объектно-ориентированному, и доступ к данным через объекты.

База данных XML

Berkeley DB XML

BaseX

Эффективно хранит XML-данные и поддерживает внутренний синтаксис XML-запросов, такой как XQuery, XPath.


Кто это использует

Многие компании уже используют NoSQL:
  • Google
  • Facebook
  • Mozilla
  • Adobe
  • Foursquare
  • Linked
  • Digg
  • McGraw-Hill Education
  • Vermont Public Radio
Другие расширения