SlideShare una empresa de Scribd logo
1 de 56
CacheConf
InterSystems Caché
многомодельная СУБД
Тимур Сафин
Intersystems Corporation
Gartner Magic Quadrant СУБД - 2014
Gartner Magic Quadrant for Operational Database Management Systems,” by analysts Donald Feinberg, Merv Adrian, and
Nick Heudecker, October 2014
Попытка
классификации
Классификация рынка СУБД
© Апрель 2011, 451 Research
Data Platform Landscape Map – February 2014
NOSQL Concept Tree
Первоисточник: CIO’s Guide to NOSQL, Dan McCreary, June 2012
Модели данных
Docum
ent
Mongo
Couch
Rethink
DB
OrientD
B
Key-
Value
Redis
Hadoop
Graph
Neo4j
OrientD
B
Titan
Relatio
nal
Oracle
DB2
Sybase
Column
ar
SybaseI
Q
Cassand
ra
Hyperta
ble
Hbase/
Hadoop
Hierarchi
cal
Caché
GT.M
• Работа через поиск значений по
заданному скалярному ключу
• Нет структуры и отношений
• Доступ к данным только через
первичный ключ
• Быстрые и легко масштабируемые
Базы данных «ключ-значение»
Redis CachéHadoop
• Используют структуры типа графа с
узлами, где связи представляют
отношения
• Определенные операции значительно
проще реализовать – социальные сети
• Справляется со сложными схемами
отношений.
«Графовые» базы данных
Redis CachéHadoopNeo4j TitanOrientDB
• Простой способ хранения коллекций из
1 или более пар «ключ-значение»,
подходящих записи.
• Данные логически относящиеся к
одной записи, но не используемые
вместе, хранятся отдельно.
• Версионирование строк и/или
значений.
«Колоночные» базы данных
• Можно запрашивать определенные
атрибуты данных, пропуская
нерелевантные данные строка за
строкой.
• Хорошее масштабирование данных.
«Колоночные» базы данных
Redis CachéHadoopSybaseIQ HypertableCassandra
HBase
• Работают похоже на «ключ-значение»
• Позволяют более глубокое вложение и
сложные структуры.
• Возможно сохранить структуры любой
сложности.
«Документные» базы данных
Mongo
Couch RethinkDBOrientDB
Caché
• Значение, сохраняемые в базе имеют
структуру: XML, JSON, BSON
• Самое важное, что чаще всего
документные базы используют JSON
структуры данных, удобные для
применения в JavaScript.
«Документные» базы данных
• JSON – сокращение “JavaScript Object
Notation”
– Синтаксис, позволяющий представлять данные и
подразумеваемую модель данных
– Текстовое представление структур данных
JavaScript (вложенные массивы, вложенные
объекты, и т.д.)
JSON
• Модель данных в первую очередь
основанная на объектах и массивах.
– Объект JSON – 0 и более пар «ключ-значение»,
заключается в фигурные скобки { }
– Массив JSON – упорядоченная
последовательность 0 и более значений,
заключается в квадратные скобки []
JSON
• Пример документа JSON document:
JSON
{
"Name" : "John Smith",
"address" : {
"streetAddress": "21 2nd Street",
"city" : "New York",
"state" : "NY",
"postalCode" : 10021
},
"phoneNumber" :
[
{ "type" : "home", "number": "212 555-1234" },
{ "type" : "fax", "number": "646 555-4567" }
]
}
Объекты? Таблицы?
Документы?
Хранение объектов в глобалах
RIT.Sample
+Name: String
+Address: RIT.Address
+Spouse: RIT.Sample
RIT.Address
+City: String
+State: String
RIT.SampleD(1)={"Isaksen,Ashley F.",{"Moscow",“N/A“},10}
RIT.SampleD(2)={"Eagleman,Umberto H.",{“Cambridge","MA“},20}
RIT.SampleD(3)={"Lepon,Quigley I.",{“Boston","MA“},9}
RIT.SampleD(4)={"Quine,Usha S.",{“Boston","MA“},15}
…
Хранение реляционных данных
RIT.Sample
+Name: String
+Address: RIT.Address
+Spouse: RIT.Sample
RIT.Address
+City: String
+State: String
highload.SampleD(1)={"Isaksen,Ashley F.",{"Moscow",“N/A“},10}
highload.SampleD(2)={"Eagleman,Umberto H.",{“Cambridge","MA“},20}
highload.SampleD(3)={"Lepon,Quigley I.",{“Boston","MA“},9}
highload.SampleD(4)={"Quine,Usha S.",{“Boston","MA“},15}
…
select * from hse.Sample
ID Name Spouse Home_City Home_State
1 Isaksen,Ashley F. 10 Moscow N/A
2 Eagleman,Umberto H. 20 Cambridge MA
3 Lepon,Quigley I. 9 Boston MA
4 Quine,Usha S. 15 Boston MA
В рамках модели данных Caché
реляционные данные –
семантически эквивалентны
объектам
Классы = Таблицы
<Person>
<Name>Isaksen,Ashley F.</Name>
<Address>
<City>Moscow</City>
<State>N/A</State>
</Address>
</Person>
<Person>
<Name>Eagleman,Umberto
H.</Name>
<Address>
<City>Cambridge</City>
<State>MA</State>
</Address>
</Person>
<Person>
<Name>Lepon,Quigley I.</Name>
<Address>
<City>Boston</City>
<State>MA</State>
</Address>
</Person>
<Person>
<Name>Quine,Usha S.</Name>
<Address>
<City>Boston</City>
<State>MA</State>
</Address>
</Person>
XML проекция объектов
Не является ли XML проекция таким же
видом сериализации как и JSON?
Но…
“At the March 11-12 2014 INCITS DM32.2
(Databases) meeting, DM32.2 voted to submit
two SQL/JSON proposals for the June 2014
meeting of ISO/IEC JTC1 SC32 WG3 (Database
Languages).”
• WG3:PEK-028 (DM32.2-2014-00024r1)
SQL/JSON part 1
• WG3:PEK-029 (DM32.2-2014-00025r1)
SQL/JSON part 2
JSON приходит в SQL standard
Caché как
документная база
Храня любую топологию дерева
объектов…
• Caché будет поддерживать JSON
нативно, конвертирую любое
представление из/в JSON в/из
динамические объекты.
• JSON – не является форматом хранения
– JSON и XML – только форматы сериализации;
– Гибкость в поддерживаемых форматах при
сохранении эффективности в хранении
Поддержка JSON
• Будет поддерживать операции CRUD
(Create, Retrieve, Update, Delete)
• Документы сохраняются в
персистентные коллекции документов.
• Caché – контейнер для хранения
коллекций
Caché как документная БД
• БД это документ, содержащий массив
коллекций.
• Коллекция определяет контейнер для
документов, индексов документов, и
метаданных о множестве документов из
данной коллекции
Коллекция
• Нет требования, чтобы документы в
коллекции разделяли общую
структуру, но обычно это так.
• Коллекции документов начинают
сохраняться когда первый документ
вставляется в коллекцию.
Коллекция
В Caché DocumentDB JSON объекты
создаются при помощи следующих
классов*
JSON – динамические объекты
##class(%Object).%New()
##class(%Array).%New()
##class(%Vector).%ParseJSON()
*Могут измениться в окончательной версии
JSON в SQL?
• Не вводят новых типов данных в SQL
• JSON документы хранятся как значения
строчного типа, например,VARCHAR,
CLOB, VARBINARY, или BLOB и т.п.
JSON расширения в SQL
CREATE TABLE employees (
emp_id INTEGER,
department INTEGER,
emp_json VARCHAR (5000)
)
• Создаются документы JSON из
результатов SQL запросов, типа:
– JSON_OBJECT
– JSON_OBJECTAGG
– JSON_ARRAY
– JSON_ARRAYAGG
JSON расширения в SQL
• Запрос возвращает строку каждого
отдела записанного в таблице DEPTS;
• Строка содержит колонку, в которой
JSON объект сериализован, и содержит
номер отдела и название
JSON_OBJECT
SELECT
JSON_OBJECT( 'deptno' : deptno, 'deptname' :
deptname )
FROM depts
{ "deptno" : 314,"deptname" : "Engineering" }
• В качестве результата запроса будут
возвращены 4 строки, по две колонки
в каждой
JSON_OBJECTAGG
SELECT job_seq,
JSON_OBJECTAGG( job_attrib, job_attval RETURNING VARCHAR(80)
) AS attributes
FROM jobs
101 { "Leader" : "155566", "Duration" : "00:30:00", "Description"
: " Design the new tables for the web site " }
234 { "Duration" : "01:00:00", "Description" : "Load the tables
with existing data" }
492 { "Leader" : "129596" }
17 { "Description" : " Design the look-and-feel of the web site"
• В результате запрос возвращает JSON
массив с 0 и более элементов
JSON_ARRAY
SELECT JSON_ARRAY( 'deptno', deptno, 'deptname',
deptname ) FROM depts
[ "deptno", 314, "deptname", "Engineering" ]
• Агрегатная функция, создает JSON
массив с 0 и более элементов, из строк
группированного запроса
JSON_ARRAYAGG
SELECT emp_id, JSON_ARRAYAGG(number) AS
numbers
FROM phones GROUP BY emp_id
123 ["555-1234", "555-9876", "555-4455"]
• Встроенные SQL функции для запроса
по JSON данным
– JSON_TABLE: возвращает SQL таблицу
– JSON_QUERY: возвращает строчное SQL
значение, которое соответствует JSON объекту
или JSON массиву
– JSON_VALUE: возвращает скалярное SQL
значение
SQL расширения для JSON данных
• Доступны новые предикаты по JSON
данным
– IS JSON
– JSON_EXISTS
SQL расширения для JSON данных
JSON проще?
• $MethodName
• Новый синтаксис для инициализации
JSON литералов
• Встроенные выражения
Как сделать работу с JSON лучше?
Set array = [ 1,2,3,4 ]
Set array = [ 1,x,y*2,"string",x_","_y ]
Set object = { "forename":"Joe", “surname”:"Blogs" }
Set array = [ (a]b) , (a]]b) ]
Set array = [ 1, { “name”: forename_" "_surname }, val**2, { “var”: [ 1,
x*y ] } ]
Set object={ “name”: forename_" "_surname, “sub”: [ { “var”: "val" }, 5,
(a]b) ] }
Do ..Method([1,2,3], { “var”: "val" })
set topTen =
##class(%Array).$new()
set player =
##class(%Object).$new()
set player.Rank = 1
set player.FirstName =
"Novak"
set player.LastName =
"Djokovic"
set player.Country = "Serbia"
set player.Points = 13165
set grandSlams =
##class(%Array).$new()
set slam =
##class(%Object).$new()
set slam.Wimbledon = 2
do grandSlams.$push(slam)
set slam =
##class(%Object).$new()
set slam.USOpen = 1
do grandSlams.$push(slam)
set slam =
##class(%Object).$new()
set slam."Australian Open" =
5
do grandSlams.$push(slam)
set player."Grand Slams" =
grandSlams
set player.DOB =
$zdth("05/22/1987")
do topTen.$push(player)
Встроенный JSON
set topTen = [{"Rank":1, "FirstName":
"Novak", "LastName": "Djokovic", "Country":
"Serbia", "Points": 13165, "Grand Slams":
[{"Wimbledon":2},{"USOpen":1}, {"Australian
Open":5}],"DOB": $zdth("05/22/1987")}]
JSON быстрее?
• Перенести разбор в ядро
• Уменьшить накладные расходы по
памяти
• Работает уже сейчас (2015.2)
Как сделать JSON быстрее?
Как быстрее?
Модели данных в Caché
Многомерное API глобалов
Relational
SQL
ODBC
JDBC
Object
ActiveX
.NET
Java
C++
Multi-Value
MVBasic
Hierarchical
Caché
ObjectScript
DocumentDB
DocDB
Graph
Globals
Graph API
B-tree и
компания
B-Tree
“Designing data-intensive applications”, Martin Kleppmann,
O’Reilly
SSTable, MemTable и LSM-Tree
“Designing data-intensive applications”, Martin Kleppmann,
O’Reilly
Fractal-Tree
“MongoDB and Fractal Tree® Indexes”,
Tim Callaghan, TokuTek
BW-Tree
Page P
PID Physical
Address
P
Mapping Table
Δ: Insert record 50
Δ: Delete record 48
Δ: Update record 35
“Consolidated” Page P
“The BW-Tree: A B-tree for New Hardware Platforms”,
Justin Levandoski, David Lomet, Sudipta Sengupta,
Microsoft Research
Так какой же Caché?
Иерархическое хранилище
InterSystems Caché работает
на основе B*-tree движка
B*-tree
Block 3 Type 9 global dir.
Offset 684, link 0
^A 45
^C 44
^FCE.BranchD 40
…
Block 44, Type 66 top pointer, link 0
^C 47 ^C(5446,50,"") 46
Block 47, Type 6 bottom pointer, link 46
^C 286 ^C(9,52,"g") 288 … 865 ^C(5436,46,"w") 866
Block 46 Type 6 bottom pointer , link 0
^C(5446,50,"") 867 … 1345 ^C(9996,46,"w") 1346
Block 286, Type 8 data
link 288
^C
^C(1) skirt,rodeo
^C(1,46) 10$
^C(1,46,black) 1
…
^C(9,52,blue) 15
Block 288, Type 8 data
link 289
^C(9,52,green) 9
^C(9,52,red) 12
^C(9,52,white) 12
^C(9,52,yellow) 19
…
^C(17,58,red) 19
Block 1346, Type 8 data
link 0
^C(9996,46,white) 10
^C(9996,46,yellow) 12
^C(9996,48) 15$
^C(9996,48,black) 1
…
^C(10000,58,yellow) 15
… …
Intersystems Caché – мультимодельная
платформа БД …
• Иерархическое хранилище B*-tree
поддерживает как объектный,
реляционный, так и множество NoSQL
видов доступа (key-value, document) …
Итак…

Más contenido relacionado

La actualidad más candente

Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest
 
Apache Spark — Егор Пахомов
Apache Spark — Егор ПахомовApache Spark — Егор Пахомов
Apache Spark — Егор ПахомовYandex
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотекаVasya Petrov
 
Индексирование многомерных данных
Индексирование многомерных данныхИндексирование многомерных данных
Индексирование многомерных данныхStas Kelvich
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...HappyDev
 
Индексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashИндексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashAndrew Zavadsky
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 

La actualidad más candente (10)

Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
 
Vba 06
Vba 06Vba 06
Vba 06
 
Apache Spark — Егор Пахомов
Apache Spark — Егор ПахомовApache Spark — Егор Пахомов
Apache Spark — Егор Пахомов
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотека
 
Индексирование многомерных данных
Индексирование многомерных данныхИндексирование многомерных данных
Индексирование многомерных данных
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
Индексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashИндексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и Logstash
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 

Similar a Multimodel Database Caché

Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015Timur Safin
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...CodeFest
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4Gleb Lebedev
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko
 
MongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеMongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеUladzimir Kryvenka
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + RetrofitDev2Dev
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннахracoons
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)Andrey Gershun
 

Similar a Multimodel Database Caché (20)

Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...
CodeFest 2014. Бартунов О. — Hstore — документо-ориентированное хранилище и д...
 
Новое в Mongodb 2.4
Новое в Mongodb 2.4Новое в Mongodb 2.4
Новое в Mongodb 2.4
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, списки
 
Vba 07
Vba 07Vba 07
Vba 07
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
MongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеMongoDB. Фокус на тестирование
MongoDB. Фокус на тестирование
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннах
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreData
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
 

Más de Timur Safin

Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Go vs C++ - CppRussia 2019 Piter BoF
Go vs C++ - CppRussia 2019 Piter BoFGo vs C++ - CppRussia 2019 Piter BoF
Go vs C++ - CppRussia 2019 Piter BoFTimur Safin
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
 
Native json in the Cache' ObjectScript 2016.*
Native json in the Cache' ObjectScript 2016.*Native json in the Cache' ObjectScript 2016.*
Native json in the Cache' ObjectScript 2016.*Timur Safin
 
InterSystems iKnow and Twitter API
InterSystems iKnow and Twitter APIInterSystems iKnow and Twitter API
InterSystems iKnow and Twitter APITimur Safin
 
Implementation of community package manager
Implementation of community package managerImplementation of community package manager
Implementation of community package managerTimur Safin
 
Approaching package manager
Approaching package managerApproaching package manager
Approaching package managerTimur Safin
 

Más de Timur Safin (7)

Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
Go vs C++ - CppRussia 2019 Piter BoF
Go vs C++ - CppRussia 2019 Piter BoFGo vs C++ - CppRussia 2019 Piter BoF
Go vs C++ - CppRussia 2019 Piter BoF
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоны
 
Native json in the Cache' ObjectScript 2016.*
Native json in the Cache' ObjectScript 2016.*Native json in the Cache' ObjectScript 2016.*
Native json in the Cache' ObjectScript 2016.*
 
InterSystems iKnow and Twitter API
InterSystems iKnow and Twitter APIInterSystems iKnow and Twitter API
InterSystems iKnow and Twitter API
 
Implementation of community package manager
Implementation of community package managerImplementation of community package manager
Implementation of community package manager
 
Approaching package manager
Approaching package managerApproaching package manager
Approaching package manager
 

Multimodel Database Caché

  • 2. Gartner Magic Quadrant СУБД - 2014 Gartner Magic Quadrant for Operational Database Management Systems,” by analysts Donald Feinberg, Merv Adrian, and Nick Heudecker, October 2014
  • 4. Классификация рынка СУБД © Апрель 2011, 451 Research
  • 5.
  • 6.
  • 7. Data Platform Landscape Map – February 2014
  • 8. NOSQL Concept Tree Первоисточник: CIO’s Guide to NOSQL, Dan McCreary, June 2012
  • 10. • Работа через поиск значений по заданному скалярному ключу • Нет структуры и отношений • Доступ к данным только через первичный ключ • Быстрые и легко масштабируемые Базы данных «ключ-значение» Redis CachéHadoop
  • 11. • Используют структуры типа графа с узлами, где связи представляют отношения • Определенные операции значительно проще реализовать – социальные сети • Справляется со сложными схемами отношений. «Графовые» базы данных Redis CachéHadoopNeo4j TitanOrientDB
  • 12. • Простой способ хранения коллекций из 1 или более пар «ключ-значение», подходящих записи. • Данные логически относящиеся к одной записи, но не используемые вместе, хранятся отдельно. • Версионирование строк и/или значений. «Колоночные» базы данных
  • 13. • Можно запрашивать определенные атрибуты данных, пропуская нерелевантные данные строка за строкой. • Хорошее масштабирование данных. «Колоночные» базы данных Redis CachéHadoopSybaseIQ HypertableCassandra HBase
  • 14. • Работают похоже на «ключ-значение» • Позволяют более глубокое вложение и сложные структуры. • Возможно сохранить структуры любой сложности. «Документные» базы данных Mongo Couch RethinkDBOrientDB Caché
  • 15. • Значение, сохраняемые в базе имеют структуру: XML, JSON, BSON • Самое важное, что чаще всего документные базы используют JSON структуры данных, удобные для применения в JavaScript. «Документные» базы данных
  • 16. • JSON – сокращение “JavaScript Object Notation” – Синтаксис, позволяющий представлять данные и подразумеваемую модель данных – Текстовое представление структур данных JavaScript (вложенные массивы, вложенные объекты, и т.д.) JSON
  • 17. • Модель данных в первую очередь основанная на объектах и массивах. – Объект JSON – 0 и более пар «ключ-значение», заключается в фигурные скобки { } – Массив JSON – упорядоченная последовательность 0 и более значений, заключается в квадратные скобки [] JSON
  • 18. • Пример документа JSON document: JSON { "Name" : "John Smith", "address" : { "streetAddress": "21 2nd Street", "city" : "New York", "state" : "NY", "postalCode" : 10021 }, "phoneNumber" : [ { "type" : "home", "number": "212 555-1234" }, { "type" : "fax", "number": "646 555-4567" } ] }
  • 20. Хранение объектов в глобалах RIT.Sample +Name: String +Address: RIT.Address +Spouse: RIT.Sample RIT.Address +City: String +State: String RIT.SampleD(1)={"Isaksen,Ashley F.",{"Moscow",“N/A“},10} RIT.SampleD(2)={"Eagleman,Umberto H.",{“Cambridge","MA“},20} RIT.SampleD(3)={"Lepon,Quigley I.",{“Boston","MA“},9} RIT.SampleD(4)={"Quine,Usha S.",{“Boston","MA“},15} …
  • 21. Хранение реляционных данных RIT.Sample +Name: String +Address: RIT.Address +Spouse: RIT.Sample RIT.Address +City: String +State: String highload.SampleD(1)={"Isaksen,Ashley F.",{"Moscow",“N/A“},10} highload.SampleD(2)={"Eagleman,Umberto H.",{“Cambridge","MA“},20} highload.SampleD(3)={"Lepon,Quigley I.",{“Boston","MA“},9} highload.SampleD(4)={"Quine,Usha S.",{“Boston","MA“},15} … select * from hse.Sample ID Name Spouse Home_City Home_State 1 Isaksen,Ashley F. 10 Moscow N/A 2 Eagleman,Umberto H. 20 Cambridge MA 3 Lepon,Quigley I. 9 Boston MA 4 Quine,Usha S. 15 Boston MA
  • 22. В рамках модели данных Caché реляционные данные – семантически эквивалентны объектам Классы = Таблицы
  • 24. Не является ли XML проекция таким же видом сериализации как и JSON? Но…
  • 25. “At the March 11-12 2014 INCITS DM32.2 (Databases) meeting, DM32.2 voted to submit two SQL/JSON proposals for the June 2014 meeting of ISO/IEC JTC1 SC32 WG3 (Database Languages).” • WG3:PEK-028 (DM32.2-2014-00024r1) SQL/JSON part 1 • WG3:PEK-029 (DM32.2-2014-00025r1) SQL/JSON part 2 JSON приходит в SQL standard
  • 27. Храня любую топологию дерева объектов… • Caché будет поддерживать JSON нативно, конвертирую любое представление из/в JSON в/из динамические объекты. • JSON – не является форматом хранения – JSON и XML – только форматы сериализации; – Гибкость в поддерживаемых форматах при сохранении эффективности в хранении Поддержка JSON
  • 28. • Будет поддерживать операции CRUD (Create, Retrieve, Update, Delete) • Документы сохраняются в персистентные коллекции документов. • Caché – контейнер для хранения коллекций Caché как документная БД
  • 29. • БД это документ, содержащий массив коллекций. • Коллекция определяет контейнер для документов, индексов документов, и метаданных о множестве документов из данной коллекции Коллекция
  • 30. • Нет требования, чтобы документы в коллекции разделяли общую структуру, но обычно это так. • Коллекции документов начинают сохраняться когда первый документ вставляется в коллекцию. Коллекция
  • 31. В Caché DocumentDB JSON объекты создаются при помощи следующих классов* JSON – динамические объекты ##class(%Object).%New() ##class(%Array).%New() ##class(%Vector).%ParseJSON() *Могут измениться в окончательной версии
  • 33. • Не вводят новых типов данных в SQL • JSON документы хранятся как значения строчного типа, например,VARCHAR, CLOB, VARBINARY, или BLOB и т.п. JSON расширения в SQL CREATE TABLE employees ( emp_id INTEGER, department INTEGER, emp_json VARCHAR (5000) )
  • 34. • Создаются документы JSON из результатов SQL запросов, типа: – JSON_OBJECT – JSON_OBJECTAGG – JSON_ARRAY – JSON_ARRAYAGG JSON расширения в SQL
  • 35. • Запрос возвращает строку каждого отдела записанного в таблице DEPTS; • Строка содержит колонку, в которой JSON объект сериализован, и содержит номер отдела и название JSON_OBJECT SELECT JSON_OBJECT( 'deptno' : deptno, 'deptname' : deptname ) FROM depts { "deptno" : 314,"deptname" : "Engineering" }
  • 36. • В качестве результата запроса будут возвращены 4 строки, по две колонки в каждой JSON_OBJECTAGG SELECT job_seq, JSON_OBJECTAGG( job_attrib, job_attval RETURNING VARCHAR(80) ) AS attributes FROM jobs 101 { "Leader" : "155566", "Duration" : "00:30:00", "Description" : " Design the new tables for the web site " } 234 { "Duration" : "01:00:00", "Description" : "Load the tables with existing data" } 492 { "Leader" : "129596" } 17 { "Description" : " Design the look-and-feel of the web site"
  • 37. • В результате запрос возвращает JSON массив с 0 и более элементов JSON_ARRAY SELECT JSON_ARRAY( 'deptno', deptno, 'deptname', deptname ) FROM depts [ "deptno", 314, "deptname", "Engineering" ]
  • 38. • Агрегатная функция, создает JSON массив с 0 и более элементов, из строк группированного запроса JSON_ARRAYAGG SELECT emp_id, JSON_ARRAYAGG(number) AS numbers FROM phones GROUP BY emp_id 123 ["555-1234", "555-9876", "555-4455"]
  • 39. • Встроенные SQL функции для запроса по JSON данным – JSON_TABLE: возвращает SQL таблицу – JSON_QUERY: возвращает строчное SQL значение, которое соответствует JSON объекту или JSON массиву – JSON_VALUE: возвращает скалярное SQL значение SQL расширения для JSON данных
  • 40. • Доступны новые предикаты по JSON данным – IS JSON – JSON_EXISTS SQL расширения для JSON данных
  • 42. • $MethodName • Новый синтаксис для инициализации JSON литералов • Встроенные выражения Как сделать работу с JSON лучше? Set array = [ 1,2,3,4 ] Set array = [ 1,x,y*2,"string",x_","_y ] Set object = { "forename":"Joe", “surname”:"Blogs" } Set array = [ (a]b) , (a]]b) ] Set array = [ 1, { “name”: forename_" "_surname }, val**2, { “var”: [ 1, x*y ] } ] Set object={ “name”: forename_" "_surname, “sub”: [ { “var”: "val" }, 5, (a]b) ] } Do ..Method([1,2,3], { “var”: "val" })
  • 43. set topTen = ##class(%Array).$new() set player = ##class(%Object).$new() set player.Rank = 1 set player.FirstName = "Novak" set player.LastName = "Djokovic" set player.Country = "Serbia" set player.Points = 13165 set grandSlams = ##class(%Array).$new() set slam = ##class(%Object).$new() set slam.Wimbledon = 2 do grandSlams.$push(slam) set slam = ##class(%Object).$new() set slam.USOpen = 1 do grandSlams.$push(slam) set slam = ##class(%Object).$new() set slam."Australian Open" = 5 do grandSlams.$push(slam) set player."Grand Slams" = grandSlams set player.DOB = $zdth("05/22/1987") do topTen.$push(player) Встроенный JSON set topTen = [{"Rank":1, "FirstName": "Novak", "LastName": "Djokovic", "Country": "Serbia", "Points": 13165, "Grand Slams": [{"Wimbledon":2},{"USOpen":1}, {"Australian Open":5}],"DOB": $zdth("05/22/1987")}]
  • 45. • Перенести разбор в ядро • Уменьшить накладные расходы по памяти • Работает уже сейчас (2015.2) Как сделать JSON быстрее?
  • 47. Модели данных в Caché Многомерное API глобалов Relational SQL ODBC JDBC Object ActiveX .NET Java C++ Multi-Value MVBasic Hierarchical Caché ObjectScript DocumentDB DocDB Graph Globals Graph API
  • 50. SSTable, MemTable и LSM-Tree “Designing data-intensive applications”, Martin Kleppmann, O’Reilly
  • 51. Fractal-Tree “MongoDB and Fractal Tree® Indexes”, Tim Callaghan, TokuTek
  • 52. BW-Tree Page P PID Physical Address P Mapping Table Δ: Insert record 50 Δ: Delete record 48 Δ: Update record 35 “Consolidated” Page P “The BW-Tree: A B-tree for New Hardware Platforms”, Justin Levandoski, David Lomet, Sudipta Sengupta, Microsoft Research
  • 54. Иерархическое хранилище InterSystems Caché работает на основе B*-tree движка
  • 55. B*-tree Block 3 Type 9 global dir. Offset 684, link 0 ^A 45 ^C 44 ^FCE.BranchD 40 … Block 44, Type 66 top pointer, link 0 ^C 47 ^C(5446,50,"") 46 Block 47, Type 6 bottom pointer, link 46 ^C 286 ^C(9,52,"g") 288 … 865 ^C(5436,46,"w") 866 Block 46 Type 6 bottom pointer , link 0 ^C(5446,50,"") 867 … 1345 ^C(9996,46,"w") 1346 Block 286, Type 8 data link 288 ^C ^C(1) skirt,rodeo ^C(1,46) 10$ ^C(1,46,black) 1 … ^C(9,52,blue) 15 Block 288, Type 8 data link 289 ^C(9,52,green) 9 ^C(9,52,red) 12 ^C(9,52,white) 12 ^C(9,52,yellow) 19 … ^C(17,58,red) 19 Block 1346, Type 8 data link 0 ^C(9996,46,white) 10 ^C(9996,46,yellow) 12 ^C(9996,48) 15$ ^C(9996,48,black) 1 … ^C(10000,58,yellow) 15 … …
  • 56. Intersystems Caché – мультимодельная платформа БД … • Иерархическое хранилище B*-tree поддерживает как объектный, реляционный, так и множество NoSQL видов доступа (key-value, document) … Итак…