Impact Mapping: планирование
разработки продукта с учетом
бизнес целей
Александр Бындю (byndusoft.com)
SQL vs NoSQL:

проблема выбора
Даниил Подольский

CTO inCaller.org
Немного о докладчике
• Системный администратор со стажем 20+ лет
Немного о докладчике
• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
Немного о докладчике
• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
Немного о докладчике
• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
• Это немного суетно
Немного о докладчике
• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
• Это немного суетно
• Но позволяет набрать весьма разнообразный
опыт
Введение в проблематику
• Назначение баз данных
Введение в проблематику
• Назначение баз данных
• Что такое SQL?
Введение в проблематику
• Назначение баз данных.
• Что такое SQL?
• Что такое NoSQL?
Введение в проблематику
• Назначение баз данных.
• Что такое SQL?
• Что такое NoSQL?
• В чем разница?
Введение в проблематику
• Назначение баз данных.
• Что такое SQL?
• Что такое NoSQL?
• В чем разница?
• Задача выбора как задача поиска наименьшего
зла.
Disclamer:

опыт докладчика ограничен
• Mysql
Disclamer:

опыт докладчика ограничен
• Mysql
• Postgresql
Disclamer:

опыт докладчика ограничен
• Mysql
• Postgresql
• Cassandra
Disclamer:

опыт докладчика ограничен
• Mysql
• Postgresql
• Cassandra
• Aerospike
Опыт докладчика ограничен:

почему MySQL
• Прост
Опыт докладчика ограничен:

почему MySQL
• Прост
• Быстр
Опыт докладчика ограничен:

почему MySQL
• Прост
• Быстр
• Всем знаком
Опыт докладчика ограничен:

почему MySQL
• Прост
• Быстр
• Всем знаком
• Вариант по умолчанию
• Буква М в аббревиатуре LAMP
Опыт докладчика ограничен:

почему PostgreSQL
• Сложен
Опыт докладчика ограничен:

почему PostgreSQL
• Сложен
• Близок по набору features к коммерческим базам
• Некоторые вещи на MySQL сделать просто
нельзя
Опыт докладчика ограничен:

почему Cassandra
• Write-Optimised
Опыт докладчика ограничен:

почему Cassandra
• Write-Optimised
• Отлично масштабируется
Опыт докладчика ограничен:

почему Cassandra
• Write-Optimised
• Отлично масштабируется
• Быстрые вторичные индексы
Опыт докладчика ограничен:

почему Aerospike
• Read-Optimised
Опыт докладчика ограничен:

почему Aerospike
• Read-Optimised
• Высокая производительность
Опыт докладчика ограничен:

почему Aerospike
• Read-Optimised
• Высокая производительность
• И чтения, и записи
Опыт докладчика ограничен:

почему Aerospike
• Read-Optimised
• Высокая производительность
• И чтения, и записи
• Отлично масштабируется
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
• Таблицы
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
• Таблицы
• Индексы
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
• Таблицы
• Индексы
• Foreign keys
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
• Таблицы
• Индексы
• Foreign keys
• Транзакции и логи
Немного теории

анатомия SQL AKA РСУБД
• One server to rule them all
• Sharded RDBMS is not RDBMS
• Таблицы
• Индексы
• Foreign keys
• Транзакции и логи
• Репликация
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
• Строки
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
• Строки
• Иногда - таблицы
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
• Отказоустойчивость
Немного теории

анатомия NoSQL AKA Key-Value
• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
• Отказоустойчивость
• Replication factor 3 is a minimum
Рациональный подход:

матрица features как путь к самообману
• Свойства РСУБД
Рациональный подход:

матрица features как путь к самообману
• Свойства РСУБД
• Транзакционность и консистентность
Рациональный подход:

матрица features как путь к самообману
• Свойства РСУБД
• Транзакционность и консистентность
• Связи и контроль целостности
Рациональный подход:

матрица features как путь к самообману
• Свойства РСУБД
• Транзакционность и консистентность
• Связи и контроль целостности
• Локальность данных и скорость
Рациональный подход:

матрица features как путь к самообману
• Свойства NoSQL
Рациональный подход:

матрица features как путь к самообману
• Свойства NoSQL
• Горизонтальная масштабируемость
Рациональный подход:

матрица features как путь к самообману
• Свойства NoSQL
• Горизонтальная масштабируемость
• Отказоустойчивость
Рациональный подход:

матрица features как путь к самообману
• Свойства NoSQL
• Горизонтальная масштабируемость
• Отказоустойчивость
• Простота и скорость
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства РСУБД
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства РСУБД
• Немасштабируемость
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства РСУБД
• Немасштабируемость
• SPoF
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства РСУБД
• Немасштабируемость
• SPoF
• Блокировки и скорость
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства NoSQL
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства NoSQL
• Когда-нибудь консистентность
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства NoSQL
• Когда-нибудь консистентность
• Ни блокировок, ни автоинкремента
Рациональный подход:

матрица caveats как путь к фрустрации
• Свойства NoSQL
• Когда-нибудь консистентность
• Ни блокировок, ни автоинкремента
• Вторичные индексы и скорость
Рациональный подход:

матрица caveats как путь к фрустрации
• Проблема вычисления пересечения множеств
Рациональный подход:

задача не может быть решена
• не хватает исходных данных

unknown unknowns: мы никогда до конца не
знаем тот проект, который строим
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
• Масштабируемость
Интуитивный подход:

что именно вы строите
• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
• Масштабируемость
• Отказоустойчивость
Интуитивный подход
• мы не ищем хороший вариант
Интуитивный подход
• мы не ищем хороший вариант
• мы ищем наименее плохой
Практический подход к
проблеме
• связи всегда можно спрятать в приложение
Практический подход к
проблеме
• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
Практический подход к
проблеме
• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
• а иногда и ничего
Практический подход к
проблеме
• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
• а иногда и ничего
• но в любом случае - не надо делать это на
РДБМС
Практический подход к
проблеме
• Гибридные СУБД
• PostgresSQL - наше все
• FDW
• Citus
• Но не надо думать, что это РСУБД
Выводы
• Компромис - это все, что нам осталось
Выводы
• Компромис - это все, что нам осталось
• Если можете - откажитесь от NoSQL
Выводы
• Компромис - это все, что нам осталось
• Если можете - откажитесь от NoSQL
• Если можете - откажитесь от RDBMS
Выводы
• Компромис - это все, что нам осталось
• Если можете - откажитесь от NoSQL
• Если можете - откажитесь от RDBMS
• Но лучше откажитесь от NoSQL
Спасибо!
Вопросы?

SQL vs NoSQL: 
проблема выбора