NoSQL — неспроста	ли
это	"ЖЖЖ"?
Даниил	Подольский
CTO	inCaller.org
Почему	это	важно
•Обчитавшиеся рекламы	руководители	
представляют	собой	проблему
Почему	это	важно
•Обчитавшиеся рекламы	руководители	
представляют	собой	проблему
•Обчитавшиеся форумов	и	чатиков инженеры	
представляют	собой	еще	большую	проблему
Почему	это	важно
•Обчитавшиеся рекламы	руководители	
представляют	собой	проблему
•Обчитавщиеся форумов	и	чатиков инженеры	
представляют	собой	еще	большую	проблему
•NoSQL	– мощное	и	эффективное	техническое	
средство,	хоть	и	предъявляет	повышенные	
требования	ко	квалификации	разработчиков
Что	такое	NoSQL
Что	такое	NoSQL?
А	что	такое	SQL?
Что	такое	SQL
•Язык запросов AKA	Structured	Query	Language
Что	такое	SQL
•Язык запросов AKA	Structured	Query	Language
•РСУБД	AKA	RDBMS
•Типизация
•Таблицы
•Связи AKA	foreign keys
Что	такое	SQL
•Язык запросов AKA	Structured	Query	Language
•РСУБД	AKA	RDBMS
•Типизация
•Таблицы
•Связи AKA	foreign keys
•Транзакции
Что	такое	SQL
•Язык запросов AKA	Structured	Query	Language
•РСУБД	AKA	RDBMS
•Типизация
•Таблицы
•Связи AKA	foreign keys
•Транзакции
•One server to rule them all
Так	что	же	такое	NoSQL
• Нет	языка	запросов
• Это	полуправда!
Так	что	же	такое	NoSQL
• Нет	языка	запросов
• Это	полуправда!
• Нет	жесткой	типизации
• CREATE TABLE nosql (
key BIGINT,
value BLOB
);
Так	что	же	такое	NoSQL
• Нет	языка	запросов
• Это	полуправда!
• Нет	жесткой	типизации
• CREATE TABLE nosql (
key BIGINT,
value BLOB
);
• No	relations,	все	строки	– сами	по	себе
• Денормализация как	норма	жизни
Так	что	же	такое	NoSQL
•Все	вышеперечисленное	позволяет	NoSQL	
быть	быстрее	SQL
Так	что	же	такое	NoSQL
•Все	вышеперечисленное	позволяет	NoSQL	
быть	быстрее	SQL
•И	это	даже	правда
Так	что	же	такое	NoSQL
•Все	вышеперечисленное	позволяет	NoSQL	
быть	быстрее	SQL
•И	это	даже	правда
•Местами!
Why	NoSQL	is	sexy
•Скорость
Why	NoSQL	is	sexy
•Скорость
•Возможность	строить	распределенные	
системы
Why	NoSQL	is	sexy
•Скорость
•Возможность	строить	распределенные	
системы
•Возможность	распараллеливать	нагрузку
Why	NoSQL	is	sexy
•Скорость
•Возможность	строить	распределенные	
системы
•Возможность	распараллеливать	нагрузку
•Возможность	жертвовать	консистентностью
Why	NoSQL	is	sexy
•Скорость
•Возможность	строить	распределенные	
системы
•Возможность	распараллеливать	нагрузку
•Возможность	жертвовать	консистентностью
Why	NoSQL	is	sexy	not	so	much
• Никаких	транзакций
• ACID- транзакции	заявлены,	но	распространяются	они	на	обновление	
одной	строки!
Why	NoSQL	is	sexy	not	so	much
• Никаких	транзакций
• ACID- транзакции	заявлены,	но	распространяются	они	на	обновление	
одной	строки!
• Никаких	сложных	запросов
• Для	распределенной	системы	они	невозможны
• А	нераспределенная	не	нужна
Why	NoSQL	is	sexy	not	so	much
• Никаких	транзакций
• ACID- транзакции	заявлены,	но	распространяются	они	на	обновление	
одной	строки!
• Никаких	сложных	запросов
• Для	распределенной	системы	они	невозможны
• А	нераспределенная	не	нужна
• Сомнительная	поддержка	вторичных	индексов
• Это	чрезвычайно	важно
Why	NoSQL	is	sexy	not	so	much
• Никаких	транзакций
• ACID- транзакции	заявлены,	но	распространяются	они	на	обновление	
одной	строки!
• Никаких	сложных	запросов
• Для	распределенной	системы	они	невозможны
• А	нераспределенная	не	нужна
• Сомнительная	поддержка	вторичных	индексов
• Это	чрезвычайно	важно
• Никаких	связей
• Денормализация как	норма	жизни
• И	скан	по	resultset
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без:
•Маленький	dataset
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без:
•Маленький	dataset
•99%	read	1%	write
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без:
•Маленький	dataset
•99%	read	1%	write
•Низкие	требования	к	производительности
•Низкие	- это	меньше	100KUps
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без:
•Маленький	dataset
•99%	read	1%	write
•Низкие	требования	к	производительности
•Низкие	- это	меньше	100KUps
•Высокие	требования	к	консистентности
•NoSQL база	не	консистентна никогда!
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	обойтись без:
•Маленький	dataset
•99%	read	1%	write
•Низкие	требования	к	производительности
•Низкие	- это	меньше	100KUps
•Высокие	требования	к	консистентности
•NoSQL база	не	консистентна никогда!
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	внедрять
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	внедрять:
•Большой	dataset с	низкой	связанностью
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	внедрять:
•Большой	dataset с	низкой	связанностью
•Высокие	требования	к	доступности	данных
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	внедрять:
•Большой	dataset с	низкой	связанностью
•Высокие	требования	к	доступности	данных
•Высокие	требования	к	latency
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	точно	надо	внедрять:
•Большой	dataset с	низкой	связанностью
•Высокие	требования	к	доступности	данных
•Высокие	требования	к	latency
•Высокая	вероятность	необходимости	
постоянного	расширения	кластера
•Как	ни	старайся,	а	РСУБД	шардируется плохо
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	можно	попробовать
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	можно	попробовать
•Никогда!
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	можно	попробовать
•Никогда!
Основы	проектирования	систем
с	использованием	NoSQL
•Когда	можно	попробовать
•Никогда!
•Это	как	с	женитьбой…
Основы	внедрения	NoSQL
• “MySQL тоже	NoSQL”	AKA	“PostgreSQL тоже	NoSQL”
Основы	внедрения	NoSQL
• “MySQL тоже	NoSQL”	AKA	“PostgreSQL тоже	NoSQL”
• Не	ведитесь
Основы	внедрения	NoSQL
• “MySQL тоже	NoSQL”	AKA	“PostgreSQL тоже	NoSQL”
• Не	ведитесь
• Ну	разве	что	вам	просто	нравится	идея
Основы	внедрения	NoSQL
• “MySQL тоже	NoSQL”	AKA	“PostgreSQL тоже	NoSQL”
• Не	ведитесь
• Ну	разве	что	вам	просто	нравится	идея
• Сказ	о	том,	как	программист	Александр	боролся	за	
свободу	самовыражения,	и	об	использовании	
Anemometer	как	инструмента	свободоподавления
Основы	внедрения	NoSQL
• “MySQL тоже	NoSQL”	AKA	“PostgreSQL тоже	NoSQL”
• Не	ведитесь
• Ну	разве	что	вам	просто	нравится	идея
• Сказ	о	том,	как	программист	Александр	боролся	за	
свободу	самовыражения,	и	об	использовании	
Anemometer	как	инструмента	свободоподавления
• РСУБД	захватили	мир	не	по	нашей	тупости,	а	
потому,	что	эта	парадигма	наиболее	гибкая	из	
известных
Основы	внедрения	NoSQL
•In-memory,	одна	node
Основы	внедрения	NoSQL
•In-memory,	одна	node
•Возьмите	memcache
Основы	внедрения	NoSQL
•In-memory,	одна	node
•Возьмите	memcache
•Хотите	персистентности - возьмите	Tarantool
Основы	внедрения	NoSQL
•In-memory,	одна	node
•Возьмите	memcache
•Хотите	персистентности - возьмите	Tarantool
•Да	возьмите	что	угодно	- результат	не	
изменится
Основы	внедрения	NoSQL
•In-memory,	одна	node
•Возьмите	memcache
•Хотите	персистентности - возьмите	Tarantool
•Да	возьмите	что	угодно	- результат	не	
изменится
•Даже	и	репликацию	можете	включить
•Сможете	масштабировать	чтение
Основы	внедрения	NoSQL
•In-memory,	несколько нод,	replication	factor	1
Основы	внедрения	NoSQL
•In-memory,	несколько нод,	replication	factor	1
•Возьмите memcache
Основы	внедрения	NoSQL
•In-memory,	несколько нод,	replication	factor	1
•Возьмите memcache
•Потому,	что вам ничто не поможет
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
•Вот тут,	собственно,	и начинается NoSQL
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
•Вот тут,	собственно,	и начинается NoSQL
•Write-optimized	и read-optimized
•Что это
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
•Вот тут,	собственно,	и начинается NoSQL
•Write-optimized	и read-optimized
•Что это
•Почему это важно
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
•Вот тут,	собственно,	и начинается NoSQL
•Write-optimized	и read-optimized
•Что это
•Почему это важно
•Почему нельзя сделать both-optimized
Основы	внедрения	NoSQL
•Несколько нод,	replication	factor	>	1
•Вот тут,	собственно,	и начинается NoSQL
•Write-optimized	и read-optimized
•Что это
•Почему это важно
•Почему нельзя сделать both-optimized
•Репликация,	ребалансинг,
восстановление целостности
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
• OpenSource с 2014	года
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
• OpenSource с 2014	года
• Прекрасный GUI	контроля состояния кластера
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
• OpenSource с 2014	года
• Прекрасный GUI	контроля состояния кластера
• Отлично работающие ребалансинг и восстановление
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
• OpenSource с 2014	года
• Прекрасный GUI	контроля состояния кластера
• Отлично работающие ребалансинг и восстановление
• Индексы всегда в памяти,	данные возможно в
памяти
Немного	практического	опыта
• Aerospike	как яркий представитель read-optimized	key-
value	хранилищ
• OpenSource с 2014	года
• Прекрасный GUI	контроля состояния кластера
• Отлично работающие ребалансинг и восстановление
• Индексы всегда в памяти,	данные возможно в
памяти
• Достаточная производительность:	150KUps,	400KRps	
на кластере из 4-х	нод
Немного	практического	опыта
•Aerospike: ложка	дегтя,	или	сказ	о	Григории	
девопсе и	15	minutes	power	outage
Немного	практического	опыта
•Aerospike: ложка	дегтя,	или	сказ	о	Григории	
девопсе и	15	minutes	power	outage
•Не	надо	использовать	Aerospike для	больших	
объемов	данных
Немного	практического	опыта
•Aerospike: ложка	дегтя,	или	сказ	о	Григории	
девопсе и	15	minutes	power	outage
•Не	надо	использовать	Aerospike для	больших	
объемов	данных
•А	еще	у	Aerospike очень	медленное	
обновление	вторичных	индексов
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
• Написана на Java
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
• Написана на Java
• Индексы хранятся на диске
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
• Написана на Java
• Индексы хранятся на диске
• Вторичные индексы обновляются быстро
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
• Написана на Java
• Индексы хранятся на диске
• Вторичные индексы обновляются быстро
• Работающие средства восстановления целостности и
ребалансинга
Немного	практического	опыта
• Cassandra	как яркий представитель write-optimized	NoSQL	
СУБД
• OpenSource
• Написана на Java
• Индексы хранятся на диске
• Вторичные индексы обновляются быстро
• Работающие средства восстановления целостности и
ребалансинга
• Mmaped files
Немного	практического	опыта
•Cassandra:	ложка	дегтя,	или	сказ	о	
Константине	девопсе и	100%	disk	utilisation
Немного	практического	опыта
•Cassandra:	ложка	дегтя,	или	сказ	о	
Константине	девопсе и	100%	disk	utilisation
•Дисковый cache	на SSD	- наше все
Немного	практического	опыта
•Cassandra:	ложка	дегтя,	или	сказ	о	
Константине	девопсе и	100%	disk	utilisation
•Дисковый cache	на SSD	- наше все
•No	GUI	for	version	3	yet
Итого
•Если	есть	шанс	обойтись	без	NoSQL –
обойдитесь	без	него
•Личное	мнение	докладчика,	конечно	же
Итого
•Если	есть	шанс	обойтись	без	NoSQL –
обойдитесь	без	него
•Личное	мнение	докладчика,	конечно	же
•Если	шанса	нет	- выберите	правильный	продукт
•Не	все	NoSQL базы	полезны	одинаково
Итого
•Если	есть	шанс	обойтись	без	NoSQL –
обойдитесь	без	него
•Личное	мнение	докладчика,	конечно	же
•Если	шанса	нет	- выберите	правильный	продукт
•Не	все	NoSQL базы	полезны	одинаково
•Если	ваш	паттерн	ляжет	на	парадигму	NoSQL
хорошо	- результаты	будут	существенно	лучше,	чем	
при	использовании	РСУБД
Вопросы?

NoSQL — неспроста ли это "ЖЖЖ"?