Современные базы данных являются конструктором, который состоит из меньших деталей. Выделяют 4 части:
- Форматы хранения (Apache Arrow, Apache Parquet)
- Оптимизатор (Apache Calcite, Substrait)
- Compute (Trino/Presto, Velox)
- Транзакции (Apache Iceberg, Apache Hudi)
OLTP (Online Transaction Processing): заточены, чтобы сохранять текущие изменения, взаимодействия с пользователями. Например, MySQL, Oracle, Apache Kafka. Нужны, чтобы максимально быстро и изменять небольшое количество строк в таблице, но у этой таблицы может быть большое количество строк. В основном записи, а не чтения.
OLAP (Online Analytical Processing): заточены для анализа накопленной исторической информации. Работают с большим количеством строк и с маленьким количество аттрибутов, в основном читающая нагрузка.
Зачастую, в OLTP СУБД данные хранятся в строках, например, в Postgres, а в OLAP системах зачастую хранятся поколоночно (Clickhouse). Есть еще HTAP системы, которые пытаются быть "и нашим и вашим", но успехов у них не особо много. Пример HTAP базы данных – SAP Hana, MemSQL, туда же целится YDB. Обычно имеют два вида баз данных внутри, OLAP и OLTP, вместо одной универсальной БД.
- SQL-интерфейс
- Отделение compute от storage
- Параллельность
- Распределенность
- Колоночное хранение
- Компиляция запросов (JIT)