Современный мир задыхается в растущих потоках и объемах информации. В связи с этим увеличивается и необходимость ее структурирования и обработки. На сегодняшний день большая часть информации хранится в базах данных, находящихся на стационарных серверах или в облаках. Основательница компании ObjectBox Вивьен Доллинджер рассказала «Хайтеку» о том, как зарождались первые NoSQL-базы, о трудных буднях разработчика приложений и интернета вещей, а также об опасностях компьютерного мира.
Вивьен Доллинджер — магистр делового администрирования MBA и PhD в области бизнеса, основатель компании ObjectBox.
ObjectBox — английско-немецкая компания-разработчик одноименной объектно-ориентированной NoSQL-системы управления базами данных для мобильных устройств и IoT.
Создание новой СУБД похоже на прыжок в воду с обрыва
До недавних пор понятие СУБД прочно ассоциировалось с мощными серверами, огромными объемами данных и специалистами, владеющими специальными языками программирования — SQL. Но представьте, что вы разработчик приложений, и вам понадобилась небольшая, но простая, автономная и быстрая СУБД, например, для мобильника? Или же для какого-то иного интеллектуального устройства, которые всё больше входят в нашу повседневную жизнь? Было бы странно устанавливать туда какого-то монстра, который будет весить больше, чем само приложение!
До создания ObjectBox Вивьен Доллинджер и ее компаньон Маркус Юнгингер занимались разработкой мобильных приложений. В процессе работы они столкнулись со сложной задачей: найти СУБД для своих программ — быстродействующую, с высокой степенью надежности и простую в работе. Не найдя ни одной подобной, Маркус и Вивьен решили создать собственную.
Как это ни парадоксально, но основные проблемы, связанные с реляционными базами данных, вытекают из их основных преимуществ. Например, строгое следование правилам ACID неизбежно приводит к падению производительности системы, а в случае попытки масштабирования СУБД на несколько вычислительных систем, как это делается в облачных вычислениях, приводит к тому, что одновременное предоставление доступности и согласованности оказывается невозможным.
С другой стороны, задачи обработки больших данных не требуют столь жесткого подхода и вполне готовы мириться с некоторой прогнозируемой степенью неопределенности. Также чрезвычайно замедляет работу и накладывает ограничения на тип хранимых объектов и сама слишком умная и гибкая модель SQL — современные задачи такие возможности полностью никогда не используют, ограничиваясь более простыми алгоритмами обработки и хранения.
Образно SQL и NoSQL базы можно сравнить с перекрестками со светофором и с круговым движением. В первом случае движение более упорядочено, риск аварий минимален, но ресурсы используются неэффективно, например, водители будут ожидать разрешения двигаться даже при пустой пересекающей дороге, в другом случае пропускная способность гораздо выше, но требует от водителей повышенного внимания и навыков.
«Где-то до 2009 года мы работали с СУБД, использующими SQL. Рост объемов информации и типов сохраняемых данных потребовал разработки БД с новым подходом к реализации функций. Классические реляционные базы данных стали демонстрировать низкую производительность, зависать от большого количества запросов, и, что в принципе недопустимо, терять часть данных, — рассказывает Вивьен. — Мы проанализировали существующие на рынке продукты и пришли к выводу, что ни один из них не удовлетворяет наших потребностей. Нам требовалась быстрая и безотказная обработка запросов. В итоге мы решили создать свой, соответствующий духу эпохи продукт».
Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.
ACID (Atomicity, Consistency, Isolation, Durability) — принципы работы транзакционных систем, таких как СУБД: атомарность (гарантия полноты транзакци), согласованность (гарантия фиксации только допустимых результатов), изолированность (параллельность транзакций не оказывает влияния на результат) и долговечность (все завершенные транзакции должны оставаться неизменными при любых сбоях).
SQL — «язык структурированных запросов» — язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных.
Реляционная база данных — СУБД, управляющая реляционными данными, то есть построенными на математическом понятии «отношение». Наиболее простое образное представление отношений записей в реляционной базе — таблица.
«Наша команда изначально состояла из нас двоих — меня и Маркуса. Пришлось прикладывать титанические усилия, чтобы всюду успевать и реализовывать задуманное. Мы пробовали использовать ORM, который располагался поверх SQLite, а затем пошли ва-банк и создали полностью с нуля NoSQL-СУБД ObjectBox. Оглядываясь назад, осознаю — оно того стоило! Создание абсолютно новой СУБД было похоже на прыжок в воду с обрыва — относительное спокойствие до и сумасшедшая по интенсивности работа после, — вспоминает Вивьен. — Спустя 20 дней после принятия решения и множества экспериментов с кодом мы решили привлечь еще людей и создать команду, в которой Маркус занял место технического директора, а я взяла на себя руководство проектом — выбирала и корректировала общий курс, направляла всех членов команды».
Маркус Юнгингер — создатель EventBus (система рассылки оповещений для Android и Java) и greenDAO (компактная и быстрая ORM для Android под SQLite), в настоящее время технический директор и соучредитель ObjectBox. Свыше 20 лет занимается программированием и считается одним из лучших разработчиков GitHub, крупнейшего в мире сообщества разработчиков программного обеспечения.
ORM (Object-Relational Mapping, рус. объектно-реляционное отображение, или преобразование) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
SQLite — компактная встраиваемая (бессерверная) СУБД.
Сейчас в команде ObjectBox работают девять человек. Четверо из них работают под руководством Вивьен в бизнес-сегменте, преимущественно в Лондоне. А пятеро — в разработке софта с Маркусом. Изначально вся команда базировалась в Берлине. Но ObjectBox — продукт, позволяющий работать с ним удаленно, так что теперь часть группы программистов рассеяна по Европе и работает из дома.
Как это устроено внутри
Маркус и его команда разработчиков пытались реализовать сразу несколько важных моментов при разработке ObjectBox — короткий и понятный код, кроссплатформенность, возможность запуска модельного тестирования одновременно с работой в базе, надежная эксплуатация без подвисаний и остановок.
«Перед нами стояла задача выполнять граничные вычисления с использованием СУБД и синхронизировать IoT с мобильными устройствами. ObjectBox должен был представлять собой уникальную комбинацию NoSQL и объектно-ориентированного программирования, предоставляя первое высокопроизводительное NoSQL-решение объектно-ориентированной встроенной базы данных для небольших устройств», — рассказывает Вивьен.
Для разработки БД Маркус предложил платформу Android, спроектировал всё так, чтобы для работы с ObjectBox можно было использовать любой из пяти языков программирования — Java, Kotlin, Go, Swift или C. Такая политика была выбрана для расширения круга разработчиков, выбирающих БД от компании ObjectBox как основу для своих приложений.
Для ядра был выбран C++ — один из основных языков программирования. Он универсален и используется для создания драйверов, приложений для мобильных и смартфонов, операционных систем и разнообразных игр.
«Он полностью отвечал нашим запросам, так что сомнений не возникло. ObjectBox задумывался нами как БД для разработки не только мобильных приложений, но и интернета вещей», — говорит Вивьен.
Граничные вычисления — технология, подразумевающая обработку данных непосредственно на IoT-устройствах.
NoSQL — термин, обозначающий ряд подходов к реализации СУБД, имеющих диаметральные отличия от моделей с доступом к данным средствами языка SQL.
IoT (интернет вещей) — взаимодействие гаджетов и иных электронных устройств с внешним окружением, в том числе и между собой.
Как и в случае человеческого общества, объекты, хранимые в СУБД, также как-либо взаимосвязаны друг с другом. Такие взаимосвязи принято называть отношениями, и их описание зачастую весит больше, чем сам объект. При работе СУБД смотрит (обращается) не только к самим объектам, но также и к тому, как они взаимосвязаны друг с другом, то есть к их отношениям. Представьте, что вы в браузере смотрите не только текущую страницу, но и все страницы, на которые она ссылается — это будет наиболее наглядным, хотя и упрощенным примером отношений в СУБД. Или представьте формулу, в которой цифры и переменные — это объекты, а математические знаки — отношения между ними. Основную задачу, скорость работы, удалось решить за счет использования опережающей загрузки отношений.
Общая проблема с отношениями в том, что обычно они загружаются по стратегии lazy (с англ. «лениво» — «Хайтек»), то есть по факту обращения к ним. Это приводит к задержкам при первом обращении к отношению, поскольку данные должны быть извлечены из хранящейся на относительно медленном по сравнению с оперативной памятью носителе базы данных.
ObjectBox решает эту проблему использованием «нетерпеливого» режима (eager strategy), позволяя запросам предварительно загружать отношения в фоновом режиме. Это делает потоковую обработку запросов очень быстрой. Как только запрос обработан, предварительно загруженные отношения избавляют СУБД от необходимости частого обращения к базе данных. Кроме того, для еще большего ускорения обработки для каждого запроса вы можете указать, какие именно отношения необходимо предварительно загрузить в зависимости от типа объекта или других параметров.
Децентрализация и доступность частных данных
Вторая задача, которая стояла перед командой ObjectBox, напрямую свяазана с областью применения СУБД — в IoT, IIoT, мобильных устройствах и гаджетах. Так как все их отличают достаточно небольшая мощность и ограниченный объем памяти, то и размер самой СУБД, и ее ресурсные аппетиты должны быть как можно меньше. Жесткая оптимизация кода позволила сделать размер приложения с СУБД менее 1 МБ.
«При презентации своих разработок потенциальным клиентам мы всегда учитываем их требования и задачи, которые должны быть реализованы с помощью наших продуктов. Изначально мы работали только над решением собственных задач в создании приложений, позже поняли — похожие проблемы волнуют многих в нашей сфере», — констатирует Вивьен.
СУБД ObjectBox придерживается принципа разумной децентрализации, когда часть обработки данных смещается из облака в периферию, в IoT, освобождая тем самым ресурсы облака, но само хранение остается централизованным. Команда ObjectBox считает, что сохранение данных в облачных хранилищах и синхронизация устройств между собой позволяют максимально отойти от граничных вычислений. Это позволит не загонять разработки ИТ в глухой угол, а дальше совершенствовать их.
Надежность, простота и скорость
Несмотря на различные подходы к реализации, производительность СУБД можно сравнить в одинаковых условиях на одинаковых типах данных. На приведенных графиках, полученных при помощи теста с открытым исходным кодом, показана сравнительная скорость в миллисекундах СУБД ObjectBox, Realm и Room на стандартных операциях — доступ, обновление, вставка и удаление.
Отдельное приложение ObjectBox Sync выполняет сразу несколько функций:
- через интернет обеспечивает синхронизацию имеющихся на устройстве данных c другими устройствами или облаком;
- в зависимости от заданных настроек определяет объем передаваемых данных и периодичность синхронизации, тем самым снижая затраты на облачные вычисления;
- позволяет гибко настраивать устройство в ручном или автоматическом режиме через интерфейс с настройками, командную строку, файлы с настройками или API;
- обеспечивает безопасность собранных и передаваемых устройством данных, так как без подключения к сети никакая информация не передается.
Таким образом, разработчики могут:
- создавать продукты для граничных вычислений;
- синхронизировать их с неограниченным количеством устройств;
- выполнять задачи на граничных устройствах, не задействуя при этом ресурсов облака;
- через сеть передавать в реальном времени полученные на граничных устройствах результаты сбора данных или вычислений в облачные хранилища.
SaaS — одна из форм облачных вычислений, модель обслуживания, при которой подписчикам предоставляется готовое прикладное программное обеспечение, полностью обслуживаемое провайдером.
Участие в конкурсах — дорога к инвестициям
«Долгие годы компания была частной. Нас, владельцев, не устраивали ее темпы роста, и вполне логичным шагом стал поиск внешнего финансирования. В 2017 году мы подали заявку и успешно приняли участие в Techstars London 2017 — одной из крупнейших программ-акселераторов для стартапов. Весной 2018 года известные всему миру инвестиционные компании Vito Ventures и Cavalry Ventures предоставили ObjectBox $2 млн в качестве первых вложений, — делится Вивьен. — Я и сейчас бесконечно благодарна им за веру в наш проект».
Techstars — бизнес-акселератор, основанный в США в 2006 году. По состоянию на 2019 год фонд Techstars оказал поддержку более 1 600 компаний с общей рыночной капитализацией в $18,2 млрд. Критерии отбора очень жесткие — менее 1% заявителей принимаются в программу. Имеет разветвленную международную сеть, поддерживаемую государствами. Например, Techstars London предлагает участнику программы получение предпринимательской визы Tier 1 (Entrepreneur) Visa и право официально работать в Великобритании на протяжении трех лет. В случае, если компания после трех лет существования создает десять и больше рабочих мест, то участники стартапа и их семьи имеют право претендовать на получение постоянного жительства в Великобритании.
«Весной 2018 года известные всему миру инвестиционные компании Vito Ventures и Cavalry Ventures предоставили ObjectBox $2 млн в качестве первых вложений, — рассказывает Вивьен. — Я и сейчас бесконечно благодарна им за веру в наш проект.
Наши инвесторы сказали, что ключевыми факторами, повлиявшими на решение выписать чек, стала репутация команды в сообществе разработчиков и неординарное техническое решение. Тем не менее, для нас, как для технических специалистов, по-прежнему остается главная задача — доведение продукта до широкой аудитории».
Крупный пилотный проект для железных дорог
«Наш последний проект в области IoT стал пилотным проектом совместно с Kapsch в железнодорожной отрасли», — говорит Вивьен. Kapsch является давним партнером железнодорожных операторов и помогает отрасли переходить в цифровую эпоху. Проблема заключалась в том, что железнодорожным операторам постоянно не хватает данных о происходящем на путях, в тоннелях и в поездах.
Kapsch — австрийская корпоративная группа с 5 000 сотрудников по всему миру, работающая в области телематики, ИТ и телекоммуникаций. Основана в 1892 году.
Интегрируя СУБД ObjectBox в продукт Kapsch для железных дорог, он смог обеспечить превосходную скорость и непрерывность передачи данных для своих клиентов. Это означает, что критические данные доступны по мере необходимости и обрабатываются в СУБД в режиме реального времени. В кроссплатформенном решении Kapsch используются критически важные данные, позволяющие избежать дорогостоящих простоев и ремонтов, а также сократить время и задержки обслуживания.
Основной задачей при оптимизации работы операторов железных дорог является получение информации в реальном времени о состоянии железнодорожных путей, поездах и степени их загрузки. Диспетчерским службам нужно в любой конкретный момент времени абсолютно достоверно знать, где находятся поезда, локомотивы, вагоны, персонал и грузы, а руководству компании — иметь прозрачную финансово-логистическую модель перевозок. Достоверность и скорость обработки данных имеют самое важное значение в железнодорожной отрасли. Это повышает за счет более эффективного управления трафиком финансовые результаты компании и безопасность грузо- и пассажироперевозок.
Ближайшие перспективы
По разным экспертным оценкам ожидается, что уже к 2020 году в мире будет от 21 (Gartner) до 200 (Intel) млрд умных сенсоров и других IoT-устройств, которые будут генерировать по меньшей мере 507,5 ЗБ (зеттабайт) данных. С точки зрения аналитиков, также ожидается многократный рост компаний, специализирующихся на хранении и обработке данных для IoT. Но рынок IoT также нельзя назвать однородным. Уже сейчас эксперты выделяют на нем отдельное направление — IIoT, или промышленный интернет вещей, когда любая производственная единица является обладателем собственного «интеллекта».
Ключевыми рынками для ObjectBox являются IoT и Mobile. На рынке IoT основное внимание компания уделяет Industry 4.0 (IIoT), умным автомобилям и городам.
«Мы планируем заинтересовать таких крупных клиентов, как IoT-маркеты, производителей умных автомобилей и платформы умных городов. Наши основные конкурентные преимущества — высокая скорость, небольшой размер и разумная ценовая политика. Но это не значит, что мы невнимательны к нуждам каждого индивидуального клиента. Мы рады каждому новому разработчику, присоединившемуся к нам», — говорит Вивьен.
Хотя проект был запущен всего несколько лет назад, ObjectBox уже сейчас пользуется доверием более 150 тыс. разработчиков, которые создали более 20 тыс. уникальных приложений. Это число включает в себя только приложения с количеством установок свыше 20 млн.