NoSQL - что это? Новомодное словечко или современных подход, который позволяет обслуживать сотни миллионов запросов в день без использования супер-компьютеров? Почему все крупнейшие интернет-проекты используют базы данных, которые не поддерживают операций по связыванию данных, не гарантируют ACID при проведении транзакций и не имеют фиксированных схем хранения данных? В данном докладе будут проанализированы области применения NoSQL, раскрыты основные принципы, которые используются для хранения записей в неряционных БД, а также приведены характеристики по которым можно классифицировать сотни существующих на данный момент NoSQL базы данных.
1.
NoSQL – взрыв возможностей
Алексей Солнцев, iForum, 17 апреля 2012
2. О себе
10 лет в индустрии
информационных технологий
Solution Architect в компании
Infopulse Украина
Agile волонтёр
Организатор и координатор
краудсорсинг-переводов книг на
русский язык
Алексей
Тренер в центре XP Injection
Солнцев
@a_solntsev
9. Информация в фактах
Обрабатывает Хранит свыше Получает 160 За 20 минут
24 петабайта 2 миллиардов миллионов добавляют 10
информации в фотографий твиттов в миллионов
день месяц комментариев
@a_solntsev
10. Проблемы цифровой вселенной
Объёмы данных
Связанность данных
Слабая структурируемость данных
Обработка данных при помощи
независимых сервисов
@a_solntsev
11. Ограничения реляционных СУБД
Фиксированная структура
Разряженные таблицы
JOIN плохо масштабируется
Блокировки при записи
Работа с медленными дисками
@a_solntsev
23. Key -Value
Ключ – DHT Кэширование
Хранение сессий
Value – String, Set Хранение логов
Примитивные операции In-memory
Сохранение на
Нет составных запросов диск
@a_solntsev
25. Amazon Dynamo и Basho Riak
Решение для
систем, требующих
высокую степень
доступности
Децентрализованная, расп
ределённая база данных
@a_solntsev
28. Согласованность «в конечном итоге»
Дано N – количество копий
R – кворум на чтение
W – кворум на запись
Если W > N/2
R+W > N
Тогда При чтении получите
последнюю версию
Иначе Получите согласованность
в «конечном итоге»
29. Согласованность и скорость ответа
Быстро, но не совсем надёжно
R = 1, W = 1, N = 3
Надёжно, но медленно
R = 2, W = 3, N = 4
30. Google BigTable и Apache HBase
Хранение огромных
объёмов данных
Обработка огромных
объёмов данных
Анализ огромных объёмов
данных
@a_solntsev
36. Схемы и запросы
Схема Запросы
MySQL Фиксированная Динамические
CouchDB Динамическая Фиксированные
MongoDB Динамическая Динамические
37. Формат документов
{
"_id" : ObjectId("497ce96f395f2f052a494fd4"),
"title" : "Awesome Blog Post",
"body" : "Text text text text, text text text ...",
"created": "Tue, 3 Jan 2011 11:13:56 GMT",
"tags" : [ "css", "javascipt", "jquery" ],
"comments" : [
{
"name" : "Kelly Glover"
"created" : "Tue, 22 Jan 2011 2:22:32 GMT",
"text" : "This is a very good ..."
},
],
"shortUrl" : "awesome-blog-post"
}
38. API для запросов
// найти записи по условию
db.stat.find({clicks: {$gt: 10} });
// найти все записи и отсортировать
db.users.find({}).sort({name: 1});
//найти все записи, пропустить первые 20 записей
db.users.find().skip(20).limit(10);