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) …
Итак…

Multimodel Database Caché

  • 1.
  • 2.
    Gartner Magic QuadrantСУБД - 2014 Gartner Magic Quadrant for Operational Database Management Systems,” by analysts Donald Feinberg, Merv Adrian, and Nick Heudecker, October 2014
  • 3.
  • 4.
  • 7.
    Data Platform LandscapeMap – February 2014
  • 8.
    NOSQL Concept Tree Первоисточник:CIO’s Guide to NOSQL, Dan McCreary, June 2012
  • 9.
  • 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" } ] }
  • 19.
  • 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é реляционные данные – семантически эквивалентны объектам Классы = Таблицы
  • 23.
  • 24.
    Не является лиXML проекция таким же видом сериализации как и JSON? Но…
  • 25.
    “At the March11-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
  • 26.
  • 27.
    Храня любую топологиюдерева объектов… • Caché будет поддерживать JSON нативно, конвертирую любое представление из/в JSON в/из динамические объекты. • JSON – не является форматом хранения – JSON и XML – только форматы сериализации; – Гибкость в поддерживаемых форматах при сохранении эффективности в хранении Поддержка JSON
  • 28.
    • Будет поддерживатьоперации CRUD (Create, Retrieve, Update, Delete) • Документы сохраняются в персистентные коллекции документов. • Caché – контейнер для хранения коллекций Caché как документная БД
  • 29.
    • БД этодокумент, содержащий массив коллекций. • Коллекция определяет контейнер для документов, индексов документов, и метаданных о множестве документов из данной коллекции Коллекция
  • 30.
    • Нет требования,чтобы документы в коллекции разделяли общую структуру, но обычно это так. • Коллекции документов начинают сохраняться когда первый документ вставляется в коллекцию. Коллекция
  • 31.
    В Caché DocumentDBJSON объекты создаются при помощи следующих классов* JSON – динамические объекты ##class(%Object).%New() ##class(%Array).%New() ##class(%Vector).%ParseJSON() *Могут измениться в окончательной версии
  • 32.
  • 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 данных
  • 41.
  • 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() setplayer = ##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")}]
  • 44.
  • 45.
    • Перенести разборв ядро • Уменьшить накладные расходы по памяти • Работает уже сейчас (2015.2) Как сделать JSON быстрее?
  • 46.
  • 47.
    Модели данных вCaché Многомерное API глобалов Relational SQL ODBC JDBC Object ActiveX .NET Java C++ Multi-Value MVBasic Hierarchical Caché ObjectScript DocumentDB DocDB Graph Globals Graph API
  • 48.
  • 49.
  • 50.
    SSTable, MemTable иLSM-Tree “Designing data-intensive applications”, Martin Kleppmann, O’Reilly
  • 51.
    Fractal-Tree “MongoDB and FractalTree® Indexes”, Tim Callaghan, TokuTek
  • 52.
    BW-Tree Page P PID Physical Address P MappingTable Δ: 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
  • 53.
  • 54.
    Иерархическое хранилище InterSystems Cachéработает на основе B*-tree движка
  • 55.
    B*-tree Block 3 Type9 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) … Итак…