SlideShare a Scribd company logo
#PostgreSQLRussia
Москва, 23.12.2014
PostgreSQL-митап
в офисе компании Parallels
Ещё раз о JSON(b)
в PostgreSQL 9.4
Николай Самохвалов
ru@postgresql.org
Twitter: @samokhvalov
● 1998-2007: МФТИ & ИСП РАН
● 2006: XML в PostgreSQL (8.3, c Peter
Eisentraut)
● с 2007 — «Постгресмен», пресс-
контакт PGDG в России, Highload++
● с 2006 — стартапы,
● социальные сети
Обо мне
● ГАИШ МГУ
● PostgreSQL hackers,
● major contributors:
○ GiST, GIN
○ hstore, intarray, etc
○ full-text search
○ kNN-search
○ JSON, JSONb
Олег Бартунов
и Фёдор Сигаев
● развитие GiST & GIN
● jsquery https://github.com/akorotkov/jsquery
+ Александр Коротков
JSONb:
+ Andrew Dunstan & Peter Geoghegan
РСУБД, SQL и все-все-все
Иерархическая модель
Модели данных и история
Сетевая модель
Модели данных и история
Реляционная модель
Модели данных и история
● Иерархическая и сетевая:
50-е … середина 70-х
● Реляционная: конец 60-х … н.в.
○ реляционная алгебра
Модели данных: история
Edgar Codd
— основал
(1969-1970)
Chris Date —
развил,
популяризировал
Модели данных: хронология
● Иерархическая и сетевая:
50-е … середина 70-х
● Реляционная: конец 60-х … н.в.
○ структура (отношения, кортежи)
○ целостность
○ манипуляции (рел. алгебра / рел.
исчисление)
○ принцип ACID
○ SQL — с 1970-х (ANSI: 1986, ISO: 1987)
PostgreSQL — преемник Ingres (UCB - Berkeley, CA),
SQL – с 1995
Три вызова РСУБД
Реляционная модель:
вызов #1
● Реляционная: конец 60-х … н.в.
○ реляционная алгебра
● 90е — вызов #1:
реляционная модель VS объектная модель
→ объектные СУБД, объектно-реляционный
подход
PostgreSQL — объектно-реляционная СУБД:
● объекты: БД, схемы, таблицы, индексы и т.д.
● расширяемость: типы данных, операторы, методы доступа
● наследование
Реляционная модель:
вызов #2
● Реляционная: конец 60-х … н.в.
○ реляционная алгебра
● 90е — вызов #1:
реляционная модель VS объектная модель
● конец 90-х … середина 2000-х
— вызов #2: XML («слабоструктурированные», иерархия!)
→ интеграция XML, XML СУБД
2008: PostgreSQL 8.3 — тип данных XML
Реляционная модель:
вызов #2
● Реляционная: конец 60-х … н.в.
● 90е — вызов #1:
реляционная модель VS объектная модель
● конец 2000-х — 2010-е
— вызов #2: noSQL
→ noSQL СУБД: key-value, document-oriented и т.д.
— «очень» слабоструктурированные
(иерархии! графы!)
2003: тип данных hstore
2012: PostgreSQL 9.2 — тип данных JSON
2014: PostgreSQL 9.4 — тип данных JSONb
Пары ключ-значение (без вложенности)
SELECT * FROM test LIMIT 1;
id | value
----+--------------------------------------------------------------------
1 | "33"=>"923", "262"=>"181", "471"=>"658", "554"=>"916", "579"=>"472"
● Бинарное хранение
● Богатая поддержка индексов (см. далее)
○ функциональные индексы
○ GiST
○ GIN
hstore: хранение key-value
в реляционной среде
Schema-less
PostgreSQL
● Хранится в виде текста (как и XML)
● Сохраняет представление
○ порядок,
○ пробелы,
○ дубликаты)
● Индексы — только функциональные
JSON в PostgreSQL
● Хранится бинарном виде /* как и hstore */
● Убираются пробелы
● Убираются дубликаты
(берутся последние значения)
● Ключи сортируются /* внутренняя кухня, порядок
не определён */
○ быстрый поиск
● Результат — в PostgreSQL 9.4 есть
все эти типы:
○ hstore
○ XML
○ JSON
○ JSONb
JSONb в PostgreSQL
-- JSONовскый примитивный тип данных "число" — аналог NUMERIC:
SELECT '5'::jsonb = '5'::jsonb
-- Например так:
SELECT '["a", "b", 77]'::jsonb != '["a", "b",
77.00000000000000000000001]'::jsonb;
-- Конечно же, нули в конце не имеют значения:
SELECT '66'::jsonb = '66.000'::jsonb;
-- Строковые примитивы ведут себя как постгресовые строки:
SELECT j FROM jdocs ORDER BY j->'name' LIMIT 10;
«Теневая» типизация в jsonb
Индексы
● линейный поиск, перебор (seqscan)
- O(n)
● двоичное дерево
● АВЛ-деревья
● хэш
Как искать?
● B+-деревья
○ <, >, =
● R-деревья
○ включён, включает,
пересекается
● GiST — обобщённое дерево!
Hellerstein, 1995
○ произвольные операторы
○ реализовано в PostgreSQL
Как искать:
ближе к СУБД, ближе к PostgreSQL
По сравнению с GiST:
● намного быстрее поиск
● медленнее вставка
GIN - обобщённый
инвертированный индекс
● opclass (operator class) – «связь»
между типом данных и индексом
● btree, hash — опклассы «по
умолчанию» для скалярных типов
→ можно строить функциональные
индексы над JSON и JSONb
CREATE INDEX i_test ON table1 USING (btree(выражение));
PostgreSQL: opclass-ы
● опкласс по умолчанию
CREATE INDEX i_test ON table1
USING gin(jcol);
● jsonb_path_ops
CREATE INDEX i_test ON table1
USING gin(jcol jsonb_path_ops);
○ НАМНОГО меньше места
○ не поддерживает оператор «?»
(«существует»), т.е. менее гибок,
чем опкласс по умолчанию
GIN-индексирование jsonb
jsonb @> jsonb — содержит ли значение слева в себе значение
справа?
'{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
jsonb <@ jsonb — содержится ли левое значение внутри правого
значения?
'{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
jsonb ? text — существует ли пара ключ-значение в JSON-значении?
'{"a":1, "b":2}'::jsonb ? 'b'
?| text[] — существуют ли хоть какие-то из эти пар ключ-значение?
'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']
?& text[] — существуют ли все приведённые пары ключ-значение?
'["a", "b"]'::jsonb ?& array['a', 'b']
jsonb: базовые операторы
● jsonb_path_ops лучше подходит
для вложенных структур, чем
«дефолтовый» GIN
● почти всегда лучше выбрать
jsonb_path_ops, но внимательнее
с используемыми операторами!
● можно использовать
«функциональный» подход для
сужения области индексации!
см. далее
Индекс для JSONb — что выбрать?
Сравнение опклассов GIN
для jsonb
● БД Delicios
● Табличный размер jsonb: 1.3 GB
● «Дефолтовый» jsonb_ops: 636 MB
(без компрессии — 815 MB)
● jsonb_path_ops: 295 MB
● jsonb_path_ops (tags): 44 MB
… USING gin((jb->'tags') jsonb_path_ops)
● jsonb_path_ops (tags.term): 1.6 MB
Сравнение опклассов
+ Mongo
Подробнее — http://postgresmen.ru/meetup/2014-09-24-yandex
Сравнение от EnterpriseDB
● по-прежнему ОРСУБД, очень гибкая,
надёжная и производительная
● платформа для разработки решений
различной сложности и гибкости
Что же такое PostgreSQL?
Кто использует
в России
● О. Бартунов и А. Коротков, JSONb. Материалы митапа в Яндексе.
http://postgresmen.ru/meetup/2014-09-24-yandex
● Peter Geoghegan. jsonb Deep Dive. Материалы митапа в Сан-
Франциско (англ.) https://speakerd.s3.amazonaws.
com/presentations/a79cd060deb20131ffed2ad9291baba4/jsonb-
deep-dive.pdf
● PostgreSQL as a Schemaless Database. Christophe Pettus
PostgreSQL Experts, Inc. (англ.) http://thebuild.
com/presentations/pg-as-nosql-pgday-fosdem-2013.pdf
● Open Enterprise: The PostgreSQL Open Source Database Blog from
EnterpriseDB http://blogs.enterprisedb.com/2014/09/24/postgres-
outperforms-mongodb-and-ushers-in-new-developer-reality/
● Крис Дейт. Введение в системы баз данных http://www.ozon.
ru/context/detail/id/2309312/
● Материалы митапов #PostgreSQLRussia http://postgresmen.
ru/articles
Ссылки
ru@postgresql.org
Twitter: @samokhvalov
Skype: postgresmen
http://PostgreSQLRussia.org
http://Postgresmen.ru
Николай Самохвалов
Спасибо!

More Related Content

What's hot

MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. LuceneVadim Tsesko
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4Gleb Lebedev
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовMax Lapshin
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Badoo Development
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDBVadim Tsesko
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единымAlexander Byndyu
 
МойСклад, облачный сервис ERP
МойСклад, облачный сервис ERPМойСклад, облачный сервис ERP
МойСклад, облачный сервис ERPOleg Alexeev
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Alexey Zinoviev
 
Сравнение парсеров Json. Android SDK, Gson, Jackson
Сравнение парсеров Json. Android SDK, Gson, JacksonСравнение парсеров Json. Android SDK, Gson, Jackson
Сравнение парсеров Json. Android SDK, Gson, JacksonArtjoker
 

What's hot (20)

MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. Lucene
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4
 
ClickHouse
ClickHouseClickHouse
ClickHouse
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядов
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единым
 
МойСклад, облачный сервис ERP
МойСклад, облачный сервис ERPМойСклад, облачный сервис ERP
МойСклад, облачный сервис ERP
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Сравнение парсеров Json. Android SDK, Gson, Jackson
Сравнение парсеров Json. Android SDK, Gson, JacksonСравнение парсеров Json. Android SDK, Gson, Jackson
Сравнение парсеров Json. Android SDK, Gson, Jackson
 
Romanenko
RomanenkoRomanenko
Romanenko
 

Viewers also liked

PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Коваль
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав КовальPG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Коваль
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Ковальpgdayrussia
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Nikolay Samokhvalov
 
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyPostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyNikolay Samokhvalov
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Nikolay Samokhvalov
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovPostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovNikolay Samokhvalov
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 

Viewers also liked (9)

20071113 Msu Vasenin Seminar
20071113 Msu Vasenin Seminar20071113 Msu Vasenin Seminar
20071113 Msu Vasenin Seminar
 
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Коваль
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав КовальPG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Коваль
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Коваль
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya KosmodemyanskyPostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
 
2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay SamokhvalovPostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
 

Similar to 2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4

Дмитрий Долгов
Дмитрий ДолговДмитрий Долгов
Дмитрий ДолговCodeFest
 
Multimodel Database Caché
Multimodel Database CachéMultimodel Database Caché
Multimodel Database CachéTimur Safin
 
MongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеMongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеUladzimir Kryvenka
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)it-people
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?Tim Mironov
 
Работа с геоданными в MongoDb
Работа с геоданными в MongoDbРабота с геоданными в MongoDb
Работа с геоданными в MongoDbOSLL
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловКраткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловYandex
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...it-people
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Ontico
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 

Similar to 2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4 (20)

Дмитрий Долгов
Дмитрий ДолговДмитрий Долгов
Дмитрий Долгов
 
Multimodel Database Caché
Multimodel Database CachéMultimodel Database Caché
Multimodel Database Caché
 
MongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеMongoDB. Фокус на тестирование
MongoDB. Фокус на тестирование
 
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
DUMP-2012 - Базы данных - "MongoDB" Тимофей Миронов (Timeliner)
 
MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?MongoDB. Как готовить, с чем едят?
MongoDB. Как готовить, с чем едят?
 
Работа с геоданными в MongoDb
Работа с геоданными в MongoDbРабота с геоданными в MongoDb
Работа с геоданными в MongoDb
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай СамохваловКраткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 

More from Nikolay Samokhvalov

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseNikolay Samokhvalov
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1Nikolay Samokhvalov
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...Nikolay Samokhvalov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussiaNikolay Samokhvalov
 
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander KorotkovPostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander KorotkovNikolay Samokhvalov
 
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.320080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.3Nikolay Samokhvalov
 
20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News BartunovNikolay Samokhvalov
 
20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 SamokhvalovNikolay Samokhvalov
 
20080415 Rit2008 Postgresql8.3 Zolotukhin
20080415 Rit2008 Postgresql8.3 Zolotukhin20080415 Rit2008 Postgresql8.3 Zolotukhin
20080415 Rit2008 Postgresql8.3 ZolotukhinNikolay Samokhvalov
 
20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov
20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov
20080330 Postgresqlconference2008 Pg In Web2.0 SamokhvalovNikolay Samokhvalov
 

More from Nikolay Samokhvalov (20)

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database Experiments
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander KorotkovPostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
 
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.320080214 Rupg Meeting1 Whatisnewpostgresql8.3
20080214 Rupg Meeting1 Whatisnewpostgresql8.3
 
20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News Bartunov
 
20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov20080424 Cdb2008 Postgresql8.3 Samokhvalov
20080424 Cdb2008 Postgresql8.3 Samokhvalov
 
20080415 Rit2008 Postgresql8.3 Zolotukhin
20080415 Rit2008 Postgresql8.3 Zolotukhin20080415 Rit2008 Postgresql8.3 Zolotukhin
20080415 Rit2008 Postgresql8.3 Zolotukhin
 
20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov
20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov
20080330 Postgresqlconference2008 Pg In Web2.0 Samokhvalov
 

2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4

  • 1. #PostgreSQLRussia Москва, 23.12.2014 PostgreSQL-митап в офисе компании Parallels Ещё раз о JSON(b) в PostgreSQL 9.4 Николай Самохвалов ru@postgresql.org Twitter: @samokhvalov
  • 2. ● 1998-2007: МФТИ & ИСП РАН ● 2006: XML в PostgreSQL (8.3, c Peter Eisentraut) ● с 2007 — «Постгресмен», пресс- контакт PGDG в России, Highload++ ● с 2006 — стартапы, ● социальные сети Обо мне
  • 3. ● ГАИШ МГУ ● PostgreSQL hackers, ● major contributors: ○ GiST, GIN ○ hstore, intarray, etc ○ full-text search ○ kNN-search ○ JSON, JSONb Олег Бартунов и Фёдор Сигаев
  • 4. ● развитие GiST & GIN ● jsquery https://github.com/akorotkov/jsquery + Александр Коротков
  • 5. JSONb: + Andrew Dunstan & Peter Geoghegan
  • 6. РСУБД, SQL и все-все-все
  • 10. ● Иерархическая и сетевая: 50-е … середина 70-х ● Реляционная: конец 60-х … н.в. ○ реляционная алгебра Модели данных: история Edgar Codd — основал (1969-1970) Chris Date — развил, популяризировал
  • 11. Модели данных: хронология ● Иерархическая и сетевая: 50-е … середина 70-х ● Реляционная: конец 60-х … н.в. ○ структура (отношения, кортежи) ○ целостность ○ манипуляции (рел. алгебра / рел. исчисление) ○ принцип ACID ○ SQL — с 1970-х (ANSI: 1986, ISO: 1987) PostgreSQL — преемник Ingres (UCB - Berkeley, CA), SQL – с 1995
  • 13. Реляционная модель: вызов #1 ● Реляционная: конец 60-х … н.в. ○ реляционная алгебра ● 90е — вызов #1: реляционная модель VS объектная модель → объектные СУБД, объектно-реляционный подход PostgreSQL — объектно-реляционная СУБД: ● объекты: БД, схемы, таблицы, индексы и т.д. ● расширяемость: типы данных, операторы, методы доступа ● наследование
  • 14. Реляционная модель: вызов #2 ● Реляционная: конец 60-х … н.в. ○ реляционная алгебра ● 90е — вызов #1: реляционная модель VS объектная модель ● конец 90-х … середина 2000-х — вызов #2: XML («слабоструктурированные», иерархия!) → интеграция XML, XML СУБД 2008: PostgreSQL 8.3 — тип данных XML
  • 15. Реляционная модель: вызов #2 ● Реляционная: конец 60-х … н.в. ● 90е — вызов #1: реляционная модель VS объектная модель ● конец 2000-х — 2010-е — вызов #2: noSQL → noSQL СУБД: key-value, document-oriented и т.д. — «очень» слабоструктурированные (иерархии! графы!) 2003: тип данных hstore 2012: PostgreSQL 9.2 — тип данных JSON 2014: PostgreSQL 9.4 — тип данных JSONb
  • 16. Пары ключ-значение (без вложенности) SELECT * FROM test LIMIT 1; id | value ----+-------------------------------------------------------------------- 1 | "33"=>"923", "262"=>"181", "471"=>"658", "554"=>"916", "579"=>"472" ● Бинарное хранение ● Богатая поддержка индексов (см. далее) ○ функциональные индексы ○ GiST ○ GIN hstore: хранение key-value в реляционной среде Schema-less PostgreSQL
  • 17. ● Хранится в виде текста (как и XML) ● Сохраняет представление ○ порядок, ○ пробелы, ○ дубликаты) ● Индексы — только функциональные JSON в PostgreSQL
  • 18. ● Хранится бинарном виде /* как и hstore */ ● Убираются пробелы ● Убираются дубликаты (берутся последние значения) ● Ключи сортируются /* внутренняя кухня, порядок не определён */ ○ быстрый поиск ● Результат — в PostgreSQL 9.4 есть все эти типы: ○ hstore ○ XML ○ JSON ○ JSONb JSONb в PostgreSQL
  • 19. -- JSONовскый примитивный тип данных "число" — аналог NUMERIC: SELECT '5'::jsonb = '5'::jsonb -- Например так: SELECT '["a", "b", 77]'::jsonb != '["a", "b", 77.00000000000000000000001]'::jsonb; -- Конечно же, нули в конце не имеют значения: SELECT '66'::jsonb = '66.000'::jsonb; -- Строковые примитивы ведут себя как постгресовые строки: SELECT j FROM jdocs ORDER BY j->'name' LIMIT 10; «Теневая» типизация в jsonb
  • 21. ● линейный поиск, перебор (seqscan) - O(n) ● двоичное дерево ● АВЛ-деревья ● хэш Как искать?
  • 22. ● B+-деревья ○ <, >, = ● R-деревья ○ включён, включает, пересекается ● GiST — обобщённое дерево! Hellerstein, 1995 ○ произвольные операторы ○ реализовано в PostgreSQL Как искать: ближе к СУБД, ближе к PostgreSQL
  • 23. По сравнению с GiST: ● намного быстрее поиск ● медленнее вставка GIN - обобщённый инвертированный индекс
  • 24. ● opclass (operator class) – «связь» между типом данных и индексом ● btree, hash — опклассы «по умолчанию» для скалярных типов → можно строить функциональные индексы над JSON и JSONb CREATE INDEX i_test ON table1 USING (btree(выражение)); PostgreSQL: opclass-ы
  • 25. ● опкласс по умолчанию CREATE INDEX i_test ON table1 USING gin(jcol); ● jsonb_path_ops CREATE INDEX i_test ON table1 USING gin(jcol jsonb_path_ops); ○ НАМНОГО меньше места ○ не поддерживает оператор «?» («существует»), т.е. менее гибок, чем опкласс по умолчанию GIN-индексирование jsonb
  • 26. jsonb @> jsonb — содержит ли значение слева в себе значение справа? '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb jsonb <@ jsonb — содержится ли левое значение внутри правого значения? '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb jsonb ? text — существует ли пара ключ-значение в JSON-значении? '{"a":1, "b":2}'::jsonb ? 'b' ?| text[] — существуют ли хоть какие-то из эти пар ключ-значение? '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c'] ?& text[] — существуют ли все приведённые пары ключ-значение? '["a", "b"]'::jsonb ?& array['a', 'b'] jsonb: базовые операторы
  • 27. ● jsonb_path_ops лучше подходит для вложенных структур, чем «дефолтовый» GIN ● почти всегда лучше выбрать jsonb_path_ops, но внимательнее с используемыми операторами! ● можно использовать «функциональный» подход для сужения области индексации! см. далее Индекс для JSONb — что выбрать?
  • 28. Сравнение опклассов GIN для jsonb ● БД Delicios ● Табличный размер jsonb: 1.3 GB ● «Дефолтовый» jsonb_ops: 636 MB (без компрессии — 815 MB) ● jsonb_path_ops: 295 MB ● jsonb_path_ops (tags): 44 MB … USING gin((jb->'tags') jsonb_path_ops) ● jsonb_path_ops (tags.term): 1.6 MB
  • 29. Сравнение опклассов + Mongo Подробнее — http://postgresmen.ru/meetup/2014-09-24-yandex
  • 31. ● по-прежнему ОРСУБД, очень гибкая, надёжная и производительная ● платформа для разработки решений различной сложности и гибкости Что же такое PostgreSQL?
  • 33. ● О. Бартунов и А. Коротков, JSONb. Материалы митапа в Яндексе. http://postgresmen.ru/meetup/2014-09-24-yandex ● Peter Geoghegan. jsonb Deep Dive. Материалы митапа в Сан- Франциско (англ.) https://speakerd.s3.amazonaws. com/presentations/a79cd060deb20131ffed2ad9291baba4/jsonb- deep-dive.pdf ● PostgreSQL as a Schemaless Database. Christophe Pettus PostgreSQL Experts, Inc. (англ.) http://thebuild. com/presentations/pg-as-nosql-pgday-fosdem-2013.pdf ● Open Enterprise: The PostgreSQL Open Source Database Blog from EnterpriseDB http://blogs.enterprisedb.com/2014/09/24/postgres- outperforms-mongodb-and-ushers-in-new-developer-reality/ ● Крис Дейт. Введение в системы баз данных http://www.ozon. ru/context/detail/id/2309312/ ● Материалы митапов #PostgreSQLRussia http://postgresmen. ru/articles Ссылки