Как Airtable сократил стоимость хранения архивных данных в 100 раз и сэкономил миллионы долларов
В 2024 году команда Airtable столкнулась с проблемой, знакомой многим крупным компаниям: объем данных в MySQL рос настолько быстро, что некоторые базы уже приближались к лимиту AWS RDS в 64 ТБ.
Основную часть занимали журналы изменений и история действий пользователей — данные, которые редко читаются, но по требованиям клиентов должны храниться до 10 лет.
Хранить петабайты такой информации в MySQL оказалось слишком дорого.
При этом отказаться от нее было нельзя: пользователи ожидают, что история изменений открывается мгновенно, а инженеры регулярно используют эти данные для расследования инцидентов и отладки.
Решение оказалось довольно элегантным.
Свежие данные остались в MySQL, а архивные перенесли в AWS S3, сохранив их в формате Apache Parquet.
Для выполнения запросов команда протестировала несколько движков, включая Athena, DuckDB и StarRocks, но в итоге остановилась на DataFusion — SQL-движке на Rust, который лучше остальных использовал возможности Parquet и позволял встроить движок прямо в существующие сервисы без запуска отдельного кластера.
Сама миграция была нетривиальной.
Снимки огромных MySQL-таблиц выгружались из RDS в Parquet, после чего Apache Flink перераспределял данные по отдельным базам. Затем специальные процессы объединяли файлы, удаляли дубликаты и формировали оптимизированные Parquet-файлы для дальнейшего хранения и обслуживания запросов.
Перед запуском новую систему долго проверяли.
Помимо сверки данных между MySQL и Parquet, команда включила shadow-режим на реальном трафике, когда каждый запрос параллельно выполнялся и через старую, и через новую систему.
Такой подход помог обнаружить множество неожиданных проблем: различия в обработке чисел между JavaScript и Rust, ошибки сортировки в DataFusion и даже проблемы во взаимодействии Rust-кода с Node.js.
После запуска основная работа сосредоточилась вокруг производительности.
Поскольку запросы выполнялись поверх файлов в S3, инженеры построили многоуровневую систему кэширования и добились более 99% попаданий в кэш для метаданных.
Для сложных фильтров появились собственные вторичные индексы на базе Parquet, а для некоторых типов запросов начали использовать Bloom Filters, чтобы не сканировать лишние данные.
Итог проекта:
Airtable вынес петабайты данных из MySQL, снизил стоимость хранения примерно в 100 раз и начал экономить миллионы долларов ежегодно.
При этом для пользователей практически ничего не изменилось — история изменений по-прежнему открывается с интерактивной скоростью.
Это отличный пример того, как современные форматы хранения данных, объектные хранилища и open-source инструменты вроде DataFusion позволяют строить решения, которые раньше ассоциировались только с полноценными СУБД.
♾️Оригинальный пост♾️
@tldr_data
Post #119
147