Приложениям реального времени требуется база данных, способная поддерживать событийно-ориентированные архитектуры с низкой задержкой, высокой скоростью и масштабированием для запросов к большим объемам данных, пишет на портале The New Stack Джим Моффит, отвечающий за работу с разработчиками в TInybird, платформе данных реального времени для инженерных команд.

Почти каждый разработчик, нуждающийся в базе данных, первым делом обращается к знакомым фаворитам: Postgres, MySQL или MongoDB. Эти традиционные базы данных хорошо поддерживаются различными языками программирования, обычно бесплатны или недороги для начала работы и довольно просты в реализации и размещении благодаря десятилетиям практического опыта и поддержке сообщества.

Но в современном мире, основанном на данных, эти базы данных не всегда работают. Аналитика, впервые появившаяся благодаря науке о данных, инженерии данных и бизнес-аналитике, теперь внедряется в приложения, создаваемые разработчиками ПО, поддерживая в реальном времени функции, ориентированные на пользователя, такие как внутрипродуктовая аналитика, персонализация во время сессии, обнаружение аномалий и оповещение, управление запасами, оптимизация спортивных ставок, ценообразование на основе использования и многое другое.

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

Именно здесь на помощь приходят базы данных реального времени.

Что такое база данных реального времени?

На высоком уровне базы данных реального времени предназначены для поддержки следующих характеристик:

  1. высокочастотная запись;
  2. большое количество одновременных чтений;
  3. сложные аналитические запросы, которые обычно включают фильтрацию, объединение и агрегирование данных;
  4. субсекундное время отклика на эти запросы.

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

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

Тремя наиболее часто используемыми базами данных реального времени с открытым исходным кодом являются ClickHouse, Apache Pinot и Apache Druid.

Кто использует базы данных реального времени?

ClickHouse, Pinot и Druid были созданы крупными компаниями с большим объемом данных для решения задач реального времени и устранения недостатков традиционных баз данных.

ClickHouse

ClickHouse была написана с нуля компанией «Яндекс» для работы «Яндекс.Метрики», альтернативы Google Analytics. Если вы, как и многие, испытали разочарование от медленного исполнения запросов к Google Analytics, в которых отсутствуют данные реального времени, вы поймете, что побудило «Яндекс» вложить средства в создание новой базы данных.

За последние несколько лет популярность ClickHouse выросла. Известно, что Cloudflare адаптировала ее для пользовательской аналитики HTTP-трафика, а такие компании, как eBay и Uber, продолжают использовать ClickHouse для все большего количества аналитических нагрузок в режиме реального времени.

Аналогичным образом, Vercel и Hotels Network масштабировали ClickHouse, используя Tinybird в качестве платформы данных реального времени, для реализации таких сценариев использования, как персонализация сеансов в реальном времени, внутрипродуктовая аналитика, обнаружение аномалий и оповещение, а также тарификация на основе использования.

Apache Pinot

Как и «Яндекс», LinkedIn разработала свою собственную базу данных реального времени для обеспечения работы таких пользовательских функций, как «кто просматривал мой профиль», и в конечном итоге передала ее в фонд Apache Software Foundation. Uber использует Pinot для различных внутренних и внешних аналитических функций, начиная от платформы доставки для ресторанов Uber Eats и заканчивая внутренней исследовательской аналитикой для бизнес- и инженерных команд.

Apache Druid

Аналогичная история и с Apache Druid. Netflix использует Druid для анализа производительности просмотра и воспроизведения, а Airbnb интегрировала Druid для получения информации об опыте клиентов на своей платформе.

Почему базы данных реального времени важны?

В небольших масштабах строковые базы данных, такие как Postgres или MySQL, могут работать как базы данных реального времени. Надо понимать, что определение «реального времени» зависит от вашего контекста. Если у вас немного записей и простые запросы, которые не требуют высокой скорости чтения с субсекундной задержкой ответа, то вы вполне можете использовать их.

Но если вы пытались использовать что-то вроде Postgres для приложений реального времени, то вы понимаете, что в масштабе он не справляется. Postgres просто не может выполнить запрос типа SELECT sum(sales_price) FROM sales_events менее чем за секунду, когда sales_events содержит миллионы или миллиарды строк, независимо от его конфигурации, а кэширование дает мало пользы, если каждую секунду генерируется множество новых событий.

С другой стороны, базы данных реального времени, такие как ClickHouse, могут справиться с этой проблемой, и довольно легко.

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

Стоит ли переходить на базы данных реального времени сейчас?

Крупные предприятия, такие как Netflix, Uber, Cloudflare и LinkedIn, стали пионерами в использовании баз данных реального времени, предложив широкий спектр ранее недостижимых функций, которые теперь являются неотъемлемой частью их платформ и пользовательского опыта.

Но у 99,9% из нас нет ресурсов или экспертизы Netflix или Uber, чтобы с головой окунуться в реальное время, поэтому нас манят привычные Postgres, MySQL и MongoDB.

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

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

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

Как начать работу с базами данных реального времени?

Возможно, вы когда-то рассматривали возможность использования баз данных реального времени, но отказались от них из-за их стоимости и сложности. А дополнительные затраты и сложность могут заставить нервничать любого инженера.

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

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

С другой стороны, платформы данных реального времени функционируют как полноценные платформы разработки поверх баз данных реального времени. Например, Tinybird, построенная на базе ClickHouse, прозрачно обрабатывает кластерные операции, такие как масштабирование, балансировка нагрузки и распределенное хранение данных с помощью бессерверной модели увеличения/уменьшения масштаба. Кроме того, она предоставляет абстракции поверх базы данных, такие как управляемые ETL (извлечение, преобразование, загрузка) и потоковые коннекторы, несколько интерфейсов разработки (UI, CLI и API), управление токенами и фреймворк быстрой разработки API.

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