multimodel database caché
Post on 15-Apr-2017
523 Views
Preview:
TRANSCRIPT
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
Модели данных
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
• Работа через поиск значений по заданному скалярному ключу• Нет структуры и отношений•Доступ к данным только через первичный ключ• Быстрые и легко масштабируемые
Базы данных «ключ-значение»
Redis CachéHadoop
• Используют структуры типа графа с узлами, где связи представляют отношения• Определенные операции
значительно проще реализовать – социальные сети• Справляется со сложными схемами
отношений.
«Графовые» базы данных
Redis CachéHadoopNeo4j TitanOrientDB
• Простой способ хранения коллекций из 1 или более пар «ключ-значение», подходящих записи.•Данные логически относящиеся к одной записи, но не используемые вместе, хранятся отдельно.• Версионирование строк и/или значений.
«Колоночные» базы данных
• Можно запрашивать определенные атрибуты данных, пропуская нерелевантные данные строка за строкой.
• Хорошее масштабирование данных.
«Колоночные» базы данных
Redis CachéHadoopSybaseIQ Hypertable
Cassandra
HBase
• Работают похоже на «ключ-значение»• Позволяют более глубокое вложение и сложные структуры. • Возможно сохранить структуры любой сложности.
«Документные» базы данных
MongoCouch RethinkDBOrientDBCaché
• Значение, сохраняемые в базе имеют структуру: 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.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
В рамках модели данных 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 проекция объектов
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?
Но…
“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
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
SELECTJSON_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 = 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")}]
JSON быстрее?
• Перенести разбор в ядро• Уменьшить накладные расходы по памяти• Работает уже сейчас (2015.2)
Как сделать JSON быстрее?
Как быстрее?
Модели данных в Caché
Многомерное API глобалов
Rela
tiona
lSQLODBCJDBC Ob
jectActiveX
.NETJavaC++ M
ulti-
Valu
eMVBasic
Hier
arch
icalCaché
ObjectScript
Docu
men
tDBDocDB
Grap
hGlobals 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*-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
… …
Intersystems Caché – мультимодельная платформа БД …• Иерархическое хранилище B*-tree поддерживает как объектный, реляционный, так и множество NoSQL видов доступа (key-value, document) …
Итак…
top related