Top Banner
Impact Mapping: планирование разработки продукта с учетом бизнес целей Александр Бындю (byndusoft.com) SQL vs NoSQL: проблема выбора Даниил Подольский CTO inCaller.org
78

Tk conf daniel-podolsky-sqlvsnosql

Apr 16, 2017

Download

Software

Daniel Podolsky
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tk conf daniel-podolsky-sqlvsnosql

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

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

Даниил ПодольскийCTO inCaller.org

Page 2: Tk conf daniel-podolsky-sqlvsnosql

Немного о докладчике• Системный администратор со стажем 20+ лет

Page 3: Tk conf daniel-podolsky-sqlvsnosql

Немного о докладчике• Системный администратор со стажем 20+ лет

• CTO со стажем 3+ года

Page 4: Tk conf daniel-podolsky-sqlvsnosql

Немного о докладчике• Системный администратор со стажем 20+ лет

• CTO со стажем 3+ года

• Серийный стартапер

Page 5: Tk conf daniel-podolsky-sqlvsnosql

Немного о докладчике• Системный администратор со стажем 20+ лет

• CTO со стажем 3+ года

• Серийный стартапер

• Это немного суетно

Page 6: Tk conf daniel-podolsky-sqlvsnosql

Немного о докладчике• Системный администратор со стажем 20+ лет

• CTO со стажем 3+ года

• Серийный стартапер

• Это немного суетно

• Но позволяет набрать весьма разнообразный опыт

Page 7: Tk conf daniel-podolsky-sqlvsnosql

Введение в проблематику• Назначение баз данных

Page 8: Tk conf daniel-podolsky-sqlvsnosql

Введение в проблематику• Назначение баз данных

• Что такое SQL?

Page 9: Tk conf daniel-podolsky-sqlvsnosql

Введение в проблематику• Назначение баз данных.

• Что такое SQL?

• Что такое NoSQL?

Page 10: Tk conf daniel-podolsky-sqlvsnosql

Введение в проблематику• Назначение баз данных.

• Что такое SQL?

• Что такое NoSQL?

• В чем разница?

Page 11: Tk conf daniel-podolsky-sqlvsnosql

Введение в проблематику• Назначение баз данных.

• Что такое SQL?

• Что такое NoSQL?

• В чем разница?

• Задача выбора как задача поиска наименьшего зла.

Page 12: Tk conf daniel-podolsky-sqlvsnosql

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

Page 13: Tk conf daniel-podolsky-sqlvsnosql

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

• Postgresql

Page 14: Tk conf daniel-podolsky-sqlvsnosql

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

• Postgresql

• Cassandra

Page 15: Tk conf daniel-podolsky-sqlvsnosql

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

• Postgresql

• Cassandra

• Aerospike

Page 16: Tk conf daniel-podolsky-sqlvsnosql

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

Page 17: Tk conf daniel-podolsky-sqlvsnosql

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

• Быстр

Page 18: Tk conf daniel-podolsky-sqlvsnosql

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

• Быстр

• Всем знаком

Page 19: Tk conf daniel-podolsky-sqlvsnosql

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

• Быстр

• Всем знаком

• Вариант по умолчанию

• Буква М в аббревиатуре LAMP

Page 20: Tk conf daniel-podolsky-sqlvsnosql

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

Page 21: Tk conf daniel-podolsky-sqlvsnosql

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

• Близок по набору features к коммерческим базам

• Некоторые вещи на MySQL сделать просто нельзя

Page 22: Tk conf daniel-podolsky-sqlvsnosql

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

Page 23: Tk conf daniel-podolsky-sqlvsnosql

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

• Отлично масштабируется

Page 24: Tk conf daniel-podolsky-sqlvsnosql

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

• Отлично масштабируется

• Быстрые вторичные индексы

Page 25: Tk conf daniel-podolsky-sqlvsnosql

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

Page 26: Tk conf daniel-podolsky-sqlvsnosql

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

• Высокая производительность

Page 27: Tk conf daniel-podolsky-sqlvsnosql

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

• Высокая производительность

• И чтения, и записи

Page 28: Tk conf daniel-podolsky-sqlvsnosql

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

• Высокая производительность

• И чтения, и записи

• Отлично масштабируется

Page 29: Tk conf daniel-podolsky-sqlvsnosql

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

Page 30: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

Page 31: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

• Таблицы

Page 32: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

• Таблицы

• Индексы

Page 33: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

• Таблицы

• Индексы

• Foreign keys

Page 34: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

• Таблицы

• Индексы

• Foreign keys

• Транзакции и логи

Page 35: Tk conf daniel-podolsky-sqlvsnosql

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

• Sharded RDBMS is not RDBMS

• Таблицы

• Индексы

• Foreign keys

• Транзакции и логи

• Репликация

Page 36: Tk conf daniel-podolsky-sqlvsnosql

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

Page 37: Tk conf daniel-podolsky-sqlvsnosql

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

• Строки

Page 38: Tk conf daniel-podolsky-sqlvsnosql

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

• Строки

• Иногда - таблицы

Page 39: Tk conf daniel-podolsky-sqlvsnosql

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

• Строки

• Иногда - таблицы

• Naturally shardable

Page 40: Tk conf daniel-podolsky-sqlvsnosql

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

• Строки

• Иногда - таблицы

• Naturally shardable

• Отказоустойчивость

Page 41: Tk conf daniel-podolsky-sqlvsnosql

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

• Строки

• Иногда - таблицы

• Naturally shardable

• Отказоустойчивость

• Replication factor 3 is a minimum

Page 42: Tk conf daniel-podolsky-sqlvsnosql

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

Page 43: Tk conf daniel-podolsky-sqlvsnosql

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

• Транзакционность и консистентность

Page 44: Tk conf daniel-podolsky-sqlvsnosql

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

• Транзакционность и консистентность

• Связи и контроль целостности

Page 45: Tk conf daniel-podolsky-sqlvsnosql

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

• Транзакционность и консистентность

• Связи и контроль целостности

• Локальность данных и скорость

Page 46: Tk conf daniel-podolsky-sqlvsnosql

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

Page 47: Tk conf daniel-podolsky-sqlvsnosql

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

• Горизонтальная масштабируемость

Page 48: Tk conf daniel-podolsky-sqlvsnosql

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

• Горизонтальная масштабируемость

• Отказоустойчивость

Page 49: Tk conf daniel-podolsky-sqlvsnosql

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

• Горизонтальная масштабируемость

• Отказоустойчивость

• Простота и скорость

Page 50: Tk conf daniel-podolsky-sqlvsnosql

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

Page 51: Tk conf daniel-podolsky-sqlvsnosql

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

• Немасштабируемость

Page 52: Tk conf daniel-podolsky-sqlvsnosql

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

• Немасштабируемость

• SPoF

Page 53: Tk conf daniel-podolsky-sqlvsnosql

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

• Немасштабируемость

• SPoF

• Блокировки и скорость

Page 54: Tk conf daniel-podolsky-sqlvsnosql

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

Page 55: Tk conf daniel-podolsky-sqlvsnosql

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

• Когда-нибудь консистентность

Page 56: Tk conf daniel-podolsky-sqlvsnosql

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

• Когда-нибудь консистентность

• Ни блокировок, ни автоинкремента

Page 57: Tk conf daniel-podolsky-sqlvsnosql

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

• Когда-нибудь консистентность

• Ни блокировок, ни автоинкремента

• Вторичные индексы и скорость

Page 58: Tk conf daniel-podolsky-sqlvsnosql

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

Page 59: Tk conf daniel-podolsky-sqlvsnosql

Рациональный подход:задача не может быть решена• не хватает исходных данных

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

Page 60: Tk conf daniel-podolsky-sqlvsnosql

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

Page 61: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

Page 62: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

• Двухфазный коммит

Page 63: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

• Двухфазный коммит

• Консистентность и связи

Page 64: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

• Двухфазный коммит

• Консистентность и связи

• Сложные запросы

Page 65: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

• Двухфазный коммит

• Консистентность и связи

• Сложные запросы

• Масштабируемость

Page 66: Tk conf daniel-podolsky-sqlvsnosql

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

• Деньги и транзакции

• Двухфазный коммит

• Консистентность и связи

• Сложные запросы

• Масштабируемость

• Отказоустойчивость

Page 67: Tk conf daniel-podolsky-sqlvsnosql

Интуитивный подход• мы не ищем хороший вариант

Page 68: Tk conf daniel-podolsky-sqlvsnosql

Интуитивный подход• мы не ищем хороший вариант

• мы ищем наименее плохой

Page 69: Tk conf daniel-podolsky-sqlvsnosql

Практический подход к проблеме• связи всегда можно спрятать в приложение

Page 70: Tk conf daniel-podolsky-sqlvsnosql

Практический подход к проблеме• связи всегда можно спрятать в приложение

• иногда это очень плохой вариант

Page 71: Tk conf daniel-podolsky-sqlvsnosql

Практический подход к проблеме• связи всегда можно спрятать в приложение

• иногда это очень плохой вариант

• а иногда и ничего

Page 72: Tk conf daniel-podolsky-sqlvsnosql

Практический подход к проблеме• связи всегда можно спрятать в приложение

• иногда это очень плохой вариант

• а иногда и ничего

• но в любом случае - не надо делать это на РДБМС

Page 73: Tk conf daniel-podolsky-sqlvsnosql

Практический подход к проблеме

• Гибридные СУБД

• PostgresSQL - наше все

• FDW

• Citus

• Но не надо думать, что это РСУБД

Page 74: Tk conf daniel-podolsky-sqlvsnosql

Выводы• Компромис - это все, что нам осталось

Page 75: Tk conf daniel-podolsky-sqlvsnosql

Выводы• Компромис - это все, что нам осталось

• Если можете - откажитесь от NoSQL

Page 76: Tk conf daniel-podolsky-sqlvsnosql

Выводы• Компромис - это все, что нам осталось

• Если можете - откажитесь от NoSQL

• Если можете - откажитесь от RDBMS

Page 77: Tk conf daniel-podolsky-sqlvsnosql

Выводы• Компромис - это все, что нам осталось

• Если можете - откажитесь от NoSQL

• Если можете - откажитесь от RDBMS

• Но лучше откажитесь от NoSQL

Page 78: Tk conf daniel-podolsky-sqlvsnosql

Спасибо!

Вопросы?