Versant Object Database — объектная СУБД родом из Гамбурга

Известная в мире, но неведомая в наших краях.

Что такое VOD?

Versant Object Database, она же VOD, она же Actian NoSQL Object Database – это Объектная СУБД, продукт сумрачных немецких гениев. VOD позволяет хранить информацию в виде объектов C++ или Java в том же виде, в котором эти объекты применяются в программе, исполняемой в оперативной памяти (memory-like model).

В этом ключевое отличие объектных СУБД от реляционных, которые хранят данные в таблицах.

VOD и VOD JPA – это флагманские продукты компании Versant, а позднее и Actian. В линейке продуктов компании есть и другие СУБД, в том числе объектные: FastObjects, db4o, и реляционные: Ingres (Actian X), Vector, гибридные: Actian Zen.

Немного об объектных СУБД

Объектные СУБД хранят данные в виде объектов. Чаще всего, объекты моделируют существующие в реальном мире структуры. Объектные базы данных неразрывно связаны с парадигмой объектно-ориентированного программирования, так как выступают наиболее удобным и эффективным хранилищем информации для программ, написанных на объектно-ориентированных языках.

Объектно-реляционный разрыв

Несоответствие объектно-ориентированного языка программирования и реляционного хранилища данных хорошо изучено и получило название «объектно-реляционный разрыв» (The impedance mismatch).. Для желающих погрузиться в проблему импеданса - ссылка.

Мэри Лумис, один из идеологов СУБД Versant, очень кратко и точно сформулировала актуальность объектного подхода к базам данных: «Модель данных более близка сущностям реального мира. Объекты можно сохранить и использовать непосредственно, не раскладывая их по таблицам. Типы данных определяются разработчиком и не ограничены набором предопределенных типов».

Для иллюстрации, приведу пример из горных лыж. Абсолютное большинство лыж в магазинах имеет боковой вырез. Если упрощенно, этот вырез определяет «любимый» радиус поворота лыжи (указан на ней в метрах). Такая лыжа создана для техники катания «карвинг», для совершения резаных поворотов. «Тошнить» на ней боком по склону, мягко говоря, неудобно. Тем не менее, большинство пользователей этих лыж ничего не знает о «карвинге» и ездят на них как получится: плугом, в боковом скольжении или несутся «ломом» вниз по склону. Для такой «техники» больше подошли бы лыжи без выреза, но они много лет считаются устаревшими и не продаются.

Аналогично с разработкой ПО, если нужно быстро, безопасно и стабильно карвить (использовать объектно-ориентированный язык программирования), то понадобится объектная СУБД (лыжи с боковым вырезом).

Когда сложный объект заносится в реляционную базу, обязательна процедура декомпозиции его данных для их размещения в таблице. При чтении объекта из реляционной базы он собирается из отдельных элементов и только затем пригоден для использования. В объектных СУБД все иначе. Данные объекта помещаются в хранилище как единое целое.

Чтобы прикрыть несоответствие языка разработки и хранилища данных, пользователи и производители стремительно устаревших реляционных СУБД придумали технологию объектно-реляционного преобразования (ORM), которая автоматически делает «сборку и разборку» объектов для реляционных баз, служит мостиком между базой и приложением. Однако выяснилось, что эта технология ограничена значимыми накладными расходами на это преобразование, снижающими производительность. Выиграть в скорости разработки тоже не получилось, проблемой стали постоянные переделки при изменении схемы базы данных. Все это увеличивало стоимость разработки и обслуживания готовых систем.

Очевидно, что для создания ПО в 2021 году стоит использовать объектно-ориентированный язык программирования вместе с true-объектной СУБД, сохраняющей объекты языка в «нативном» виде. VOD является такой СУБД, а язык разработки (C++ или Java) одновременно является языком описания данных (DDL), и это значит, что вместо самого популярного языка описания данных SQL, разработчикам доступна вся мощь таких языков как С++ и Java.

Области применения

VOD хороша там, где разработчикам нужно обращаться с экстремально большими объемами сложноструктурированных данных, обрабатывать их в режиме реального времени, поддерживать доступ к ним большого числа пользователей, работающих одновременно. Эти и другие особенности VOD (легкая доступность данных, масштабирование) востребованы крупными мировыми компаниями, которые создают большие промышленные системы в следующих областях:

  • процессинг сделок, fraud-менеджмент и анализ рисков на крупнейших биржах, торговых площадках, в банках;
  • управление сетями основных мировых телекоммуникационных операторов;
  • анализ больших данных в режиме реального времени;
  • системы резервирования/продажи билетов крупнейших авиакомпаний и гостиничных сетей;

  • массовые многопользовательские онлайн-игры;

  • научные симуляции сложных процессов;

  • социальные сети.

Почитать о примерах применения VOD можно здесь или посмотреть Use Cases на сайте Actian. Результаты сравнительных тестов VOD доступны там же.

Личный опыт

Мы применили VOD при создании BIL24 – платформы для участников рынка зрелищных мероприятий. BIL24 написана на Java и ориентирована как на покупателей, использующих для покупки билетов сайты, мобильные приложения, социальные сети, так и на продажи билетов через традиционные кассы.

Кажущаяся простота задачи «продажа билетов на любое событие» – обманчива. Билеты бывают разных видов: с указанием мест и входные (без мест), они продаются по разным ценовым категориям (ближе или дальше от сцены), по разным тарифам (взрослый, детский), могут иметь множество ограничений, в том числе и по емкости «места проведения», например, экскурсионного судна. Билеты связаны с местами, на которые они выпущены, места принадлежат площадке (концертному залу, стадиону) с одной стороны, и сеансу, который принадлежит событию – с другой. Сеансы одного события могут происходить на разных площадках, в разных городах. У билетов, мест, сеансов, событий и площадок есть множество параметров, часто взаимосвязанных. Всю эту кавалькаду сущностей необходимо перевести в объекты и работать с ними так, чтобы обеспечить продажу билетов максимальному числу покупателей в режиме реального времени. Необходимо продавать быстро и надежно, даже если в эти секунды десятки тысяч людей одновременно хотят приобрести билеты на аншлаговые спортивные или развлекательные события, которые пройдут на крупнейших стадионах страны.

Другой важной задачей платформы является обеспечение взаимодействия в режиме реального времени нескольких десятков внешних билетных систем, когда эти системы одновременно являются источниками и получателями билетов.

Проект BIL24 успешно реализован. Платформа заняла ключевое положение на билетном рынке России и продолжает развиваться, оснащаясь новым функционалом. Оглядываясь назад, понятно, что код BIL24 создавался в кратчайшие сроки. При использовании реляционной СУБД, затраты на разработку были бы в 2 – 2,5 раза больше.

В итоге

VOD – не «серебряная пуля» (привет Фредерику Бруксу), это просто хороший выбор для многих современных задач, а для некоторых из них - безальтернативно лучший выбор. В то же время, следует понимать, что существует великое множество проектов, где PostgreSQL или MongoDB хватит за глаза. Но если использовать объектно-ориентированный язык программирования, то лучше применять объектную СУБД, хотя и не обязательно VOD.

0
57 комментариев
Написать комментарий...
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Александр Орлов
Автор

А чем конкретно лучше то с объектным языком использовать реляционную базу?

К SQL отношусь ровно, написал: "существует великое множество проектов, где PostgreSQL или MongoDB хватит за глаза."  И я дал ссылку на Объектно-реляционный разрыв, чтобы вам не казалось, что я все это придумал )).

Когда пишешь про объектные базы и импеданс сразу набегают защитники реляционной алгебры и SQL. Часто, агрессивно-консервативные, с неприятием всего нового. При этом объектные базы никогда не использовали и действуют по старому советскому принципу: "Пастернака не читал, но осуждаю..." Думаю, что им кажется, что если они не защитят свою полянку, ее отберут )

Ну что же.... Я привык ).  Дадите ссылки на свои проекты с SQL, почитаю...

Ответить
Развернуть ветку
6 комментариев
Alex Chernyshev

Это очень очень очень плохая идея, хранить объекты программы as-is в любом постоянном хранилище.
По очень простой причине:  программы меняются.  Достаточно поле добавить в класс объекта, который сохранен в хранилище в сериализованном виде и все - больше вы ваши данные напрямую не достанете (без кастомной сериализации) тк разойдется структура данных (класс) и сами данные.

Поэтому место вашему VOD на свалке истории, рядом с COM+, CORBA и подобными ужасами.

Ответить
Развернуть ветку
Александр Орлов
Автор

Посмотрите на список клиентов, использующих VOD, на их проекты . Хорошая такая свалка ))). Насмешили)
https://kernel.group/actian.html#02

China Telecom управляет клиентской базой в 250 млн. ADSL абонентов. Разработка базы данных для хранения и быстрого доступа к информации абонентов стала для компании огромной проблемой.

Задача

Производительность и надежность базы должны обеспечивать до 480 000 запросов и 1000 операций в секунду в периоды пиковой нагрузки. Существующие приложения China Telecom работали с базой данных абонентов и обеспечивали доступ в реальном времени к сотням тысяч учетных записей. Клиентская база была развернута в реляционной СУБД и требовала высокопроизводительный, дорогой в обслуживании сервер. Со временем система стала слишком громоздкой, чтобы поддерживать растущую клиентскую базу компании.

Решение

Разработчики China Telecom предложили заменить существующую сложную централизованную реляционную СУБД группой недорогих блейд-серверов с объектной базой данных. Для реализации этого решения China Telecom обратилась к Versant – лидеру в отрасли программного обеспечения для управления объектными базами данных. Технология Versant предоставила компании высокопроизводительную, распределенную и устойчивую информационную среду.

Ответить
Развернуть ветку
9 комментариев
Главный хичхакер

Комментарий недоступен

Ответить
Развернуть ветку
27 комментариев
Game Topia

Могу ошибаться, но мне показалось вот как... На сервер приходит запрос и эндпоин лезет в любую бд, в которой данные хранятся в формата самой бд и без конвертирования ваш язык программирования их использовать не может.

Но в этой бд данные хранятся в том расширении, которое используется в самой виртуальной машине. То есть преобразование не требуется. И оно будет всегда ок, пока сервер на java. Вам никто не помешает их так же в json трансформировать.

Ответить
Развернуть ветку
11 комментариев
Иван Крючков

Если отбросить воду, все преимущества, которые я понял из статьи, что хранится все в особом формате, который позволяет сэкономить на сериализации/десериализации и материализации/дематериализации.

А что там по запросам? Какие индексы можно строить, полнотекстовый поиск, spatial данные? Какие виды аггрегаций я могу делать? Могу ли я делать запрос вида: дайте всех юзеров, у которых больше двух тегов с с корнем "глав" и ревенью за пол года больше 1000? 

Как это все масштабируется, как обстоят дела с репликацией, шардированием и прочим?

Так вы слона не продадите.

Ответить
Развернуть ветку
Александр Орлов
Автор

Объектная СУБД - это не только формат данных, это много чего. Чтобы работать с ней на Java нужно знать, например,  Java Persistence API (JPA) — спецификация API Java EE, предоставляет возможность сохранять в удобном виде Java-объекты в базе данных. 

Actian не дает документацию к VOD просто так, но добрые люди из Pennsylvania State University выложили один том "Versant Object Database Fundamentals Manual"
Пользуйтесь, если интересно https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.647.154&rep=rep1&type=pdf

С масштабированием, репликацией, индексами, многоуровневым кэшем в VOD все прекрасно. Я не собираюсь сюда копипастить доку. 

"Так вы слона не продадите." - Наверное я зря в статье не написал, что я ничего не продаю. совсем ничего . Я team lead and software architect at Kernel.group https://kernel.group/index.html 

В статье описан кейс по созданию платформы bil24.pro основанной на VOD. Статью я разместил в разделе "Личный опыт", где часто пишут о том, кто, как и на чем реализует те или иные проекты.   Ссылку на статью я даю тем, кто расспрашивает меня про VOD. В статье есть несколько полезных ссылок. 

отдельно, мне нравится в VOD Roll forward Archiving - журналирование транзакций на сервере, который стоит в горячей замене основного. 

Ответить
Развернуть ветку
Александр Орлов
Автор

Почитайте здесь,
https://intellect.icu/obektno-relyatsionnyj-razryv-i-nesootvetstvie-soprotivlenie-i-impedans-8942
 "выяснилось..." там, с этой статьей вы тоже, как я понимаю не согласны? 

ORM criticism basically boils down to 3 points: complexity, performance drawbacks, and overall leakiness. 

Вы не задумывались, зачем вообще прокладка в виде ORM, когда без нее удобнее и быстрее хранить в базе классы в том виде, в котором вы используете их в программе?. Свою роль в переходном периоде, когда тру-объектных баз было мало, она сыграла. Теперь их много, ORM не нужен. Чего вы его так защищаете?

Да. некоторые люди сразу пишут "автор люто ненавидит...", "детский  лепет...", ну имеют право. Им кажется, что если принизить собеседника и его квалификацию, они станут лучше, значимее. 

Вы сталкивались с объектными базами без ORM?  попробуйте, понравится)

Ответить
Развернуть ветку
Александр Орлов
Автор

Вот попалась статья на хабре: https://habr.com/ru/post/265061/
Шпаргалка Java программиста 1: JPA и Hibernate в вопросах и ответах

Вопрос 1. Что такое JPA?
Ответ: JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде.

Ответ не совсем верный, ну или совсем неверный. "...в таблицы реляционных баз данных в удобном виде..." Серьезно? 

К чести автора статьи он приводит оригинал на английском:
The JPA (Java Persistence API) is the specification of the Java API for the management of persistence and object/relational mapping with Java EE and Java SE.

При переводе на русский выкинуто всего одно слово: persistence . А ведь именно это понятие является ключевым для уразумения как устроена объектная модель данных и Объектные (не реляционные) СУБД. 

 Приведу абзац из VOD White paper
 https://www.actian.com/wp-content/uploads/2017/03/DS19-ActianNoSQL-Database_02.pdf?id=5201

Agile Development w/ Native Object Persistence

The impedance mismatch between object oriented programming languages and traditional relational databases is well known. There is a good reason why object to relational mapping (orm) frameworks, tools and technologies have emerged to “cover up” this problem. And it is also well known that these ORM frameworks have their limitations, e.g., adding a significant performance overhead, requiring constant tweaking and a fair amount of manual coding, and not offering support to evolve the database schema.

For true agile software development, only native object persistence services, offered by Actian NoSQL’s C++ and Java APIs, will work and save up to 40% in development and maintenance costs.

Ответить
Развернуть ветку
Читать все 57 комментариев
null