tk conf daniel-podolsky-sqlvsnosql
TRANSCRIPT
Impact Mapping: планирование разработки продукта с учетом бизнес целейАлександр Бындю (byndusoft.com)
SQL vs NoSQL: проблема выбора
Даниил ПодольскийCTO inCaller.org
Немного о докладчике• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
Немного о докладчике• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
• Это немного суетно
Немного о докладчике• Системный администратор со стажем 20+ лет
• CTO со стажем 3+ года
• Серийный стартапер
• Это немного суетно
• Но позволяет набрать весьма разнообразный опыт
Введение в проблематику• Назначение баз данных.
• Что такое SQL?
• Что такое NoSQL?
• В чем разница?
Введение в проблематику• Назначение баз данных.
• Что такое SQL?
• Что такое NoSQL?
• В чем разница?
• Задача выбора как задача поиска наименьшего зла.
Опыт докладчика ограничен:почему MySQL• Прост
• Быстр
• Всем знаком
• Вариант по умолчанию
• Буква М в аббревиатуре LAMP
Опыт докладчика ограничен:почему PostgreSQL• Сложен
• Близок по набору features к коммерческим базам
• Некоторые вещи на MySQL сделать просто нельзя
Опыт докладчика ограничен:почему Cassandra• Write-Optimised
• Отлично масштабируется
• Быстрые вторичные индексы
Опыт докладчика ограничен:почему Aerospike• Read-Optimised
• Высокая производительность
• И чтения, и записи
Опыт докладчика ограничен:почему Aerospike• Read-Optimised
• Высокая производительность
• И чтения, и записи
• Отлично масштабируется
Немного теории анатомия 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• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
Немного теориианатомия NoSQL AKA Key-Value• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
• Отказоустойчивость
Немного теориианатомия NoSQL AKA Key-Value• Первичный индекс
• Строки
• Иногда - таблицы
• Naturally shardable
• Отказоустойчивость
• Replication factor 3 is a minimum
Рациональный подход:матрица features как путь к самообману• Свойства РСУБД
• Транзакционность и консистентность
Рациональный подход:матрица features как путь к самообману• Свойства РСУБД
• Транзакционность и консистентность
• Связи и контроль целостности
Рациональный подход:матрица features как путь к самообману• Свойства РСУБД
• Транзакционность и консистентность
• Связи и контроль целостности
• Локальность данных и скорость
Рациональный подход:матрица features как путь к самообману• Свойства NoSQL
• Горизонтальная масштабируемость
Рациональный подход:матрица features как путь к самообману• Свойства NoSQL
• Горизонтальная масштабируемость
• Отказоустойчивость
Рациональный подход:матрица features как путь к самообману• Свойства NoSQL
• Горизонтальная масштабируемость
• Отказоустойчивость
• Простота и скорость
Рациональный подход:матрица caveats как путь к фрустрации• Свойства РСУБД
• Немасштабируемость
• SPoF
Рациональный подход:матрица caveats как путь к фрустрации• Свойства РСУБД
• Немасштабируемость
• SPoF
• Блокировки и скорость
Рациональный подход:матрица caveats как путь к фрустрации• Свойства NoSQL
• Когда-нибудь консистентность
Рациональный подход:матрица caveats как путь к фрустрации• Свойства NoSQL
• Когда-нибудь консистентность
• Ни блокировок, ни автоинкремента
Рациональный подход:матрица caveats как путь к фрустрации• Свойства NoSQL
• Когда-нибудь консистентность
• Ни блокировок, ни автоинкремента
• Вторичные индексы и скорость
Рациональный подход:задача не может быть решена• не хватает исходных данных
unknown unknowns: мы никогда до конца не знаем тот проект, который строим
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
• Масштабируемость
Интуитивный подход: что именно вы строите• Присмотритесь к тому, что вы строите
• Деньги и транзакции
• Двухфазный коммит
• Консистентность и связи
• Сложные запросы
• Масштабируемость
• Отказоустойчивость
Практический подход к проблеме• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
Практический подход к проблеме• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
• а иногда и ничего
Практический подход к проблеме• связи всегда можно спрятать в приложение
• иногда это очень плохой вариант
• а иногда и ничего
• но в любом случае - не надо делать это на РДБМС
Практический подход к проблеме
• Гибридные СУБД
• PostgresSQL - наше все
• FDW
• Citus
• Но не надо думать, что это РСУБД
Выводы• Компромис - это все, что нам осталось
• Если можете - откажитесь от NoSQL
• Если можете - откажитесь от RDBMS
Выводы• Компромис - это все, что нам осталось
• Если можете - откажитесь от NoSQL
• Если можете - откажитесь от RDBMS
• Но лучше откажитесь от NoSQL