NoSQL
Что это такое
NoSQL — собирательное название для хранилищ, которые отказались от одного или нескольких свойств реляционной модели в обмен на что-то другое. Документы приходят на смену строкам, выборка по ключу — запросам, графы — соединениям, а ослабленная согласованность — распределённым транзакциям. Каждое семейство появилось потому, что определённый шаблон доступа или масштаб неудобен в реляционном движке, и каждое из них — компромисс, а не улучшение.
Почему это важно
Полезный вопрос звучит не «реляционное или NoSQL», а «какое хранилище подходит тому, как эти данные читают». Кэш сессий, каталог товаров с разнородными полями и социальный граф имеют между собой мало общего; однако выбор одного нереляционного хранилища для всех трёх повторяет ту же ошибку, что и выбор одного реляционного для всех трёх. Цена неверного выбора высока в обе стороны. Реляционная схема, которой приходится поддерживать гибкую форму документа, превращается в таблицу nullable-столбцов, а документное хранилище для данных с настоящими связями — в задачу о соединениях, которую решает код приложения.
Что в этом треке
- Когда реляционное хранилище плохо подходит (05-backend-data/13-nosql/01-when-a-relational-store-fits-badly) — формы и шаблоны доступа, из-за которых появляются альтернативы.
- Семейства нереляционных хранилищ (05-backend-data/13-nosql/02-the-families-of-non-relational-stores) — документные, ключ-значение, ширококолоночные и графовые хранилища и то, для чего каждое нужно.
Предварительные требования
- SQL и реляционные базы данных (05-backend-data/07-sql-relational-databases)
Что читать дальше
- SQL и реляционные базы данных (05-backend-data/07-sql-relational-databases) — модель, с которой сравниваются эти альтернативы, поэтому читайте её первой.
- MongoDB (05-backend-data/18-mongodb) — самое распространённое документное хранилище как конкретный случай.
- Кэширование (Redis) (05-backend-data/16-caching-redis) — хранилище ключ-значение, чаще всего применяемое вовсе не как основное.