Multimodel Database Caché

56
Cache Conf InterSystems Caché многомодельная СУБД Тимур Сафин Intersystems Corporation

Transcript of Multimodel Database Caché

Page 1: Multimodel Database Caché

CacheConf

InterSystems Cachéмногомодельная СУБДТимур Сафин Intersystems Corporation

Page 2: Multimodel Database Caché

Gartner Magic Quadrant СУБД - 2014

Gartner Magic Quadrant for Operational Database Management Systems,” by analysts Donald Feinberg, Merv Adrian, and Nick Heudecker, October 2014

Page 3: Multimodel Database Caché

Попытка классификации

Page 4: Multimodel Database Caché

Классификация рынка СУБД

© Апрель 2011, 451 Research

Page 5: Multimodel Database Caché
Page 6: Multimodel Database Caché
Page 7: Multimodel Database Caché

Data Platform Landscape Map – February 2014

Page 8: Multimodel Database Caché

NOSQL Concept TreeПервоисточник: CIO’s Guide to NOSQL, Dan McCreary, June 2012

Page 9: Multimodel Database Caché

Модели данных

Document

Mongo

Couch

RethinkDB

OrientDB

Key-Value

Redis

Hadoop

Graph

Neo4j

OrientDB

Titan

Relational

Oracle

DB2

Sybase

Columnar

SybaseIQ

Cassandra

Hypertable

Hbase/Hadoo

p

Hierarchical

Caché

GT.M

Page 10: Multimodel Database Caché

• Работа через поиск значений по заданному скалярному ключу• Нет структуры и отношений•Доступ к данным только через первичный ключ• Быстрые и легко масштабируемые

Базы данных «ключ-значение»

Redis CachéHadoop

Page 11: Multimodel Database Caché

• Используют структуры типа графа с узлами, где связи представляют отношения• Определенные операции

значительно проще реализовать – социальные сети• Справляется со сложными схемами

отношений.

«Графовые» базы данных

Redis CachéHadoopNeo4j TitanOrientDB

Page 12: Multimodel Database Caché

• Простой способ хранения коллекций из 1 или более пар «ключ-значение», подходящих записи.•Данные логически относящиеся к одной записи, но не используемые вместе, хранятся отдельно.• Версионирование строк и/или значений.

«Колоночные» базы данных

Page 13: Multimodel Database Caché

• Можно запрашивать определенные атрибуты данных, пропуская нерелевантные данные строка за строкой.

• Хорошее масштабирование данных.

«Колоночные» базы данных

Redis CachéHadoopSybaseIQ Hypertable

Cassandra

HBase

Page 14: Multimodel Database Caché

• Работают похоже на «ключ-значение»• Позволяют более глубокое вложение и сложные структуры. • Возможно сохранить структуры любой сложности.

«Документные» базы данных

MongoCouch RethinkDBOrientDBCaché

Page 15: Multimodel Database Caché

• Значение, сохраняемые в базе имеют структуру: XML, JSON, BSON

• Самое важное, что чаще всего документные базы используют JSON структуры данных, удобные для применения в JavaScript.

«Документные» базы данных

Page 16: Multimodel Database Caché

• JSON – сокращение “JavaScript Object Notation”– Синтаксис, позволяющий представлять

данные и подразумеваемую модель данных

– Текстовое представление структур данных JavaScript (вложенные массивы, вложенные объекты, и т.д.)

JSON

Page 17: Multimodel Database Caché

•Модель данных в первую очередь основанная на объектах и массивах.–Объект JSON – 0 и более пар «ключ-

значение», заключается в фигурные скобки { }

–Массив JSON – упорядоченная последовательность 0 и более значений, заключается в квадратные скобки []

JSON

Page 18: Multimodel Database Caché

• Пример документа 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"

}]

}

Page 19: Multimodel Database Caché

Объекты? Таблицы? Документы?

Page 20: Multimodel Database Caché

Хранение объектов в глобалах

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}…

Page 21: Multimodel Database Caché

Хранение реляционных данных

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.SampleID Name Spouse Home_Cit

y Home_State

1 Isaksen,Ashley F. 10 Moscow N/A2 Eagleman,Umberto

H. 20 Cambridge MA3 Lepon,Quigley I. 9 Boston MA4 Quine,Usha S. 15 Boston MA

Page 22: Multimodel Database Caché

В рамках модели данных Caché

реляционные данные – семантически эквивалентны

объектам

Классы = Таблицы

Page 23: Multimodel Database 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 проекция объектов

Page 24: Multimodel Database Caché

The following example document is a sample of the JSON structure.

{

"name":"John Smith","address": {"streetAddress": "21 2nd Street",

"city": "New York","state": "NY","postalCode": 10021,},

The following output is the result of the transformed document as JSONx.

<?xml version="1.0" encoding="UTF-8"?>

<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">

<json:string name="name">John Smith</json:string>

<json:object name="address"><json:string name="streetAddress">21 2nd Street</json:string>

<json:string name="city">New York</json:string>

<json:string name="state">NY</json:string>

<json:number name="postalCode">10021</json:number>

</json:object></json:object>

Не является ли XML проекция таким же видом сериализации как

и JSON?

Но…

Page 25: Multimodel Database Caché

“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

http://jtc1bigdatasg.nist.gov/_workshop/08_SQL_Support_for_JSON_abstract.pdf

JSON приходит в SQL standard

Page 26: Multimodel Database Caché

Caché как документная

база

Page 27: Multimodel Database Caché

Храня любую топологию дерева объектов…• Caché будет поддерживать JSON нативно, конвертирую любое представление из/в JSON в/из динамические объекты.• JSON – не является форматом хранения– JSON и XML – только форматы сериализации;

– Гибкость в поддерживаемых форматах при сохранении эффективности в хранении

Поддержка JSON

Page 28: Multimodel Database Caché

• Будет поддерживать операции CRUD (Create, Retrieve, Update, Delete)•Документы сохраняются в персистентные коллекции документов.• Caché – контейнер для хранения коллекций

Caché как документная БД

Page 29: Multimodel Database Caché

• БД это документ, содержащий массив коллекций. • Коллекция определяет контейнер для документов, индексов документов, и метаданных о множестве документов из данной коллекции

Коллекция

Page 30: Multimodel Database Caché

• Нет требования, чтобы документы в коллекции разделяли общую структуру, но обычно это так.• Коллекции документов начинают сохраняться когда первый документ вставляется в коллекцию.

Коллекция

Page 31: Multimodel Database Caché

В Caché DocumentDB JSON объекты создаются при помощи следующих классов*

JSON – динамические объекты

##class(%Object).%New()

##class(%Array).%New()

##class(%Vector).%ParseJSON()

*Могут измениться в окончательной версии

Page 32: Multimodel Database Caché

JSON в SQL?

Page 33: Multimodel Database Caché

• Не вводят новых типов данных в SQL• JSON документы хранятся как значения строчного типа, например,VARCHAR, CLOB, VARBINARY, или BLOB и т.п.

JSON расширения в SQL

CREATE TABLE employees (emp_id INTEGER,department INTEGER,emp_json VARCHAR

(5000) )

Page 34: Multimodel Database Caché

• Создаются документы JSON из результатов SQL запросов, типа:– JSON_OBJECT– JSON_OBJECTAGG– JSON_ARRAY– JSON_ARRAYAGG

JSON расширения в SQL

Page 35: Multimodel Database Caché

• Запрос возвращает строку каждого отдела записанного в таблице DEPTS;• Строка содержит колонку, в которой JSON объект сериализован, и содержит номер отдела и название

JSON_OBJECT

SELECTJSON_OBJECT( 'deptno' : deptno, 'deptname' :

deptname )FROM depts

{ "deptno" : 314,"deptname" : "Engineering" }

Page 36: Multimodel Database Caché

• В качестве результата запроса будут возвращены 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"

Page 37: Multimodel Database Caché

• В результате запрос возвращает JSON массив с 0 и более элементов

JSON_ARRAY

SELECT JSON_ARRAY( 'deptno', deptno, 'deptname', deptname ) FROM depts

[ "deptno", 314, "deptname", "Engineering" ]

Page 38: Multimodel Database Caché

• Агрегатная функция, создает 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"]

Page 39: Multimodel Database Caché

• Встроенные SQL функции для запроса по JSON данным– JSON_TABLE: возвращает SQL таблицу

– JSON_QUERY: возвращает строчное SQL значение, которое соответствует JSON объекту или JSON массиву

– JSON_VALUE: возвращает скалярное SQL значение

SQL расширения для JSON данных

Page 40: Multimodel Database Caché

•Доступны новые предикаты по JSON данным– IS JSON– JSON_EXISTS

SQL расширения для JSON данных

Page 41: Multimodel Database Caché

JSON проще?

Page 42: Multimodel Database Caché

• $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" })

Page 43: Multimodel Database Caché

set topTen = ##class(%Array).$new()set player = ##class(%Object).$new()set player.Rank = 1set player.FirstName = "Novak"set player.LastName = "Djokovic"set player.Country = "Serbia"set player.Points = 13165set grandSlams = ##class(%Array).$new()set slam = ##class(%Object).$new()

set slam.Wimbledon = 2do grandSlams.$push(slam)set slam = ##class(%Object).$new()set slam.USOpen = 1do grandSlams.$push(slam)set slam = ##class(%Object).$new()set slam."Australian Open" = 5do grandSlams.$push(slam)set player."Grand Slams" = grandSlamsset 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")}]

Page 44: Multimodel Database Caché

JSON быстрее?

Page 45: Multimodel Database Caché

• Перенести разбор в ядро• Уменьшить накладные расходы по памяти• Работает уже сейчас (2015.2)

Как сделать JSON быстрее?

Page 46: Multimodel Database Caché

Как быстрее?

Page 47: Multimodel Database Caché

Модели данных в Caché

Многомерное API глобалов

Rela

tiona

lSQLODBCJDBC Ob

jectActiveX

.NETJavaC++ M

ulti-

Valu

eMVBasic

Hier

arch

icalCaché

ObjectScript

Docu

men

tDBDocDB

Grap

hGlobals Graph API

Page 48: Multimodel Database Caché

B-tree и компания

Page 49: Multimodel Database Caché

B-Tree

“Designing data-intensive applications”, Martin Kleppmann, O’Reilly

Page 50: Multimodel Database Caché

SSTable, MemTable и LSM-Tree

“Designing data-intensive applications”, Martin Kleppmann, O’Reilly

Page 51: Multimodel Database Caché

Fractal-Tree

“MongoDB and Fractal Tree® Indexes”, Tim Callaghan, TokuTek

Page 52: Multimodel Database Caché

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

Page 53: Multimodel Database Caché

Так какой же Caché?

Page 54: Multimodel Database Caché

Иерархическое хранилище InterSystems Caché работает

на основе B*-tree движка

Page 55: Multimodel Database Caché

B*-treeBlock 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 datalink 288^C^C(1) skirt,rodeo^C(1,46) 10$^C(1,46,black) 1…^C(9,52,blue) 15

Block 288, Type 8 datalink 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 datalink 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

… …

Page 56: Multimodel Database Caché

Intersystems Caché – мультимодельная платформа БД …• Иерархическое хранилище B*-tree поддерживает как объектный, реляционный, так и множество NoSQL видов доступа (key-value, document) …

Итак…