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

BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)Ontico
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Ontico
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Alexey Zinoviev
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 

What's hot (20)

BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 

Similar to Нереляционный SQL

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 prospectsAndrei Nikolaenko
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azuremourhoon
 
Sql server clr integration
Sql server clr integration Sql server clr integration
Sql server clr integration Alex Tumanoff
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015Timur Safin
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинAnatoliy Nikulin
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?SECON
 
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)Pavel Tsukanov
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Ontico
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Olga Lavrentieva
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
SQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsSQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsAndrei Nikolaenko
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Ontico
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsAndrei Nikolaenko
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 

Similar to Нереляционный SQL (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
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
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 рациональный подход к созданию собственной системы а...
 
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
SECON'2016. Мухаметов Андрей, RxSwift && Apple TV - так ли хорошо всё новое?
 
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 - взрыв возможностей
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
SQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsSQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management Platforms
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development Environments
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 

More from Andrei Nikolaenko

Байтоадресуемая энергонезависимая память и СУБД
Байтоадресуемая энергонезависимая память и СУБДБайтоадресуемая энергонезависимая память и СУБД
Байтоадресуемая энергонезависимая память и СУБДAndrei Nikolaenko
 
Машины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеМашины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеAndrei Nikolaenko
 
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)Andrei Nikolaenko
 
DBMS Benchmarks in a Nutshell
DBMS Benchmarks in a Nutshell DBMS Benchmarks in a Nutshell
DBMS Benchmarks in a Nutshell Andrei Nikolaenko
 
Инструменты больших данных: от конкуренции — к интеграции
Инструменты больших данных: от конкуренции — к интеграцииИнструменты больших данных: от конкуренции — к интеграции
Инструменты больших данных: от конкуренции — к интеграцииAndrei Nikolaenko
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Andrei Nikolaenko
 
Эталонные тесты производительнсоти СУБД: обзор и тенденции
Эталонные тесты производительнсоти СУБД: обзор и тенденцииЭталонные тесты производительнсоти СУБД: обзор и тенденции
Эталонные тесты производительнсоти СУБД: обзор и тенденцииAndrei Nikolaenko
 
DBMS benchmarking overview and trends for Moscow ACM SIGMOD Chapter
DBMS benchmarking overview and trends for Moscow ACM SIGMOD ChapterDBMS benchmarking overview and trends for Moscow ACM SIGMOD Chapter
DBMS benchmarking overview and trends for Moscow ACM SIGMOD ChapterAndrei Nikolaenko
 
Note on hyperconvered infrastructure on CIPR
Note on hyperconvered infrastructure on CIPR Note on hyperconvered infrastructure on CIPR
Note on hyperconvered infrastructure on CIPR Andrei Nikolaenko
 
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013Andrei Nikolaenko
 
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Andrei Nikolaenko
 
IBS at IBM Fast Data (Moscow, 2014)
IBS at IBM Fast Data (Moscow, 2014)IBS at IBM Fast Data (Moscow, 2014)
IBS at IBM Fast Data (Moscow, 2014)Andrei Nikolaenko
 

More from Andrei Nikolaenko (13)

Байтоадресуемая энергонезависимая память и СУБД
Байтоадресуемая энергонезависимая память и СУБДБайтоадресуемая энергонезависимая память и СУБД
Байтоадресуемая энергонезависимая память и СУБД
 
Машины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеМашины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрение
 
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
 
DBMS Benchmarks in a Nutshell
DBMS Benchmarks in a Nutshell DBMS Benchmarks in a Nutshell
DBMS Benchmarks in a Nutshell
 
Инструменты больших данных: от конкуренции — к интеграции
Инструменты больших данных: от конкуренции — к интеграцииИнструменты больших данных: от конкуренции — к интеграции
Инструменты больших данных: от конкуренции — к интеграции
 
Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)Машины баз данных на Web-scale IT — 2017 (РИТ++)
Машины баз данных на Web-scale IT — 2017 (РИТ++)
 
Эталонные тесты производительнсоти СУБД: обзор и тенденции
Эталонные тесты производительнсоти СУБД: обзор и тенденцииЭталонные тесты производительнсоти СУБД: обзор и тенденции
Эталонные тесты производительнсоти СУБД: обзор и тенденции
 
DBMS benchmarking overview and trends for Moscow ACM SIGMOD Chapter
DBMS benchmarking overview and trends for Moscow ACM SIGMOD ChapterDBMS benchmarking overview and trends for Moscow ACM SIGMOD Chapter
DBMS benchmarking overview and trends for Moscow ACM SIGMOD Chapter
 
Note on hyperconvered infrastructure on CIPR
Note on hyperconvered infrastructure on CIPR Note on hyperconvered infrastructure on CIPR
Note on hyperconvered infrastructure on CIPR
 
DBMS benchmarking overview
DBMS benchmarking overviewDBMS benchmarking overview
DBMS benchmarking overview
 
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013
Cloud Databases, ACM SIGMOD Moscow Workshop, November, 2013
 
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
 
IBS at IBM Fast Data (Moscow, 2014)
IBS at IBM Fast Data (Moscow, 2014)IBS at IBM Fast Data (Moscow, 2014)
IBS at IBM Fast Data (Moscow, 2014)
 

Нереляционный SQL

  • 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