<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Перспективы и проблемы использования оперативной энергонезависимой памяти</article-title>
      </title-group>
      <fpage>8</fpage>
      <lpage>21</lpage>
      <abstract>
        <p>At the beginning of the paper, it is demonstrated that the technology of the most widely used SQL-oriented DBMS is inextricably linked with HDD technology. Features of HDD affect the data structures and algorithms for performing operations, methods of managing the buffer pool of the DBMS, transaction management, query optimization, etc. An alternative to a disk DBMS is an in-memory DBMS, storing databases entirely in the main memory. Despite the fact that in-memory DBMS has a number of advantages over disk DBMS, at present there is practically no competition. This, first of all, is due to natural limitations on the size of databases, inherent in in-memory DBMS. At present, new types of data storage hardware have appeared: SSD - block solid-state drives and SCM - storage-class memory (non-volatile main memory). SSD characteristics made it expedient to develop a DBMS in terms of their exclusive use, but so far such a DBMS has not been created, and SSDs are used simply instead of HDDs in DBMS that do not take into account their features. The availability of SCM allows to radically simplify the architecture of the database and significantly improve their performance. To do this, you need to review many of the ideas used in disk-based databases. Аннотация. В начале статьи демонстрируется, что технология наиболее распространенных в настоящее время SQL-ориентированных СУБД неразрывно связана с технологией HDD. Особенности HDD влияют на структуры данных и алгоритмы выполнения операций, методы управления буферным пулом СУБД, управление транзакциями, оптимизацию запросов и т.д. Альтернативой дисковым СУБД являются in-memory СУБД, хранящие базы данных целиком в основной памяти. Несмотря на наличие у in-memory СУБД ряда преимуществ перед дисковыми СУБД, в настоящее время конкуренция между ними практически отсутствует. Это, прежде всего, связано с естественными ограничениями на размеры баз данных, свойственными in-memory СУБД. В настоящее время появились новые виды аппаратуры хранения данных: SSD - блочные твердотельные нако-</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>пители, и SCM – энергонезависимая основная память. Характеристики
SSD делали целесообразной разработку СУБД в расчете на их
исключительное использование, однако до сих пор такая СУБД не создана, а SSD
используются просто вместо HDD в СУБД, не учитывающих их
особенности. Наличие SCM позволяет радикально упростить архитектуры СУБД и
значительно повысить их производительность. Для этого нужно
пересмотреть многие идеи, используемые в дисковых СУБД.
1</p>
      <p>Введение
Технология наиболее распространенных SQL-ориентированных
(«реляционных») систем управления базами данных (СУБД) неразрывно связана с
технологией устройств хранения данных на магнитных дисках с подвижными
головками (Hard Disk Drive, HDD). Первые HDD были выпущены компанией IBM в
1956 г. В технологии HDD преодолевались недостатки ранних устройств
хранения данных – магнитных лент (magnetic tape data storage, чисто
последовательный доступ) и магнитных барабанов (drum memory, ограниченная емкость),
обеспечивая меньшую, чем у магнитных лент, но значительно большую, чем у
магнитных барабанов, емкость, а также меньшую, чем у магнитных барабанов,
но значительно большую, чем у магнитных лент, скорость выполнения
произвольных обменов данными между основной и внешней памятью. Если добавить
к этому умеренную стоимость HDD, то эти устройства являлись вполне
подходящими для хранения баз данных.</p>
      <p>
        На технологию СУБД повлияли технологические особенности HDD.
Вопервых, HDD обеспечивают внешнюю память, обмены с которой обычно
производятся блоками байт одного и того же размера. Эта особенность приводит,
как минимум, к двум архитектурным решениям. (1) Для хранения баз данных и
убыстрения обработки запросов выбираются структуры данных и алгоритмы
выполнения операций, для которых естественна блочная природа внешней
памяти. В частности, для организации индексов наиболее часто применяются
разновидности B-деревьев [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. (2) Для балансировки относительно небольшой
скорости выполнения произвольных обменов с внешней памятью и относительно
высокой скорости обработки данных в основной памяти СУБД производит
собственную буферизацию (кэширование) блоков внешней памяти базы данных в
основной памяти [2, subsection 3.3, Buffer Management, 3, п. 10.1.1 Управление
буферным пулом базы данных].
      </p>
      <p>
        Во-вторых, при выполнении обменов с внешней памятью HDD дисковая
аппаратура выполняет три основных операции: подвод головок к требуемому
цилиндру дискового пакета (seek), прокручивание дискового пакета на требуемое
угловое расстояние (latency), чтение или запись данных с их передачей в
основную память или из нее (data transfer). При выполнении произвольного обмена
время выполнения первых двух операций исчисляется миллисекундами, а это
означает, что время чтения произвольного блока данных из внешней памяти или
его записи на несколько десятичных порядков больше времени выполнения
соответствующего цикла переписи в основной памяти. Поэтому при
выполнении любой операции уровня SQL над базой данных определяющим накладным
расходом является число требуемых обменов с внешней памятью. На этом
наблюдении основана оценочная оптимизация запросов (cost-based query
optimization), применяемая во всех развитых SQL-ориентированных СУБД и
основанная на пионерской работе [
        <xref ref-type="bibr" rid="ref3">4</xref>
        ].
      </p>
      <p>Приведенных замечаний достаточно, чтобы убедиться в глубокой
зависимости наиболее распространенной технологии SQL-ориентированных СУБД от
особенностей HDD. Ориентация на использование этих устройств хранения
данных влияет как на общую архитектуру СУБД, так и на выбор основных
структур данных и алгоритмов.</p>
      <p>
        В конце 1970-х – 1980-х гг. предпринимались попытки создания
специализированной аппаратуры для поддержки СУБД, включая аппаратуру хранения
данных на дисках с фиксированными головками (head-per-track disk). Более того,
имелись прототипы таких устройств, в которых в магнитные головки
встраивались специальные микропроцессоры, фильтрующие данные «на лету» при их
считывании с диска (processor-per-track systems и processor-per-head systems) [
        <xref ref-type="bibr" rid="ref4">5</xref>
        ].
Однако к началу 1990-х стала ясна бесперспективность такого подхода [
        <xref ref-type="bibr" rid="ref5">6</xref>
        ], и на
протяжении следующих двух десятилетий технология СУБД базировалась
главным образом на устройствах хранения данных категории HDD.
      </p>
      <p>
        В то же время появилась и развилась альтернативная технология СУБД c
хранением баз данных в обычной энергозависимой основной памяти (in-memory
DBMS) [
        <xref ref-type="bibr" rid="ref6">7</xref>
        ]. В таких СУБД структуры данных и алгоритмы выполнения
операций отличаются от используемых в дисковых СУБД. В частности, при выборе
структур данных нужно учитывать наличие кэш-памяти в процессорах [8].
Должны отличаться и принципы оптимизации запросов, хотя публикаций об
оптимизаторах запросов в in-memory СУБД настолько мало, что, похоже,
соответствующие принципы просто не сформировались.
      </p>
      <p>
        Вероятно, наиболее зрелыми представителем этой категории СУБД является
TimesTen [
        <xref ref-type="bibr" rid="ref7">9</xref>
        ], существующая с 1996 г. и приобретенная Oracle в 2005 г., и
solidDB [
        <xref ref-type="bibr" rid="ref8">10</xref>
        ], существующая с 1992 г. и приобретенная IBM в 2007 г. Эти
системы поддерживают очень быстрое выполнение запросов к базам данных
(поскольку база данных и все индексы целиком сохраняются в основной памяти),
однако для выполнения операций изменения баз данных требуются обращения
к внешней памяти, так что скорость выполнения таких операций не отличается
от соответствующей скорости СУБД, хранящих базы данных на дисках.
      </p>
      <p>
        Особняком стоит in-memory СУБД VoltDB [
        <xref ref-type="bibr" rid="ref9">11</xref>
        ], являющаяся транзакционной
массивно-параллельной системой без общих ресурсов между узлами (shared
nothing). В этой системе свойство долговечности (durability) транзакций
поддерживается на основе репликации данных в нескольких узлах, а внешняя
память вообще не используется. Подробности организации VoltDB (и ее
прототипа H-Store) см. в [12].
      </p>
      <p>Следует заметить, что несмотря на наличие у in-memory СУБД ряда
преимуществ перед дисковыми СУБД, в настоящее время конкуренция между ними
практически отсутствует. Это, прежде всего, связано с естественными
ограничениями на размеры баз данных, свойственными in-memory СУБД.</p>
      <p>В первые десятилетия 21-го века в технологии аппаратных средств хранения
данных произошли (и продолжают происходить) существенные изменения.
Появились так называемые блочные твердотельные накопители (Solid-State
Drive, SSD), основанные на технологии флэш-памяти и сравнительно быстро
догнавшие HDD по показателю максимальной емкости (до 16 терабайт в 2016
г.), превосходя их по ряду других показателей (проигрывая в основном только в
цене). В следующем разделе будут кратко обсуждены потенциальные
возможности применения SSD в архитектуре СУБД, компоненты СУБД, на которые
должен был бы максимально подействовать переход от HDD к SSD, а также
реальное состояние дел в технологии СУБД через 10 лет после того, как SSD на
флэш-памяти стали реально доступны.</p>
      <p>В последние годы полностью реальной стала перспектива появления на
рынке оперативной энергонезависимой памяти (Non Volatile Random Access
Memory, NVRAM), которую, возможно, более выразительно, хотя и слишком
длинно по-русски называют основной памятью с возможностью
долговременного хранения данных (Storage Class Memory, SCM). Такая память допускает
байтовую адресацию, прямо доступна для команд процессоров, но при этом
сохраняет содержимое после отключения электропитания.</p>
      <p>Использование SCM открывает путь к построению СУБД, основанных на
одноуровневой памяти. Эти СУБД могут оказаться гораздо быстрее дисковых при
более простой организации. Перспективам появления таких СУБД и
имеющимся проблемам посвящен третий раздел статьи.</p>
      <p>Четвертый раздел завершает статью и содержит заключительные замечания.
2</p>
      <p>SSD на флэш-памяти и технология СУБД
Как и HDD, SSD – это блочное внешнее запоминающее устройство,
сохраняющее данные после выключения электропитания. Основными отличиями SSD от
HDD являются следующие:
• в SSD отсутствуют механические компоненты, поэтому для любого блока
скорость выполнения обмена с SSD одна и та же;
• если среднее время обмена с произвольным блоком HDD составляет около 10
миллисекунд как для чтения, так и для записи, то время чтения
произвольного блока в современных SSD – около 20 микросекунд (на три десятичных
порядка меньше, чем у HDD), а время записи – около 200 микросекунд (на два
десятичных порядка меньше, чем у HDD);
• пока SSD стоят дороже, чем HDD (на 2016 г. примерно в 10 раз), но
стоимость HDD в пересчете на терабайт объема поддерживаемой памяти в
последние годы стабилизировалась, а SSD дешевеют;
• в настоящее время SSD являются существенно менее надежными
устройствами, чем HDD.
2.1</p>
      <p>SSD-ориентированные СУБД
Только последняя в списке характеристика может в принципе препятствовать
полномасштабному применению SSD в СУБД. Непонятно, удастся ли
разработчикам аппаратуры SSD избавиться от этого недостатка, но первые две
характеристики кажутся настолько привлекательными, что еще 10 лет тому назад я
пытался (не слишком успешно) убедить своих студентов заняться
исследованиями архитектуры СУБД, в которой для хранения баз данных используются SSD.</p>
      <p>Понятно, что в наибольшей степени особенности SSD могли бы повлиять на
управление внешней памятью, управление буферами основной памяти и
оптимизатор запросов. В существующих дисковых СУБД, поскольку при
выполнении запросов часто приходится производить полный просмотр таблиц без
использования индексов, стремятся располагать на диске блоки одной таблицы
так, чтобы при переходе от текущего блока к следующему не требовалось
сильно перемечать магнитные головки. В СУБД, основанной на использовании
только SSD, блоки одной таблицы могут располагаться во внешней памяти
произвольным образом.</p>
      <p>
        Время записи блока во внешнюю память SSD на десятичный порядок больше
времени чтения блока за счет потребности предварительной подготовки сектора
внешней памяти, в который будет производиться запись [
        <xref ref-type="bibr" rid="ref10">13</xref>
        ]. При управлении
буферами основной памяти в СУБД, ориентированной на использование SSD,
имеет смысл заранее подготавливать к записи сектора внешней памяти и при
выталкивании из буфера во внешнюю память измененного образа ранее
прочитанного блока внешней памяти писать его не в тот сектор, из которого он был
прочитан, а в некоторый сектор, уже подготовленный к записи.
      </p>
      <p>Но распределение внешней памяти и управление буферами основной памяти
– это мелочи по сравнению с оптимизацией запросов. Как отмечалось во
введении, современные оценочные оптимизаторы основываются на предположении,
что произвольные обмены с внешней памятью выполняются так долго, что
стоимость плана выполнения запроса можно оценивать числом требуемых для
этого обменов, пренебрегая временем, которое потребуется для процессорной
обработки данных. Чтение из внешней памяти SSD выполняется в 1000 раз
быстрее, чем с использованием HDD. Поэтому при переходе от HDD к SSD это
предположение нужно было бы подвергнуть строгой ревизии.</p>
      <p>Имеется в виду, что прямой перенос оценок планов выполнения запросов из
среды HDD в среду SSD может привести к плачевным результатам.
Неправильный учет временных затрат на обмены с внешней памятью и процессорную
обработку данных в основной памяти может привести к выбору оптимизатором
запросов заведомо не оптимальных планов выполнения запросов, что приведет
к недоиспользованию потенциала SSD. Конечно, запросы не станут
выполняться медленнее, чем при применении HDD, но ради этого не стоит менять
аппаратуру управления внешней памятью. Другими словами, для эффективного
использования SSD оптимизаторы запросов нужно значительно переделывать.</p>
      <p>
        Несмотря на привлекательность идеи замены HDD на SSD в аппаратной
поддержке СУБД, практически отсутствуют проекты (как коммерческие, так и
исследовательские) по разработке SSD-ориентированных СУБД. Мне удалось
обнаружить только проект FlashyDB, выполняемый в немецком университете
Ройтлингена [
        <xref ref-type="bibr" rid="ref11">14</xref>
        ]. Объявлены следующие цели проекта:
• исследовать влияние SSD на основе флэш-памяти на архитектуры и
производительность существующих систем баз данных, реляционных хранилищ
данных (data warehouse) и систем с поколоночным хранением таблиц (column
store);
• разработать алгоритмы и структуры данных, обеспечивающие оптимальное
использование характеристик SSD на основе флэш-памяти в сценариях OLTP
и OLAP;
• реализовать прототип системы.
Список исследовательских тем, затрагиваемых в проекте, включает
архитектуры систем баз данных, обработку транзакций, управление мультидоступом,
восстановление после сбоев, управление буферами, индексация, оптимизация
запросов, размещение данных. Как видно, направленность проекта вполне
соответствует высказанным выше соображениям. По-видимому, одной из первых
статей, посвященных проекту FlashyDB, была статья [
        <xref ref-type="bibr" rid="ref12">15</xref>
        ]. Полный список
опубликованных статей доступен на сайте проекта [
        <xref ref-type="bibr" rid="ref11">14</xref>
        ]. Как показывает этот список,
далеко не во всех намеченных направлениях исследований получены
существенные результаты.
      </p>
      <p>Возможно, недостаточная активность исследователей по построению
истинных SSD-ориентированных СУБД связана с тем, что до недавнего прошлого
максимальная емкость устройств хранения данных во флэш-памяти
ограничивалась одним терабайтом. Однако технология быстро развивается, и уже в
2016 г. компания Samsung представила SSD емкостью 32 Тб и обещает
довести емкость своих SSD до 100 Тб. Seagate показала SSD емкостью 60 Тб.
Думаю, это «подстегнет» сообщество баз данных.
2.2</p>
      <p>
        Двухуровневый кэш на основе SSD
Пока же емкость SSD была сравнительно невелика, достаточно
популярной была идея использования SSD в составе иерархического
двухуровневого буфера в традиционных СУБД, ориентированных на использование
HDD [
        <xref ref-type="bibr" rid="ref13">16</xref>
        ]. Суть идеи достаточна проста. Если мы по каким-то причинам
хотим продолжать использовать в СУБД для хранения баз данных HDD, но
при этом получать достаточную пользу от применения SSD, то почему бы
временно не хранить во флэш-памяти часть блоков базы данных, которая,
вероятно, требуется в данный момент времени.
      </p>
      <p>Для реализации этой идеи достаточно изменить лишь один компонент
традиционной дисковой СУБД – менеджер буферов в основной памяти. Буфер
становится двухуровневым: кэш первого уровня размещается в основной памяти, а
кэш второго уровня – во флэш-памяти SSD. Блоки базы данных, требуемые для
выполнения операций над базой данных, считываются из дисковой внешней
памяти в буферные страницы кэша первого уровня. При нехватке памяти в кэше
первого уровня происходит замещение какой-либо буферной страницы. Если ее
содержимое изменялось после чтения из внешней памяти, то страница
перемещается в кэш второго уровня (с учетом замечаний об управлении буферами из
подраздела 2.1). Если не хватает памяти в кэше второго уровня, то замещаемый
блок перемещается во внешнюю память HDD.</p>
      <p>
        В [
        <xref ref-type="bibr" rid="ref13">16</xref>
        ] приводится обзор алгоритмов управления подобным двухуровневым
буферным пулом. Все разработанные алгоритмы являются сложными и
ресурсоемкими. Мне неизвестна какая-либо СУБД, в которой эти алгоритмы реально
бы применялись. Тем не менее, по-видимому, внедрение в состав дисковой
СУБД двухуровневого кэша с использованием SSD – это наиболее дешевый
способ модификации СУБД с целью повышения ее производительности за счет
применения технологии SSD.
      </p>
      <p>В этом случае в кэш второго уровня постепенно попадают наиболее часто
используемые блоки базы данных, доступ к которым затем происходит со
скоростью, свойственной SSD. Кроме того, поскольку флэш-память является
энергонезависимой, не требуются выталкивания из памяти SSD в память HHD ни в
каких случаях, кроме нехватки места.</p>
      <p>Однако этот подход не отменяет потребность в разработке чистых
SSDориентированных СУБД, в которых особенности характеристик системы
хранения данных учитываются во всех компонентах.
2.3</p>
      <p>Гибридные диски
Самый простой способ получить какой-то выигрыш в производительности
СУБД от применения технологии SSD состоит в том, чтобы просто заменить
аппаратуру HDD на аппаратуру SSD без каких-либо изменений СУБД. Как
отмечалось в подразделе 2.1, операции над базами данных после этого
гарантированно не будут выполняться медленнее, а скорее всего, будут выполняться в
среднем быстрее.</p>
      <p>При наличии баз данных большого объема смена аппаратных средств
хранения данных обойдется явно недешево, и смутные обещания лучшей жизни (на
качественном уровне) вряд ли могут сподвигнуть менеджеров компаний на
такие расходы. В гибридных устройствах хранения данных на жестких дисках
(solid-state hybrid drive, SSHD) совместно используются технологии SSD и HDD.</p>
      <p>
        В SSHD SSD используется для кэширования содержимого блоков HDD, к
которым наиболее часто происходят обращения. В результате SSHD часто
работает со скоростью SSD при стоимости, близкой к стоимости HDD. Попробовать
повысить производительность СУБД за счет перехода от использования HDD к
использованию SSHD стоит уже не так дорого, хотя, конечно, это решение не
опирается на какие-либо технологические доводы и остается рискованным.
3
Оперативная энергонезависимая память:
перспективы для СУБД
В настоящее время реальные решения SCM могут обеспечить три технологии:
память на основе фазового перехода (Phase-Change Memory, PCRAM) [
        <xref ref-type="bibr" rid="ref14">17</xref>
        ],
резистивная память с произвольным доступом (Resistive Random-Access Memory,
RRAM) [
        <xref ref-type="bibr" rid="ref15">18</xref>
        ] и магниторезистивная оперативная память (Magnetoresistive
Random-Access Memory, MRAM) [
        <xref ref-type="bibr" rid="ref16">19</xref>
        ].
      </p>
      <p>PCRAM основывается на поведении халькогенида1, который при нагреве
может «переключаться» между двумя состояниями: кристаллическим и
аморфным. Кристаллическое и аморфное состояния халькогенида кардинально
различаются электрическим сопротивлением. Аморфное состояние, обладающее
высоким сопротивлением, используется для представления двоичного 0, a
кристаллическое состояние, обладающее низким уровнем сопротивления,
представляет 1.</p>
      <p>Основная идея RRAM состоит в том, что диэлектрики, которые в нормальном
состоянии имеют очень высокое сопротивление, после приложения достаточно
высокого напряжения могут сформировать внутри себя проводящие нити
низкого сопротивления, и по сути превратиться из диэлектрика в проводник. Эти
проводящие нити могут образовываться с помощью разных механизмов. С
помощью приложения соответствующих уровней напряжения проводящие нити
могут быть как разрушены (и материал снова станет диэлектриком), так и
сформированы снова (и материал опять станет проводником).</p>
      <p>Данные в MRAM хранятся в магнитных элементах памяти. Магнитные
элементы сформированы из двух ферромагнитных слоёв, разделенных тонким
слоем диэлектрика. Один из слоёв представляет собой постоянный магнит,
намагниченный в определённом направлении, а намагниченность другого слоя
изменяется под действием внешнего поля. Устройство памяти организовано по
принципу сетки, состоящей из отдельных «ячеек», содержащих элемент памяти
и транзистор.</p>
      <p>Не буду останавливаться на том, какие компьютерные компании
предпочитают ту или иную технологию SCM. Уже пару лет разные крупные компании
обещают в ближайшем будущем начать производство соответствующих чипов.
Пока на рынке появились SSD, основанные не на флэш-памяти, а на SCM с
блочными обменами. Думаю, что соответствующая оперативная память
появится не позже следующего года.
1 Бинарные химические соединения халькогенов (элементов 16-й группы
периодической системы, к которым относятся кислород, сера, селен, теллур, полоний и
ливерморий) с металлами</p>
      <p>
        Интересно, что еще в 2011-м г. государственная корпорация Роснано
заключила с французской компанией Crocus соглашение о налаживании в России
«производства памяти MRAM средней и высокой плотности с проектными
нормами 90 и 65 нм» [
        <xref ref-type="bibr" rid="ref16">19</xref>
        ]. Для справедливости следует отметить, что Samsung
планирует начать массовое производство такой памяти на основе 28-нанометровой
технологии [
        <xref ref-type="bibr" rid="ref17">20</xref>
        ].
      </p>
      <p>
        Тем не менее, выбор для производства в России именно памяти MRAM,
повидимому, оправдан, поскольку у MRAM ожидается время чтения и записи
около 20 нс (меньше, чем у сегодняшней DRAM) при долговечности,
соизмеримой с долговечностью DRAM и HDD, в то время как у PCRAM и RRAM время
чтения в несколько раз больше (а запись медленнее чтения) при значительно
меньшей долговечности [
        <xref ref-type="bibr" rid="ref18">21</xref>
        ].
      </p>
      <p>Конечно, до появления разных видов SCM на рынке невозможно достоверно
сравнивать их характеристики, но имеется надежда, что MRAM с обещанными
характеристиками действительно появится и далее в статье я на это полагаюсь.</p>
      <p>Следует также обратить внимание на то, что энергонезависимая оперативная
память будет использоваться в компьютерах, процессоры которых оснащены
вполне энергозависимыми кэшами. Чтобы обеспечить возможность фиксации
транзакций в SCM, в систему команд процессоров Intel были добавлены две
команды – CLWB и CLFLUSH. Обе команды предназначены для выталкивания
данных из кэшей всех уровней в SCM, но первая команда сохраняет
выталкиваемые данные в кэше, а вторая вынуждает при следующем обращении считывать
данные из SCM.
3.1</p>
      <p>SQL-ориентированные СУБД на основе SCM
На первый взгляд, в качестве основы для разработки СУБД, в которой для
хранения данных используется только SCM (и вовсе не используется внешняя
память) было бы разумно использовать какую-либо имеющуюся in-memory СУБД.
Действительно, in-memory СУБД, как и СУБД на основе SCM, сохраняют базы
данных целиком в основной памяти. В расчете на это выбираются основные
структуры данных и алгоритмы выполнения операций, в расчете на это
строится оптимизатор запросов (или, вернее, должен был бы строиться, поскольку
достоверной информации об оптимизаторах запросов в существующих
inmemory СУБД мне получить не удалось).</p>
      <p>Однако между in-memory СУБД и СУБД на основе SCM имеется
принципиальное различие, которое не позволяет так просто использовать имеющиеся
решения: in-memory СУБД рассчитаны на использование традиционной
энергозависимой основной памяти, а СУБД на основе SCM – на использование
энергонезависимой основной памяти. Для поддержки свойства долговечности
(durability) транзакций в in-memory СУБД используется внешняя память (HDD или
SSD – здесь не принципиально), т.е., как и в дисковых СУБД, используется
двухуровневая иерархия памяти, на первом уровне которой находится
энергозависимая основная память, а на втором – энергонезависимая внешняя память. В
отличие от дисковых СУБД, в этом случае основная память хранит всю базу
данных (а не служит кэшем), а внешняя память служит для поддержки
долговечности хранения баз данных.2</p>
      <p>При разработке СУБД на основе SCM мы имеем дело с принципиально
одноуровневой средой хранения баз данных, обладающей возможностью байтовой
адресации. В этом случае мы, вообще говоря, можем полностью отказаться от
блочной структуры памяти и начать распределять ее (для всех целей, связанных
с поддержкой баз данных) порциями произвольного размера. Стоит задуматься
над тем, может ли это оказаться полезным и, если да, поразмышлять о
распределении основной энергонезависимой памяти фрагментами произвольного
размера: как бороться с внешней фрагментацией? допустимы ли сдвижки памяти?
не стоит ли воспользоваться какой-либо разновидностью метода близнецов
(например, методом фибоначчиевых близнецов [23, 12.5 – Методы близнецов])?
и т.д.</p>
      <p>
        На мой взгляд, если отсутствует блочная структура памяти, нет причин
использовать для организации индексов B-деревья.3 Что можно использовать
вместо B-деревьев? Стоит ли попытаться воспользоваться каким-либо методом
поиска в основной памяти на основе деревьев (в этих методах в основном
применяются двоичные деревья) [24, 4.1 – Методы поиска в основной памяти на
основе деревьев]? Может быть, лучше применить какой-либо метод поиска на
основе хэширования [24, 4.2 – Методы хэширования для поиска в основной
памяти]? Или же лучше поискать или придумать что-нибудь новенькое?
Как поддерживать сериализацию транзакций в транзакционных системах?
Использовать ли версионные алгоритмы и какими они должны быть в данном
случае? Стоит ли в СУБД на основе SCM экономить на сборке мусора,
потребность в котором возникает, если не ограничивать число версий объектов баз
данных? Как вести журнал в SCM? Нужны ли логический и физический
журналы? Какова единица записи в физический журнал?
Наконец, как оптимизировать запросы? Как строить оценочные функции?
Вопросов великое множество, и на все их нужно уметь правильно отвечать,
чтобы получить реальные преимущества от разработки СУБД на основе SCM. К
сожалению, хотя потребность в энергонезависимой основной памяти отмечал
еще в 1987 г. Майкл Стоунбрейкер при разработке Postgres [
        <xref ref-type="bibr" rid="ref21">25</xref>
        ], в настоящее
время проекты по полномасштабной разработке СУБД на основе SCM
практически отсутствуют. Это, в частности, подтверждается тем, что на конференции
SIGMOD в 2017 г. туториал «Как построить систему управления базами данных
в основной энергонезависимой памяти» [
        <xref ref-type="bibr" rid="ref18">21</xref>
        ] представляли Джой Арулрадж и
Эндрю Павло из Карнего-Меллонского университета, являющиеся лидерами
проекта Peloton [
        <xref ref-type="bibr" rid="ref22">26</xref>
        ].
      </p>
      <p>
        В списке основных характеристик проекта числится изначальная поддержка
технологии хранения данных на основе основной энергонезависимой памяти. К
2 Как отмечалось в разд. 1, особый случай представляет СУБД VoltDB, но она
принципиально работает в режиме shared nothing в массивно-параллельной среде.
3 Вообще, кажется странным использование B-деревьев в in-memory СУБД – все-таки
по своей природе это дисковая структура памяти.
сожалению (с позиций человека, стремящегося к развитию этой технологии),
как показывает название проекта, эта цель проекта не является основной.
Основной целью является интеграция компонентов искусственного интеллекта для
обеспечения возможности автономных (само)оптимизаций системы в
зависимости от текущей рабочей нагрузки [
        <xref ref-type="bibr" rid="ref23">27</xref>
        ]. Эта задача также очень актуальна, но
если учесть, что в настоящее время в проекте работают всего три взрослых
специалиста (остальные – аспиранты и студенты), трудно рассчитывать, что в
университетском проекте удастся полностью достичь обеих целей.
      </p>
      <p>
        Тем не менее, в настоящее время участники проекта [
        <xref ref-type="bibr" rid="ref22">26</xref>
        ], по-видимому,
обладают самым большим опытом в области разработки СУБД на основе SCM.
Совершенно необходимо начинать новые проекты, активно исследовать
возможные подходы, проводить специальные семинары и конференции для обмена
идеями и опытом.
      </p>
      <p>В заключение этого подраздела замечу, что для меня очевидны
потенциальные преимущества подхода СУБД на основе SCM для транзакционных
приложений. Скорость обработки транзакций сможет сравняться со скоростью
основной памяти, это принципиально новое качество. В качестве аппаратной
платформы СУБД на основе SCM подходят компьютеры, процессоры которых
имеют многоядерные и/или многопотоковую организацию, включают мощные
графические ускорители.</p>
      <p>
        К сожалению, я не могу придумать сценарий, в котором от применения SCM
можно получить значительные преимущества для аналитических приложений.
Считается признанной идея, что горизонтально масштабируемые аналитические
СУБД нужно основывать на использовании массивно-параллельных архитектур
и принципа shared nothing [
        <xref ref-type="bibr" rid="ref24">28</xref>
        ]. Современные аналитические базы данных
настолько объемны, что только в кластере, узлы которого обладают весьма
емкими средами хранения, можно полностью разместить базу данных. Даже при
использовании дисковой памяти накладные расходы на пересылку данных по
сети могут оказаться неприемлемыми. Если же в узлах используется SCM, то
сетевые накладные расходы могут свести на нет все преимущества SCM.
3.2
      </p>
      <p>
        SCM в объектно-ориентированных и XML-ориентированных
СУБД
В 21-м веке объектно-ориентированные СУБД практически потеряли
пользователей. При этом активно используются разнообразные средства
объектнореляционного отображения (Object-Relational Mapping, ORM), позволяющие
объектно-ориентированным приложениям в объектной манере
взаимодействовать с SQL-ориентированными базами данных [
        <xref ref-type="bibr" rid="ref25">29</xref>
        ]. На мой взгляд, в принципе
для хранения объектов лучше было бы использовать ООСУБД, а не средства
4
ORM .
4 Как демонстрируется в [
        <xref ref-type="bibr" rid="ref26">30</xref>
        ], с равным успехом можно использовать объектные
возможности самого языка SQL, однако эта идея не получила широкого
распространения.
Мне кажется, что распространенности ООСУБД во многом помешала
свойственная им проблема, частично относящаяся к объектно-ориентированной
модели данных [
        <xref ref-type="bibr" rid="ref26">30</xref>
        ]. Как известно, одним из основных понятий этой модели
данных является объектный идентификатор (Object Identifier, OID),
автоматически генерируемый системой при создании любого объекта, уникально
отличающий этот объект от всех других объектов любого объектного типа и служащий
своего рода абстрактным указателем на объект. В частности, с помощью OID’ов
в модели ODMG образуются связи между объектами.
      </p>
      <p>
        При использовании в ООСУБД для хранения баз данных блочной внешней
памяти затруднительно явно использовать в качестве OID обычные указатели.
Кроме того, давно известна проблема преобразования OID’ов в обычные
указатели при перемещении объектов из базы данных в объектно-ориентированную
среду клиентских приложений [
        <xref ref-type="bibr" rid="ref28">32</xref>
        ]. Если основывать ООСУБД на SCM, обе
проблемы, похоже, сильно упростятся, а навигационная природа ООСУБД не
будет сильно тормозить ее работу, поскольку затраты на разыменование OID’ов
можно свести практически к нулю.
      </p>
      <p>
        Аналогично, использование SCM может возродить интерес к
XMLориентированным СУБД, в которых для поддержки путевых выражений и пр.
приходится поддерживать массу ссылок, а для обеспечения более или менее
приемлемой эффективности использовать изощренные схемы хранения [
        <xref ref-type="bibr" rid="ref29">33</xref>
        ].
Очевидно, что при наличии 64-разрядной адресации и достаточного объема
основной энергонезависимой памяти XML-ориентированные СУБД можно
резко упростить и ускорить.
4
      </p>
      <p>Заключение
Как видно, сценариев, в которых SCM может значительно повысить
эффективность СУБД и упростить их организацию, более чем достаточно. Нужно
продолжать анализировать разные ветви дисциплины управления данными, чтобы
не упустить других благоприятных возможностей применения SCM. Лично для
меня было бы очень интересно найти пути использования SCM в аналитических
СУБД. И конечно, требуется большое число исследовательских проектов, чтобы
найти правильные пути разработки СУБД на основе SCM.
Литература</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>R.</given-names>
            <surname>Bayer</surname>
          </string-name>
          ,
          <string-name>
            <surname>E. McCreight.</surname>
          </string-name>
          <article-title>Organization and Maintenance of Large Ordered Indexes</article-title>
          ,
          <source>Acta Informatica</source>
          , vol.
          <volume>1</volume>
          , issue 3, pp.
          <fpage>173</fpage>
          -
          <lpage>189</lpage>
          ,
          <year>1972</year>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Joseph</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Hellerstein</surname>
            and
            <given-names>Michael</given-names>
          </string-name>
          <string-name>
            <surname>Stonebraker</surname>
          </string-name>
          .
          <article-title>Anatomy of a Database System</article-title>
          .
          <source>In Readings in Database Systems, 4th Edition</source>
          . MIT Press,
          <year>2005</year>
          , pp.
          <fpage>42</fpage>
          -
          <lpage>95</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          4.
          <string-name>
            <given-names>P.</given-names>
            <surname>Griffiths Selinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.M.</given-names>
            <surname>Astrahan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.D.</given-names>
            <surname>Chamberlin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.A.</given-names>
            <surname>Lorie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.G.</given-names>
            <surname>Price</surname>
          </string-name>
          .
          <article-title>Access Path Selection in a Relational Database Management System</article-title>
          .
          <source>In Proceedings of the 1979 ACM SIGMOD International Conference on Management of Data</source>
          , pp.
          <fpage>23</fpage>
          -
          <lpage>34</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          5.
          <string-name>
            <surname>David J. DeWitt</surname>
          </string-name>
          ,
          <string-name>
            <surname>Paula</surname>
            <given-names>B. Hawthorn.</given-names>
          </string-name>
          <article-title>A Performance Evaluation of Data Base Machine Architectures (Invited Paper)</article-title>
          .
          <source>In Proceedings of the 7th International. Conference on Very Large Data Bases</source>
          ,
          <year>1981</year>
          , pp.
          <fpage>199</fpage>
          -
          <lpage>214</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          6.
          <string-name>
            <surname>David</surname>
            <given-names>DeWitt</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Jim</given-names>
            <surname>Gray</surname>
          </string-name>
          .
          <article-title>Parallel database systems: the future of high performance database systems</article-title>
          .
          <source>Communications of the ACM</source>
          , vol.
          <volume>35</volume>
          ,
          <string-name>
            <surname>Issue</surname>
            <given-names>6</given-names>
          </string-name>
          ,
          <year>June 1992</year>
          , pp.
          <fpage>85</fpage>
          -
          <lpage>98</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          7.
          <string-name>
            <surname>David J. DeWitt</surname>
          </string-name>
          ,
          <string-name>
            <surname>Randy H. Katz</surname>
            ,
            <given-names>Frank</given-names>
          </string-name>
          <string-name>
            <surname>Olken. Leonard D Shapiro</surname>
            ,
            <given-names>Michael R.</given-names>
          </string-name>
          <string-name>
            <surname>Stonebraker</surname>
            ,
            <given-names>David A.</given-names>
          </string-name>
          <string-name>
            <surname>Wood</surname>
          </string-name>
          .
          <article-title>Implementation techniques for main memory database systems</article-title>
          .
          <source>In Proceedings of the 1984 ACM SIGMOD International Conference on Management of Data</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Tirthankar</given-names>
            <surname>Lahiri</surname>
          </string-name>
          ,
          <string-name>
            <surname>Marie-Anne Neimat</surname>
            and
            <given-names>Steve</given-names>
          </string-name>
          <string-name>
            <surname>Folkman</surname>
          </string-name>
          .
          <article-title>Oracle TimesTen: An InMemory Database for Enterprise Applications</article-title>
          .
          <source>Bulletin of the Technical Committee on Data Engineering</source>
          , vol.
          <volume>36</volume>
          , no.
          <issue>2</issue>
          , June 2013, pp.
          <fpage>6</fpage>
          -
          <lpage>13</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          10.
          <string-name>
            <surname>Jan</surname>
            <given-names>Lindstrцm</given-names>
          </string-name>
          , Vilho Raatikka, Jarmo Ruuth, Petri Soini, and Katriina Vakkila, IBM solidDB:
          <article-title>In-Memory Database Optimized for Extreme Speed and Availability</article-title>
          .
          <source>Bulletin of the Technical Committee on Data Engineering</source>
          , vol.
          <volume>36</volume>
          , no.
          <issue>2</issue>
          , June 2013, pp.
          <fpage>14</fpage>
          -
          <lpage>20</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          11.
          <string-name>
            <given-names>Michael</given-names>
            <surname>Stonebraker</surname>
          </string-name>
          and
          <string-name>
            <given-names>Ariel</given-names>
            <surname>Weisberg</surname>
          </string-name>
          .
          <article-title>The VoltDB Main Memory DBMS</article-title>
          .
          <source>Bulletin of the Technical Committee on Data Engineering</source>
          , vol.
          <volume>36</volume>
          , no.
          <issue>2</issue>
          , June 2013, pp.
          <fpage>21</fpage>
          -
          <lpage>27</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          13.
          <string-name>
            <surname>Novotný</surname>
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kadlec</surname>
            <given-names>J.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kuchta R. NAND</surname>
          </string-name>
          <article-title>Flash Memory Organization and Operations</article-title>
          .
          <source>Journal of Information Technology &amp; Software Engineering</source>
          , vol.
          <volume>5</volume>
          , issue 1,
          <year>2015</year>
          . 8 p.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          14. Сайт проекта FlashyDB, http://dblab.reutlingen-university.de/FDB.html. Data Management Lab, Reutlingen University, Germany.
          <source>Дата обращения 10 октября 2017 г.</source>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          15.
          <string-name>
            <surname>Ilia</surname>
            <given-names>Petrov</given-names>
          </string-name>
          , Robert Gottstein,
          <article-title>Sergej Hardock. DBMS on modern storage hardware</article-title>
          .
          <source>In Proceedings of the 31st International Conference on Data Engineering (ICDE)</source>
          ,
          <year>2015</year>
          , pp.
          <fpage>1545</fpage>
          -
          <lpage>1548</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          16. С.Д. Кузнецов, А.А. Прохоров.
          <article-title>Алгоритмы управления буферным пулом СУБД при работе с флэш-накопителями</article-title>
          .
          <source>Труды ИСП РАН, т. 23</source>
          ,
          <year>2012</year>
          , стр.
          <fpage>173</fpage>
          -
          <lpage>194</lpage>
          . DOI:
          <volume>10</volume>
          .15514/ISPRAS-2012
          <source>-23-11</source>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          17. S. Raoux,
          <string-name>
            <given-names>G. W.</given-names>
            <surname>Burr</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Breitwisch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. T.</given-names>
            <surname>Rettner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.-C.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. M.</given-names>
            <surname>Shelby</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Salinga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Krebs</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.-H.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.-L.</given-names>
            <surname>Lung</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C. H.</given-names>
            <surname>Lam</surname>
          </string-name>
          .
          <article-title>Phase-change random access memory: A scalable technology</article-title>
          .
          <source>Journal of Research and Development</source>
          , vol.
          <volume>52</volume>
          , No 4/5, 2008, pp.
          <fpage>465</fpage>
          -
          <lpage>479</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          18.
          <string-name>
            <surname>D.B. Strukov</surname>
            ,
            <given-names>G.S.</given-names>
          </string-name>
          <string-name>
            <surname>Snider</surname>
            ,
            <given-names>D.R.</given-names>
          </string-name>
          <string-name>
            <surname>Stewart</surname>
            and
            <given-names>R.S.</given-names>
          </string-name>
          <string-name>
            <surname>Williams</surname>
          </string-name>
          .
          <article-title>The missing memristor found</article-title>
          .
          <source>Nature</source>
          ,
          <volume>453</volume>
          , 1 May 2008, pp.
          <fpage>80</fpage>
          -
          <lpage>83</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          19. MRAM:
          <article-title>Создание производства магниторезистивной оперативной памяти в России</article-title>
          , http://www.rusnano.com/projects/portfolio/crocus-technology.
          <source>Дата обращения 10</source>
          ок- тября
          <year>2017</year>
          г.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          20.
          <string-name>
            <surname>Yiling</surname>
            <given-names>Lin</given-names>
          </string-name>
          ,
          <source>IJessie Shen</source>
          ,
          <source>DIGITIMES [Tuesday 26 September</source>
          <year>2017</year>
          ].
          <article-title>Samsung ready to mass produce MRAM chips using 28nm FD-SOI process</article-title>
          . https://digitimes.com/news/a20170925PD206.html.
          <source>Дата обращения 10 октября 2017 г.</source>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          21.
          <string-name>
            <surname>Joy</surname>
            <given-names>Arulraj</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Andrew</given-names>
            <surname>Pavlo</surname>
          </string-name>
          .
          <article-title>How to Build a Non-Volatile Memory Database Management System</article-title>
          .
          <source>In Proceedings of the 2017 ACM International Conference on Management of Data</source>
          , pp.
          <fpage>1753</fpage>
          -
          <lpage>1758</lpage>
          ,
          <year>2017</year>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          22. Intel 64 and IA-32
          <source>Architectures. Software Developer's Manual. Documentation Changes. July</source>
          <year>2017</year>
          . https://software.intel.com/sites/default/files/managed/3e/79/252046-sdmchange-document.
          <source>pdf. Дата обращения 10 октября 2017 г.</source>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          24. С.Д. Кузнецов.
          <article-title>Методы сортировки и поиска</article-title>
          . http://citforum.ru/programming/theory/sorting/sorting2.shtml.
          <source>2003 г. Дата обращения 10 октября 2017 г.</source>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          25.
          <string-name>
            <given-names>Michael</given-names>
            <surname>Stonebraker</surname>
          </string-name>
          .
          <article-title>The Design of the POSTGRES Storage System</article-title>
          .
          <source>In Proceedings of 13th International Conference on Very Large Data Bases</source>
          ,
          <year>1987</year>
          , pp.
          <fpage>289</fpage>
          -
          <lpage>300</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          26.
          <article-title>Сайт проекта Peloton: The Self-Driving Database Management System</article-title>
          , http://pelotondb.io/. Database Group, Carnegie Mellon University. Дата обращения 10 октября
          <year>2017</year>
          г.
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          27.
          <string-name>
            <surname>Andrew</surname>
            <given-names>Pavlo</given-names>
          </string-name>
          , Gustavo Angulo, Joy Arulraj, Haibin Lin,
          <string-name>
            <given-names>Jiexi</given-names>
            <surname>Lin</surname>
          </string-name>
          , Lin Ma, Prashanth Menon, Todd C. Mowry, Matthew Perron, Ian Quah, Siddharth Santurkar, Anthony Tomasic, Skye Toor, Dana Van Aken,
          <string-name>
            <surname>Ziqi</surname>
            <given-names>Wang</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yingjun Wu</surname>
          </string-name>
          , Ran Xian, Tieying Zhang.
          <article-title>Self-Driving Database Management Systems</article-title>
          .
          <source>In Proceedings of the 8th Biennial Conference on Innovative Data Systems Research (CIDR '17)</source>
          ,
          <source>Online Proceedings</source>
          , 6 p.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          28. С.Д. Кузнецов.
          <article-title>К свободе от проблемы больших данных</article-title>
          .
          <source>Открытые системы, N 2</source>
          ,
          <year>2012</year>
          , стр.
          <fpage>22</fpage>
          -
          <lpage>24</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          29.
          <string-name>
            <surname>Ted</surname>
            <given-names>Neward</given-names>
          </string-name>
          ,
          <source>The Vietnam of Computer Science. Ted Neward's Blog, Jun</source>
          <volume>26</volume>
          ,
          <year>2006</year>
          . Дата обращения 10 октября
          <year>2017</year>
          г.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          30. С.Д. Кузнецов.
          <article-title>Объектные модели ODMG и SQL десять лет спустя: нет противоре- чий</article-title>
          .
          <source>Труды ИСП РАН, том 27, выпуск 1</source>
          ,
          <year>2015</year>
          г., cтр.
          <fpage>173</fpage>
          -
          <lpage>192</lpage>
          . DOI:
          <volume>10</volume>
          .15514/ISPRAS-2015-
          <volume>27</volume>
          (
          <issue>1</issue>
          )-
          <fpage>9</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          31.
          <article-title>The Object Data Standard: ODMG 3.0</article-title>
          .
          <string-name>
            <surname>Edited by R.G.G. Cattel</surname>
          </string-name>
          ,
          <string-name>
            <surname>Douglas</surname>
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Barry</surname>
          </string-name>
          . Morgan Kauffmann Publishers,
          <year>2000</year>
          , 280 p.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          32.
          <string-name>
            <surname>Alfons</surname>
            <given-names>Kemper</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Donald</given-names>
            <surname>Kossmann</surname>
          </string-name>
          .
          <article-title>Adaptable Pointer Swizzling Strategies in Object Bases: Design, Realization, and Quantitative Analysis</article-title>
          .
          <source>The VLDB Journal</source>
          , vol.
          <volume>4</volume>
          ,
          <string-name>
            <surname>issue</surname>
            <given-names>3</given-names>
          </string-name>
          ,
          <year>July 1995</year>
          , pp
          <fpage>519</fpage>
          -
          <lpage>566</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          33.
          <string-name>
            <surname>Ilya</surname>
            <given-names>Taranov</given-names>
          </string-name>
          , Ivan Shcheklein, Alexander Kalinin, Leonid Novak, Sergei Kuznetsov, Roman Pastukhov, Alexander Boldakov, Denis Turdakov, Konstantin Antipin, Andrey Fomichev,
          <string-name>
            <given-names>Peter</given-names>
            <surname>Pleshachkov</surname>
          </string-name>
          , Pavel Velikhov, Nikolai Zavaritski, Maxim Grinev, Maria Grineva,
          <string-name>
            <given-names>Dmitry</given-names>
            <surname>Lizorkin</surname>
          </string-name>
          .
          <article-title>Sedna: Native XML Database Management System (Internals Overview)</article-title>
          .
          <source>In Proceedings of the 2010 International Conference on Management of Data</source>
          , pp.
          <fpage>1037</fpage>
          -
          <lpage>1046</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>