SlideShare a Scribd company logo
1 of 57
Download to read offline
Нереляционный
SQL
Андрей Николаенко
v.1.1
SQL: захват экосистемы Hadoop (1)
HDFS
HBase
Yarn
MapReduce Tez Spark
MLLib
Streaming
GraphX
Impala
Drill
Presto
Dato
Phoenix
Giraph
Mahout
Pig
Cascading
Hive
SparkSQL
DataFu
H2O
SQL-движки
Графовые движки
Абстракции
обработки
Машинное обучение
Хранение
Kylin
Kudu
Захват экосистемы Hadoop (2):
звёздные проекты
HBase
•2007
Hive
•2009
Impala
•2011
Spark
•2013
Presto
•2015
Phoenix
•2017
BigTable-
стиль
HiveQL SQL
Захват экосистемы Hadoop (3):
поточники заговорили на SQL
Flink
SQL
Samza
SQL
Storm
SQL
Apex
SQL
Kafka
KSQL
Apache Calcite
2016
2016
2016
2017
SQL в NoSQL
Cassandra
CQL
ScyllaDB
CQL
Aerospike
AQL
Couchbase
N1QL
Tarantool
SQL
CrateDB
SQL
GenieDB
SQL
Важное предшествующее обсуждение
Настоящее обсуждение: рассмотрение с точки зрения интегратора («товароведа»)
Пользовательский спрос Лингвистика Универсальность [Над]системная интеграция
SQL не столько как язык, сколько как «отрицание NoSQL-движения» → New School
строгая согласованность ограниченная транзакционность вопросы масштабирования вопросы мультимодельности
Рассмотрены с точки зрения СУБД-строителя
Cassandra CQL Couchbase N1QL RethinkDB ReQL Elastic Query DSL CrateDB SQL
Константин Осипов. NewSQL: SQL никуда не уходит // Backend Conf , РИТ++, 2017)
Итоги
SQL – «наше всё» Но не весь SQL – наш (есть специфики в гетерогенной среде) Wanted…
Умозрительный пример: SQL как shell
+ н е у м о з р и т е л ь н ы й п р о г н о з : S Q L к S 3
Переписывание запросов
HoTTSQL Переписывание модели
Абстрагирование от модели хранения и гибридизация
Одним запросом – к разным источникам Проблемы планирования
К поиску супермодели
SQL  CoSQL (Мейер) Кольцо нормальных форм
Реляционность SQL
Нереляционности SQL в реляционных СУБД Реляционная часть SQL Реализуемость SQL в нереляционных СУБД
История
Язык оператора Язык программиста Язык аналитика
История
SQL – оператору, программисту, аналитику
Язык оператора
Structured English Query Language
SEQUEL
Руководство оператора
ЭВМ.
Структурированный язык
запросов SQL
Вытеснен идеями QBE
•(Query-by-example,
Моше Цлоф, 1974)
ICSE ’76: Proceedings of the 2nd international
conference on Software engineering
Язык программиста
Процедурные расширения
PL/SQL SQL PL SQL-PSM T-SQL …
Усложнения
Рекурсивные
запросы
Регулярные
выражения
Работа с
XML
Работа с
геоданными
Оконные
функции
Темпоральные
операции
Работа с
JSON
2010-е: язык аналитика
На SQL спросить
проще и яснее,
чем вникать в
тонкости работы
drag-n-drop-BI
На SQL спросить
быстрее, чем
просить
программистов
сделать витринку
и картинку
SELECT PROD, SUM(AMT)
FROM SALES
WHERE CAT = 52
GROUP BY CUBE(SHOP,RG)
HAVING SUM(AMT)>100
На SQL готовы разговаривать не только программисты,
но как быть с нереляционными источниками?
Реляционность SQL
Он и правда реляционен?
Реляционен ли SQL?
SQL слишком часто отходит от принципов реляционной теории
строки-
дубликаты
NULL-
значения
Соединения по произвольным критериям
A JOIN B on A.x=B.y
вместо соединения по
декларированному ключу
Подзапрос
A IN (SELECT B …)
с B из другого домена
В настоящем 𝑅 ⊆ 𝐷1 × ⋯ × 𝐷 𝑛
многое привычное и не должно работать
Сортировка
Лимиты
Последовательности
Оконные функции
•в обновлении более одного
элемента в одном запросе
•обращение к предыдущему
элементу окна
Реляционная часть SQL
Выборка
• В части проекции?
• …пока не
возвращает
дубликаты
• То есть только
DISTINCT на
всю проекцию
• В части
фильтрации
Группировка
• Как свёртка
• … тонкостями
на ROLLUP, CUBE
Соединение
• Притом SQL
позволяет его
«ассемблировать»
Теоретико-
множественные
операции
• Лишь в части
приведения
dataframe к
единому типу
кортежа
• Привет из
R, Octave, Python
«Ассемблирование» соединений
(и группировок)
SELECT DEPTNAME, AVG(SALARY)
FROM EMP NATURAL JOIN DEPT
GROUP BY DEPTNAME
SELECT DEPTNAME, AVG(SALARY)
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DEPTNAME
SELECT DEPTNAME, DEPTFUND/DEPTSIZE
FROM DEPT, (SELECT SUM(SALARY) AS DEPTFUND, COUNT(1) AS DEPTSIZE
FROM EMP
WHERE EMP.DEPTNO=DEPT.DEPTNO)
Крис Дейт, 2009
Обстоятельнейшее рассмотрение
нереляционностей и реляционностей SQL
Канва:
грамотный SQL – это использование SQL в
реляционном стиле
Реляционный язык Tutorial D
Изображение: ©Символ-плюс
Явные нереляционности SQL в
современных РСУБД
Копания вглубь типов
• XML, JSON, геоданные, …
Сортировки
Лимиты
Приближённые запросы
Оконные функции
Копания вглубь
ALTER TABLE EMP ADD COLUMN (ADDRESS CLOB);
ALTER TABLE EMP ADD CONSTRAINT
ADDRESS_J CHECK (ADDRESS IS JSON)
…
SELECT ADDRESS.HOME_REC. STREET, COUNT(1)
FROM EMP
WHERE ADDRESS.HOME_REC.ZIP BETWEEN 121000 AND 125000
GROUP BY ADDRESS.HOME_REC.STREET
Oracle Database, JSON, точечная нотация
SQL для NoSQL
SQL is a kludge!
•Эван Уивер (RailsConf’2006)
Kludge ([klʌdʒ], техн., жарг.)
• клудж, устройство, программа или часть программы, которые
теоретически не должны работать, но почему-то работают
• ошибка, ляп (The first time, it’s a kludge! The second, a trick. Later, it’s a
well-established technique!)
AQL, N1QL, CQL, UnQL, HiveQL
•«в нашей NoSQL-СУБД мы решили для всеобщего
удобства реализовать SQL-подобный синтаксис»
SQL в мире NoSQL
«Ключ – значение»
Redis
Tarantool
Aerospike
GenieDB
RocksDB
IMDG как класс
Документо-
ориентированные
MongoDB
ToroDB
CouchDB
Couchbase
NosDB
RethinkDB
CrateDB
«Семейство столбцов»
HBase+Phoenix
Cassandra
ScyllaDB
RavenDB
Accumulo
MyRocks
SQL и SQL-подобные
CockroachDB
SQL в IMDG: глубина гонки
Гонка уже не за SQL как таковым, а за глубиной соответствия стандартам
Hazelcast
Предикатная
часть SQL
Gridgain
(Ignite)
ANSI SQL-99
Oracle
Coherence
CohQL
(одновременно
SQL- и JPQL-
подобный)
Gigaspaces
XAP
Почти ANSI
SQL-92
Tibco
ActiveSpaces
Предикатная
часть SQL
Gemfire
(Geode)
SQL-подобный
OQL
JBoss Data
Grid
SQL-подобный
InfinispanQL
CocroachDB
EMPNO FULLNAME DEPTNO SALARY
1 Сидор Петров 10 200
2 Харитон Иванов 20 100
KEY VALUE
/<EMP>/1/<FULLNAME> "Сидор Петров"
/<EMP>/1/<DEPTNO> 10
/<EMP>/1/<SALARY> 200
/<EMP>/2/<FULLNAME> "Харитон Иванов"
/<EMP>/2/<DEPTNO> 20
/<EMP>/2/<SALARY> 100
<EMP> – идентификатор таблицы EMP
SELECT * FROM EMP WHERE EMPNO=2
Scan("/<EMP>/2", "/<EMP>/2/*")
«Ключ – значение»
как низкоуровневый движок для РСУБД
Встраиваемая
СУБД
«ключ –
значение»
RocksDB
InnoDB
XtraDB
Реляционная
СУБД
Cockroach
DB
MyRocks
MySQL
MariaDB
Percona
Server
К поиску супермодели
CoSQL и кольцо нормальных форм
Агрегатная модель
Скрепляющее свойство NoSQL-моделей (кроме графовой)
•Ключ – значение
•Документоориентированная
•Семейство столбцов
Не кортеж из атомарных элементов, а привязанные к ключу коллекции,
возможно, сложной структуры
Не интерпретируется как отношение (казалось бы?)
CoSQL
Erik Meijer and Gavin Bierman
// Communications of the ACM, vol. 54 (2011), No. 4
SQL coSQL
Дочерние записи ссылаются на родительские Родительские записи содержат дочерние
Элементы обязательно строго типизированы (Потенциально) динамически типизированы
Синхронные обновления (ACID) для нескольких
записей
Асинхронные обновления (BASE) для одной записи
Набросок теоретико-категорной модели, объединяющей
реляционную алгебру и «двойственную ей» алгебру для агрегатных моделей
CoSQL: развёртывая модель
Изображения: ©ACM, Эрик Мейер, Гэвин Бирман
Кольцо нормальных форм
N1NF
1NF
2NF
3NF
4NF
5NF
6NF
EAV
EMPNO FULLNAME REGION CITY STREET HOUSE FLAT IDTYPE IDVAL
1 Сидор
Петров
ЦФО Москва 3-я Строителей 25 12 Паспорт 1010 101010
СНИЛС 1010-101011
ИНН 556677889900
EMPNO FULLNAME
1 Сидор Петров
AID EMPNO REGION CITY STREET HOUSE FLAT
1010 1 ЦФО Москва 3-я Строителей 25 12
EMPNO IDTYPE IDVAL
1 Паспорт 1010 101010
1 СНИЛС 1010-101011
1 ИНН 556677889900
Селективность, плотность хранения –
вне прямой зависимости от нормализации
Строчное
хранение
6NF
Столбцовое
хранение
1NF
Сопоставимые объёмы, сопоставимые сложности доступа
Агрегатный
Oracle Database?
Изображение ©Oracle, 1997
CREATE CLUSTER:
>1NF, хранимый как N1NF
DEPTNO DEPTNAME EMNO FULLNAME
10 Закупки 1 Сидор Петров
3 Иван Алексеев
20 Продажи 2 Харитон Иванов
4 Пётр Сидоров
5 Иван Харитонов
Совместное секционирование по кластерному ключу
Большой транзакционный объект
Постоянно прибывающий журнал (операций)
•С многочисленной, но, как правило, атомарной атрибутикой
•С немногочисленными вложенными коллекциями
•С изменяющейся время от времени атрибутикой
С понятным способом сегментирования
•Равномерно хэширующийся уникальный идентификатор
•Либо – по временному штампу
Эволюция масштаба (1)
EMP
•10 тыс.
DEPT
•500
PAYROLL
•120 тыс. в год
PAYROLL_ITEM
•1 млн в год
EMP
•10 тыс.
DEPT
•500
PAYROLL
•120 тыс. в год
PAYROLL_ITEM
•1 млн в год
TASK
•10 тыс. в год
TIMESHEET
•10 млн в год
EMP
•10 тыс.
DEPT
•500
PAYROLL
•120 тыс. в год
PAYROLL_ITEM
•1 млн в год
SQUID/ACCESS.LOG
•5000 в день per EMP
•>10 млрд за год
Большой
транзакционный
объект
«Словари», slow
changed
dimensions
Реляционная
неразличимость
1995 2005 2015
Центральная (мастер)-сущность
Основной учитываемый объект
• С крайне многочисленной, меняющейся и сложной атрибутикой
• С многочисленными вложенными коллекциями
• Возможно, составляющими большие транзакционные объекты
• Все прочие «большие сущности» – прямо или транзитивно ссылаются на мастера
С понятным способом сегментирования
• Их достаточно много, и хэш от первичного ключа весьма равномерно размажется по
кластеру
• Все прочие большие сущности сегментируются вслед за мастер-сущностью в точности по
её ключу
• (Почти) все практически осмысленные большие соединения – локализуются на сегментах
Эволюция масштаба (2)
CUST
•10 тыс.
PROD
•500
BILL
•100 тыс. в год
BILL_ITEM
•1 млн в год
CUST
•100 тыс.
PROD
•1 тыс.
BILL
•1 млн в год
BILL_ITEM
•10 млн в год
CUST_ACTION
•100 тыс. в год
CUST
•1 млн
PROD
•1500
CUST_CHARGE
•5 млрд в год
CUST_PAYMENT
•100 млн в год
CUST_ACTIVITY
•50 млрд в год
Вложимый
транзакционный
объект
«Словари», slow
changed
dimensions
Реляционная
неразличимость
1995 2005 2015
Мастер-
сущность
От простого сегментирования
– к расслоению с сегментированными слоями
In-memory
MPP DB
HDFS
S3
Speed layer
Serving layer
Batch layer
SQL ?
Абстрагирование от модели
хранения и гибридизация
Если везде SQL, почему бы не отправить один запрос ко всем сразу?
Если везде SQL, то почему бы не расслоить хранение
(по технико-экономически соображениям)?
Одним запросом – к любому хранилищу
Apache Drill
HDFS
HBase
Hive
RDBMS
MongoDB
Pivotal HDB
(Apache Hawq)
Hadoop
Greenplum
Database
Gemfire
Teradata
SQL-H
Hadoop
Aster Data
Teradata
Database
Oracle
Big Data SQL
Hadoop
Oracle
Database
Проблемы планирования
Было:
• Фиксированный
(outline) план
запроса в Oracle
Database
“Пришла
Big Data”:
• Часть секций
(partitions) из
одной из
больших таблиц
отогнаны в
HDFS
Эффект:
• Заходим во
вложенных
циклах в HDFS
(запись
EXTERNAL
TABLE в плане)
Меры:
• Уничтожен
outline и
немного
переписан
запрос
Нужен:
• согласованный
со знаниями
оптимизаторов
источников
переписыватель
запросов
Переписывание запросов
Переписать, что спланировать
HoTTSQL: прогресс в
переписывании запросов
На основе инструментария
гомотопической теории типов
• теория, эксплуатирующая зависимые типы и
некоторые геометрические идеи
• программа, нацеленная на перевод математических
доказательств на язык систем автоматического
доказательства (Coq, Agda, Idris)
SQL-запрос –
это тип
Эквивалентность
SQL-запросов –
это тоже тип
Задача: населён
ли тип данной
эквивалентности?
Переписывание
модели
N1NF
1NF
2NF
3NF
4NF
5NF
6NF+
EAV
Широкая таблица в BigTable-стиле
Реляционная таблица с
дочерними таблицами по
столбцам-коллекциям
Гроздь таблиц
(гипернормализованная снежинка
со сквозным ключом к хабу)
Гроздь таблиц от ключевой к
дочерним по выявлению
функциональных зависимостей
От Schema-on-Read к Model-on-Read
•определение или доопределение схемы в
процессе раскапывания содержания источника
Schema-
on-Read
•определение или доопределение, в какую
модель уложить или доложить данные
•определение или доопределение, в какую
модель отправить запрос или его часть
Model-
on-Read
Раскапывая схему: Apache Drill
SELECT address.home_rec.street AS STREET, COUNT(1) AS CNT
FROM hbase.emp
WHERE address.home_rec.zip = "124125"
GROUP BY address.home_rec.street
SELECT *
FROM hbase.emp
LIMIT 2
row_key name address
1 {"name": "Сидор",
"surname": "Петров"}
{"home_rec": {"zip": "124125", "city": "Москва", "street": "3-я Строителей", "house": 25},
"work_rec": {"zip": "124129", "city": "Москва", "street": "Тверская", "house": 13}
2 {"name": "Харитон",
"surname": "Иванов"}
{"home_rec": {"zip": "124125", "city": "Москва", "street": "2-я Строителей", "house": 2},
"work_rec": {"zip": "124129", "city": "Москва", "street": "Тверская", "house": 13}
STREET CNT
3-я Строителей 1
2-я Строителей 1
Model-on-Read: как это могло бы быть
Разобрать схему
на уровне
доменов и
кардинальностей
вхождения
Доопределить
домены и
ограничения,
выявить
масштабы
Классифицировать
объекты,
сущности, словари
Разложить (DDL →
пакетный ETL) по
СУБД в
соответствии с её
рабочей моделью
нормализации
Универсально
запрашивать в
терминах
объектов,
сущностей,
словарей с
трансляцией в
нужную модель
Универсальный SQL: каким бы мог быть
Над мастер-
сущностями и
большими
транзакционными
объектами
…c поддержкой
копания вглубь в
духе точечной и
путевой нотации
Вместо
соединений со
словарями –
lookup-синтаксис
…и, возможно,
lookup-
семантика, с
вещанием
словарей по
узлам
Со строгой
доменной
типизацией
…поэтапно
доопределяемой
…с доменно-
типизированными
функциями
[высшего порядка]
С возможностями
трансляции в SQL
для других
моделей
…в том числе, с
переписыванием
запросов в
согласовании со
статистикой
Элементы универсального SQL в ClickHouse
Раскрытие темы: 8 ноября, 15:00, Конгресс-холл,
Эффективное использование ClickHouse // Алексей Миловидов
Больше, чем SQL
ARRAY JOIN
PREWHERE
SAMPLE
Конкретнее, чем РСУБД
Информация о
локальности на
уровне семантики
[GLOBAL] JOIN
[GLOBAL] IN
Рождён для
горизонтального
масштаба
Таблицы –
отдельно,
словари – отдельно
Врождённые ключи
сегментирования
(сначала были только месяцы)
Умозрительный пример:
SQL как shell
Caution: юмор
Блуждаем по каталогам
SELECT TYPE, ACCESS_PARTERN, LINKS,
OWNER, GROUP, SIZE, NAME
FROM FILESYSTEM
WHERE DIR = SELECT CURRENT FROM CWD
TYPE ACCESS_PATTERN LINKS OWNER GROUP SIZE NAME
d rwxr-xr-x 1 root root 24 dir1
d rwxrwxr-x 1 user1 post 24 dir2
2 записи выбрано
UPDATE CWD SET CURRENT = CURRENT + '/' + 'dir2'
1 строка обновлена
ls -la
cd dir2
Блуждаем по файлам
awk -F" '{print $6}' `cat access.log access.log.old` | sort | uniq -c | sort -fr
SELECT USER_AGENT, COUNT(1)
FROM
(SELECT $6 AS USER_AGENT
FROM ACCESS_LOG
UNION ALL
SELECT $6 AS USER_AGENT
FROM ACCESS_LOG_OLD)
GROUP BY USER_AGENT
ORDER BY COUNT(1) DESC
cat
awk
uniq
sort
USER_AGENT $2
MSIE 8.0; Windows NT 5.2;
Trident/4.0
110
Mozilla/5.0 (Windows NT 6.1;
Win64; x64; rv:47.0)
Gecko/20100101 Firefox/47.0
94
Mozilla/5.0 (Macintosh; Intel Mac
OS X x.y; rv:42.0) Gecko/20100101
Firefox/42.0
56
Mozilla/5.0 (iPhone; CPU iPhone
OS 10_3_1 like Mac OS X)
AppleWebKit/603.1.30 (KHTML,
like Gecko) Version/10.0
Mobile/14E304 Safari/602.1
55
killall -9 psql
SELECT UID, PID, PPID, STIME, TTY, CMD
FROM PROC
WHERE CMD LIKE '%psql%'
INSERT INTO PROC_SIGNAL (PID, SIGNAL)
VALUES
((SELECT PID FROM PROC
WHERE PROGRAM = 'psql'),
'SIGKILL')
2 записи добавлено
Ничего не выбрано
Если есть procfs,
то почему нет procdb?
Хайп на взлёте: SQL for S3?
H y p e C y c l e f o r D a t a M a n a g e m e n t , 2 0 1 7
Прежде всего – как идея
дезагрегации хранения
и обработки
…но и требующая выразительных
средств на стороне SQL для работы
с букетами-каталогами, файлами-
объектами и их группами, версиями
Amazon Redshift Spectrum как
возможный прототип
Итоги
SQL – «наше всё!»
Не всё из SQL – «наше»
Wanted: надмоделный SQL
SQL – универсальный язык доступа
к любым данным
SQL – язык программиста и пользователя-аналитика
QBE, универсальные
конструкторы
запросов – сложнее
SQL
Доступ к хранимым
данным и к потокам
данных
SQL над потоком –
стандарт де-факто
Нет смысла бороться с SQL:
все попытки сделать что-то лучше не получили признания
OData
Datalog
XQuery
JSONiq
Даже в «нишах» SQL приживается лучше,
чем специализированные языки
MDX SPARQL GraphQL
Для больших систем
[универсальный] SQL применим с
ограничениями на соединения
Эффективная по параллелизму конструкция выполнения одинакова во всех моделях и для всех СУБД
Модели преобразуемы одна к другой
Кардинальности сущностей –
неизменны
Принципы сегментирования –
неизменны
Прочие сущности – «словари»
(но не равнозначимые отношения для соединения)
Широковещаются по сегментам Фактически являются функциями (lookup, match…)
Сегментирование по узлам
По мастер-сущности с
большим транзакционным объектом
По большому транзакционному объекту
Wanted: надмодельный SQL
Различающий «большие» мастер-сущности, транзакционные объекты и «словари»
Поддерживающий доменную типизацию, соединяющий только нужное и в правильную сторону
Трансформирующий DDL и DML в заданный класс модели (xNF → yDB)
Различающий сегменты (секции) в разных источниках
Взаимодействующий со стоимостными оптимизаторами различных СУБД
Работающий с классами эквивалентности SQL и переписывающий SQL
Основа-кандидат: Apache Calcite
anikolaenko@ibs.ru
anikolaenko@acm.org

More Related Content

What's hot

Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Ontico
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использования
DevDay
 
DataCore case studies
DataCore case studies DataCore case studies
DataCore case studies
korn_aaf
 

What's hot (20)

HPC file systems (160761)
HPC file systems (160761)HPC file systems (160761)
HPC file systems (160761)
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Кластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможностиКластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможности
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
СХД для обработки сейсмики: сравнительный обзор
СХД для обработки сейсмики: сравнительный обзорСХД для обработки сейсмики: сравнительный обзор
СХД для обработки сейсмики: сравнительный обзор
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
High Load
High LoadHigh Load
High Load
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использования
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
DataCore case studies
DataCore case studies DataCore case studies
DataCore case studies
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
 

Viewers also liked

Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Ontico
 
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
Ontico
 
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Ontico
 

Viewers also liked (20)

Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
Cassandra для хранения метаданных: успехи и провалы / Андрей Смирнов (Virtust...
 
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Нико...
 
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
Полнотекстовый поиск в PostgreSQL / Александр Алексеев (Postgres Professional)
 
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)
 
Развитие баз данных в Dropbox. Путь от одной глобальной базы MySQL к 6000 шар...
Развитие баз данных в Dropbox. Путь от одной глобальной базы MySQL к 6000 шар...Развитие баз данных в Dropbox. Путь от одной глобальной базы MySQL к 6000 шар...
Развитие баз данных в Dropbox. Путь от одной глобальной базы MySQL к 6000 шар...
 
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
NoSQL Best Practices for PostgreSQL / Дмитрий Долгов (Mindojo)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной гр...
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
 
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
После подключения DDoS-защиты: как "положат" Ваши ресурсы / Рамиль Хантимиров...
 
Как писать сервис, поддержка которого не превращается в ад / Антон Резников, ...
Как писать сервис, поддержка которого не превращается в ад / Антон Резников, ...Как писать сервис, поддержка которого не превращается в ад / Антон Резников, ...
Как писать сервис, поддержка которого не превращается в ад / Антон Резников, ...
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
Масштабирование сети VR-аттракционов CinemaVR / Андрей Татаринов (VRTech)
 
Встреча докладчиков Hl++ 2017
Встреча докладчиков Hl++ 2017Встреча докладчиков Hl++ 2017
Встреча докладчиков Hl++ 2017
 
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
 
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
 
Организации в бирюзовом цвете / Мария Груздева (НИУ ВШЭ)
Организации в бирюзовом цвете / Мария Груздева (НИУ ВШЭ) Организации в бирюзовом цвете / Мария Груздева (НИУ ВШЭ)
Организации в бирюзовом цвете / Мария Груздева (НИУ ВШЭ)
 
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...Искусство предсказания: как давать более точные оценки времени проекта / Андр...
Искусство предсказания: как давать более точные оценки времени проекта / Андр...
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 

Similar to Нереляционный SQL / Андрей Николаенко (IBS)

Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Olga Lavrentieva
 

Similar to Нереляционный SQL / Андрей Николаенко (IBS) (20)

NoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospectsNoSQL: issues and progress, current status and prospects
NoSQL: issues and progress, current status and prospects
 
владивосток форум новости технологий 2015
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
 
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Нереляционный SQL / Андрей Николаенко (IBS)

  • 2. SQL: захват экосистемы Hadoop (1) HDFS HBase Yarn MapReduce Tez Spark MLLib Streaming GraphX Impala Drill Presto Dato Phoenix Giraph Mahout Pig Cascading Hive SparkSQL DataFu H2O SQL-движки Графовые движки Абстракции обработки Машинное обучение Хранение Kylin Kudu
  • 3. Захват экосистемы Hadoop (2): звёздные проекты HBase •2007 Hive •2009 Impala •2011 Spark •2013 Presto •2015 Phoenix •2017 BigTable- стиль HiveQL SQL
  • 4. Захват экосистемы Hadoop (3): поточники заговорили на SQL Flink SQL Samza SQL Storm SQL Apex SQL Kafka KSQL Apache Calcite 2016 2016 2016 2017
  • 6. Важное предшествующее обсуждение Настоящее обсуждение: рассмотрение с точки зрения интегратора («товароведа») Пользовательский спрос Лингвистика Универсальность [Над]системная интеграция SQL не столько как язык, сколько как «отрицание NoSQL-движения» → New School строгая согласованность ограниченная транзакционность вопросы масштабирования вопросы мультимодельности Рассмотрены с точки зрения СУБД-строителя Cassandra CQL Couchbase N1QL RethinkDB ReQL Elastic Query DSL CrateDB SQL Константин Осипов. NewSQL: SQL никуда не уходит // Backend Conf , РИТ++, 2017)
  • 7. Итоги SQL – «наше всё» Но не весь SQL – наш (есть специфики в гетерогенной среде) Wanted… Умозрительный пример: SQL как shell + н е у м о з р и т е л ь н ы й п р о г н о з : S Q L к S 3 Переписывание запросов HoTTSQL Переписывание модели Абстрагирование от модели хранения и гибридизация Одним запросом – к разным источникам Проблемы планирования К поиску супермодели SQL  CoSQL (Мейер) Кольцо нормальных форм Реляционность SQL Нереляционности SQL в реляционных СУБД Реляционная часть SQL Реализуемость SQL в нереляционных СУБД История Язык оператора Язык программиста Язык аналитика
  • 8. История SQL – оператору, программисту, аналитику
  • 9. Язык оператора Structured English Query Language SEQUEL Руководство оператора ЭВМ. Структурированный язык запросов SQL Вытеснен идеями QBE •(Query-by-example, Моше Цлоф, 1974) ICSE ’76: Proceedings of the 2nd international conference on Software engineering
  • 10. Язык программиста Процедурные расширения PL/SQL SQL PL SQL-PSM T-SQL … Усложнения Рекурсивные запросы Регулярные выражения Работа с XML Работа с геоданными Оконные функции Темпоральные операции Работа с JSON
  • 11. 2010-е: язык аналитика На SQL спросить проще и яснее, чем вникать в тонкости работы drag-n-drop-BI На SQL спросить быстрее, чем просить программистов сделать витринку и картинку SELECT PROD, SUM(AMT) FROM SALES WHERE CAT = 52 GROUP BY CUBE(SHOP,RG) HAVING SUM(AMT)>100 На SQL готовы разговаривать не только программисты, но как быть с нереляционными источниками?
  • 12. Реляционность SQL Он и правда реляционен?
  • 13. Реляционен ли SQL? SQL слишком часто отходит от принципов реляционной теории строки- дубликаты NULL- значения Соединения по произвольным критериям A JOIN B on A.x=B.y вместо соединения по декларированному ключу Подзапрос A IN (SELECT B …) с B из другого домена
  • 14. В настоящем 𝑅 ⊆ 𝐷1 × ⋯ × 𝐷 𝑛 многое привычное и не должно работать Сортировка Лимиты Последовательности Оконные функции •в обновлении более одного элемента в одном запросе •обращение к предыдущему элементу окна
  • 15. Реляционная часть SQL Выборка • В части проекции? • …пока не возвращает дубликаты • То есть только DISTINCT на всю проекцию • В части фильтрации Группировка • Как свёртка • … тонкостями на ROLLUP, CUBE Соединение • Притом SQL позволяет его «ассемблировать» Теоретико- множественные операции • Лишь в части приведения dataframe к единому типу кортежа • Привет из R, Octave, Python
  • 16. «Ассемблирование» соединений (и группировок) SELECT DEPTNAME, AVG(SALARY) FROM EMP NATURAL JOIN DEPT GROUP BY DEPTNAME SELECT DEPTNAME, AVG(SALARY) FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO GROUP BY DEPTNAME SELECT DEPTNAME, DEPTFUND/DEPTSIZE FROM DEPT, (SELECT SUM(SALARY) AS DEPTFUND, COUNT(1) AS DEPTSIZE FROM EMP WHERE EMP.DEPTNO=DEPT.DEPTNO)
  • 17. Крис Дейт, 2009 Обстоятельнейшее рассмотрение нереляционностей и реляционностей SQL Канва: грамотный SQL – это использование SQL в реляционном стиле Реляционный язык Tutorial D Изображение: ©Символ-плюс
  • 18. Явные нереляционности SQL в современных РСУБД Копания вглубь типов • XML, JSON, геоданные, … Сортировки Лимиты Приближённые запросы Оконные функции
  • 19. Копания вглубь ALTER TABLE EMP ADD COLUMN (ADDRESS CLOB); ALTER TABLE EMP ADD CONSTRAINT ADDRESS_J CHECK (ADDRESS IS JSON) … SELECT ADDRESS.HOME_REC. STREET, COUNT(1) FROM EMP WHERE ADDRESS.HOME_REC.ZIP BETWEEN 121000 AND 125000 GROUP BY ADDRESS.HOME_REC.STREET Oracle Database, JSON, точечная нотация
  • 20. SQL для NoSQL SQL is a kludge! •Эван Уивер (RailsConf’2006) Kludge ([klʌdʒ], техн., жарг.) • клудж, устройство, программа или часть программы, которые теоретически не должны работать, но почему-то работают • ошибка, ляп (The first time, it’s a kludge! The second, a trick. Later, it’s a well-established technique!) AQL, N1QL, CQL, UnQL, HiveQL •«в нашей NoSQL-СУБД мы решили для всеобщего удобства реализовать SQL-подобный синтаксис»
  • 21. SQL в мире NoSQL «Ключ – значение» Redis Tarantool Aerospike GenieDB RocksDB IMDG как класс Документо- ориентированные MongoDB ToroDB CouchDB Couchbase NosDB RethinkDB CrateDB «Семейство столбцов» HBase+Phoenix Cassandra ScyllaDB RavenDB Accumulo MyRocks SQL и SQL-подобные CockroachDB
  • 22. SQL в IMDG: глубина гонки Гонка уже не за SQL как таковым, а за глубиной соответствия стандартам Hazelcast Предикатная часть SQL Gridgain (Ignite) ANSI SQL-99 Oracle Coherence CohQL (одновременно SQL- и JPQL- подобный) Gigaspaces XAP Почти ANSI SQL-92 Tibco ActiveSpaces Предикатная часть SQL Gemfire (Geode) SQL-подобный OQL JBoss Data Grid SQL-подобный InfinispanQL
  • 23. CocroachDB EMPNO FULLNAME DEPTNO SALARY 1 Сидор Петров 10 200 2 Харитон Иванов 20 100 KEY VALUE /<EMP>/1/<FULLNAME> "Сидор Петров" /<EMP>/1/<DEPTNO> 10 /<EMP>/1/<SALARY> 200 /<EMP>/2/<FULLNAME> "Харитон Иванов" /<EMP>/2/<DEPTNO> 20 /<EMP>/2/<SALARY> 100 <EMP> – идентификатор таблицы EMP SELECT * FROM EMP WHERE EMPNO=2 Scan("/<EMP>/2", "/<EMP>/2/*")
  • 24. «Ключ – значение» как низкоуровневый движок для РСУБД Встраиваемая СУБД «ключ – значение» RocksDB InnoDB XtraDB Реляционная СУБД Cockroach DB MyRocks MySQL MariaDB Percona Server
  • 25. К поиску супермодели CoSQL и кольцо нормальных форм
  • 26. Агрегатная модель Скрепляющее свойство NoSQL-моделей (кроме графовой) •Ключ – значение •Документоориентированная •Семейство столбцов Не кортеж из атомарных элементов, а привязанные к ключу коллекции, возможно, сложной структуры Не интерпретируется как отношение (казалось бы?)
  • 27. CoSQL Erik Meijer and Gavin Bierman // Communications of the ACM, vol. 54 (2011), No. 4 SQL coSQL Дочерние записи ссылаются на родительские Родительские записи содержат дочерние Элементы обязательно строго типизированы (Потенциально) динамически типизированы Синхронные обновления (ACID) для нескольких записей Асинхронные обновления (BASE) для одной записи Набросок теоретико-категорной модели, объединяющей реляционную алгебру и «двойственную ей» алгебру для агрегатных моделей
  • 28. CoSQL: развёртывая модель Изображения: ©ACM, Эрик Мейер, Гэвин Бирман
  • 29. Кольцо нормальных форм N1NF 1NF 2NF 3NF 4NF 5NF 6NF EAV EMPNO FULLNAME REGION CITY STREET HOUSE FLAT IDTYPE IDVAL 1 Сидор Петров ЦФО Москва 3-я Строителей 25 12 Паспорт 1010 101010 СНИЛС 1010-101011 ИНН 556677889900 EMPNO FULLNAME 1 Сидор Петров AID EMPNO REGION CITY STREET HOUSE FLAT 1010 1 ЦФО Москва 3-я Строителей 25 12 EMPNO IDTYPE IDVAL 1 Паспорт 1010 101010 1 СНИЛС 1010-101011 1 ИНН 556677889900
  • 30. Селективность, плотность хранения – вне прямой зависимости от нормализации Строчное хранение 6NF Столбцовое хранение 1NF Сопоставимые объёмы, сопоставимые сложности доступа
  • 31. Агрегатный Oracle Database? Изображение ©Oracle, 1997 CREATE CLUSTER: >1NF, хранимый как N1NF DEPTNO DEPTNAME EMNO FULLNAME 10 Закупки 1 Сидор Петров 3 Иван Алексеев 20 Продажи 2 Харитон Иванов 4 Пётр Сидоров 5 Иван Харитонов Совместное секционирование по кластерному ключу
  • 32. Большой транзакционный объект Постоянно прибывающий журнал (операций) •С многочисленной, но, как правило, атомарной атрибутикой •С немногочисленными вложенными коллекциями •С изменяющейся время от времени атрибутикой С понятным способом сегментирования •Равномерно хэширующийся уникальный идентификатор •Либо – по временному штампу
  • 33. Эволюция масштаба (1) EMP •10 тыс. DEPT •500 PAYROLL •120 тыс. в год PAYROLL_ITEM •1 млн в год EMP •10 тыс. DEPT •500 PAYROLL •120 тыс. в год PAYROLL_ITEM •1 млн в год TASK •10 тыс. в год TIMESHEET •10 млн в год EMP •10 тыс. DEPT •500 PAYROLL •120 тыс. в год PAYROLL_ITEM •1 млн в год SQUID/ACCESS.LOG •5000 в день per EMP •>10 млрд за год Большой транзакционный объект «Словари», slow changed dimensions Реляционная неразличимость 1995 2005 2015
  • 34. Центральная (мастер)-сущность Основной учитываемый объект • С крайне многочисленной, меняющейся и сложной атрибутикой • С многочисленными вложенными коллекциями • Возможно, составляющими большие транзакционные объекты • Все прочие «большие сущности» – прямо или транзитивно ссылаются на мастера С понятным способом сегментирования • Их достаточно много, и хэш от первичного ключа весьма равномерно размажется по кластеру • Все прочие большие сущности сегментируются вслед за мастер-сущностью в точности по её ключу • (Почти) все практически осмысленные большие соединения – локализуются на сегментах
  • 35. Эволюция масштаба (2) CUST •10 тыс. PROD •500 BILL •100 тыс. в год BILL_ITEM •1 млн в год CUST •100 тыс. PROD •1 тыс. BILL •1 млн в год BILL_ITEM •10 млн в год CUST_ACTION •100 тыс. в год CUST •1 млн PROD •1500 CUST_CHARGE •5 млрд в год CUST_PAYMENT •100 млн в год CUST_ACTIVITY •50 млрд в год Вложимый транзакционный объект «Словари», slow changed dimensions Реляционная неразличимость 1995 2005 2015 Мастер- сущность
  • 36. От простого сегментирования – к расслоению с сегментированными слоями In-memory MPP DB HDFS S3 Speed layer Serving layer Batch layer SQL ?
  • 37. Абстрагирование от модели хранения и гибридизация Если везде SQL, почему бы не отправить один запрос ко всем сразу? Если везде SQL, то почему бы не расслоить хранение (по технико-экономически соображениям)?
  • 38. Одним запросом – к любому хранилищу Apache Drill HDFS HBase Hive RDBMS MongoDB Pivotal HDB (Apache Hawq) Hadoop Greenplum Database Gemfire Teradata SQL-H Hadoop Aster Data Teradata Database Oracle Big Data SQL Hadoop Oracle Database
  • 39. Проблемы планирования Было: • Фиксированный (outline) план запроса в Oracle Database “Пришла Big Data”: • Часть секций (partitions) из одной из больших таблиц отогнаны в HDFS Эффект: • Заходим во вложенных циклах в HDFS (запись EXTERNAL TABLE в плане) Меры: • Уничтожен outline и немного переписан запрос Нужен: • согласованный со знаниями оптимизаторов источников переписыватель запросов
  • 41. HoTTSQL: прогресс в переписывании запросов На основе инструментария гомотопической теории типов • теория, эксплуатирующая зависимые типы и некоторые геометрические идеи • программа, нацеленная на перевод математических доказательств на язык систем автоматического доказательства (Coq, Agda, Idris) SQL-запрос – это тип Эквивалентность SQL-запросов – это тоже тип Задача: населён ли тип данной эквивалентности?
  • 42. Переписывание модели N1NF 1NF 2NF 3NF 4NF 5NF 6NF+ EAV Широкая таблица в BigTable-стиле Реляционная таблица с дочерними таблицами по столбцам-коллекциям Гроздь таблиц (гипернормализованная снежинка со сквозным ключом к хабу) Гроздь таблиц от ключевой к дочерним по выявлению функциональных зависимостей
  • 43. От Schema-on-Read к Model-on-Read •определение или доопределение схемы в процессе раскапывания содержания источника Schema- on-Read •определение или доопределение, в какую модель уложить или доложить данные •определение или доопределение, в какую модель отправить запрос или его часть Model- on-Read
  • 44. Раскапывая схему: Apache Drill SELECT address.home_rec.street AS STREET, COUNT(1) AS CNT FROM hbase.emp WHERE address.home_rec.zip = "124125" GROUP BY address.home_rec.street SELECT * FROM hbase.emp LIMIT 2 row_key name address 1 {"name": "Сидор", "surname": "Петров"} {"home_rec": {"zip": "124125", "city": "Москва", "street": "3-я Строителей", "house": 25}, "work_rec": {"zip": "124129", "city": "Москва", "street": "Тверская", "house": 13} 2 {"name": "Харитон", "surname": "Иванов"} {"home_rec": {"zip": "124125", "city": "Москва", "street": "2-я Строителей", "house": 2}, "work_rec": {"zip": "124129", "city": "Москва", "street": "Тверская", "house": 13} STREET CNT 3-я Строителей 1 2-я Строителей 1
  • 45. Model-on-Read: как это могло бы быть Разобрать схему на уровне доменов и кардинальностей вхождения Доопределить домены и ограничения, выявить масштабы Классифицировать объекты, сущности, словари Разложить (DDL → пакетный ETL) по СУБД в соответствии с её рабочей моделью нормализации Универсально запрашивать в терминах объектов, сущностей, словарей с трансляцией в нужную модель
  • 46. Универсальный SQL: каким бы мог быть Над мастер- сущностями и большими транзакционными объектами …c поддержкой копания вглубь в духе точечной и путевой нотации Вместо соединений со словарями – lookup-синтаксис …и, возможно, lookup- семантика, с вещанием словарей по узлам Со строгой доменной типизацией …поэтапно доопределяемой …с доменно- типизированными функциями [высшего порядка] С возможностями трансляции в SQL для других моделей …в том числе, с переписыванием запросов в согласовании со статистикой
  • 47. Элементы универсального SQL в ClickHouse Раскрытие темы: 8 ноября, 15:00, Конгресс-холл, Эффективное использование ClickHouse // Алексей Миловидов Больше, чем SQL ARRAY JOIN PREWHERE SAMPLE Конкретнее, чем РСУБД Информация о локальности на уровне семантики [GLOBAL] JOIN [GLOBAL] IN Рождён для горизонтального масштаба Таблицы – отдельно, словари – отдельно Врождённые ключи сегментирования (сначала были только месяцы)
  • 49. Блуждаем по каталогам SELECT TYPE, ACCESS_PARTERN, LINKS, OWNER, GROUP, SIZE, NAME FROM FILESYSTEM WHERE DIR = SELECT CURRENT FROM CWD TYPE ACCESS_PATTERN LINKS OWNER GROUP SIZE NAME d rwxr-xr-x 1 root root 24 dir1 d rwxrwxr-x 1 user1 post 24 dir2 2 записи выбрано UPDATE CWD SET CURRENT = CURRENT + '/' + 'dir2' 1 строка обновлена ls -la cd dir2
  • 50. Блуждаем по файлам awk -F" '{print $6}' `cat access.log access.log.old` | sort | uniq -c | sort -fr SELECT USER_AGENT, COUNT(1) FROM (SELECT $6 AS USER_AGENT FROM ACCESS_LOG UNION ALL SELECT $6 AS USER_AGENT FROM ACCESS_LOG_OLD) GROUP BY USER_AGENT ORDER BY COUNT(1) DESC cat awk uniq sort USER_AGENT $2 MSIE 8.0; Windows NT 5.2; Trident/4.0 110 Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 94 Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0 56 Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 55
  • 51. killall -9 psql SELECT UID, PID, PPID, STIME, TTY, CMD FROM PROC WHERE CMD LIKE '%psql%' INSERT INTO PROC_SIGNAL (PID, SIGNAL) VALUES ((SELECT PID FROM PROC WHERE PROGRAM = 'psql'), 'SIGKILL') 2 записи добавлено Ничего не выбрано Если есть procfs, то почему нет procdb?
  • 52. Хайп на взлёте: SQL for S3? H y p e C y c l e f o r D a t a M a n a g e m e n t , 2 0 1 7 Прежде всего – как идея дезагрегации хранения и обработки …но и требующая выразительных средств на стороне SQL для работы с букетами-каталогами, файлами- объектами и их группами, версиями Amazon Redshift Spectrum как возможный прототип
  • 53. Итоги SQL – «наше всё!» Не всё из SQL – «наше» Wanted: надмоделный SQL
  • 54. SQL – универсальный язык доступа к любым данным SQL – язык программиста и пользователя-аналитика QBE, универсальные конструкторы запросов – сложнее SQL Доступ к хранимым данным и к потокам данных SQL над потоком – стандарт де-факто Нет смысла бороться с SQL: все попытки сделать что-то лучше не получили признания OData Datalog XQuery JSONiq Даже в «нишах» SQL приживается лучше, чем специализированные языки MDX SPARQL GraphQL
  • 55. Для больших систем [универсальный] SQL применим с ограничениями на соединения Эффективная по параллелизму конструкция выполнения одинакова во всех моделях и для всех СУБД Модели преобразуемы одна к другой Кардинальности сущностей – неизменны Принципы сегментирования – неизменны Прочие сущности – «словари» (но не равнозначимые отношения для соединения) Широковещаются по сегментам Фактически являются функциями (lookup, match…) Сегментирование по узлам По мастер-сущности с большим транзакционным объектом По большому транзакционному объекту
  • 56. Wanted: надмодельный SQL Различающий «большие» мастер-сущности, транзакционные объекты и «словари» Поддерживающий доменную типизацию, соединяющий только нужное и в правильную сторону Трансформирующий DDL и DML в заданный класс модели (xNF → yDB) Различающий сегменты (секции) в разных источниках Взаимодействующий со стоимостными оптимизаторами различных СУБД Работающий с классами эквивалентности SQL и переписывающий SQL Основа-кандидат: Apache Calcite