TiDB — распределённая SQL-база данных с MySQL-совместимостью и векторным поиском
📂 Исходный код на GitHubРаспределённая cloud-native SQL-база данных с открытым кодом. Горизонтальное масштабирование, высокая доступность на базе Raft, HTAP через два движка хранения (TiKV и TiFlash), совместимость с MySQL 8.0 и встроенный векторный поиск для AI-приложений.
TiDB — распределённая SQL-база данных с векторным поиском
TiDB — это распределённая SQL-база данных с открытым исходным кодом. Её разрабатывает компания PingCAP. Название читается как «тай-ди-би», где «Ti» означает Titanium. Проект написан на Go и распространяется по лицензии Apache 2.0, включая все корпоративные функции.
TiDB рассчитана на высокую доступность, сильную согласованность данных и масштабирование без остановки сервиса. При этом база совместима с MySQL 8.0, а недавно в ней появился векторный поиск. Это делает её интересной не только для классических веб-приложений, но и для проектов на базе LLM.
Ключевые возможности
Список главных функций из README проекта:
| Возможность | Что это значит на практике |
|---|---|
| Распределённые транзакции | ACID через двухфазный коммит; транзакции затрагивают несколько узлов |
| Масштабирование | Горизонтальное и вертикальное, без даунтайма |
| Высокая доступность | Протокол Raft, несколько реплик, автоматическое восстановление |
| HTAP | Строковое и колоночное хранение данных в одной базе |
| Cloud-native | Развёртывание в облаке, on-premises или в Kubernetes |
| Совместимость с MySQL | Протокол, синтаксис и инструменты MySQL 8.0 |
Разберём каждую возможность подробнее.
Распределённые транзакции
TiDB использует протокол двухфазного коммита. Это гарантирует соответствие требованиям ACID и сильную согласованность. Транзакции могут охватывать несколько узлов кластера. Даже при сетевых разделениях или отказе узлов данные остаются корректными.
Масштабирование без остановки
Кластер TiDB можно масштабировать двумя способами. Первый — добавить новые узлы. Второй — увеличить ресурсы существующих. Оба варианта не требуют остановки сервиса. В основе лежит разделение вычислений и хранения: эти слои масштабируются независимо друг от друга. Инструкции по масштабированию есть в официальной документации.
Высокая доступность на базе Raft
Данные в TiDB хранятся в нескольких репликах. Транзакция фиксируется только после записи на большинство реплик. За согласованность реплик отвечает протокол консенсуса Raft. Если часть реплик выходит из строя, кластер автоматически переключается на исправные. Размещение реплик по дата-центам настраивается, поэтому можно выбирать уровень защиты от аварий.
HTAP: транзакции и аналитика в одной системе
Обычно для транзакций и аналитики используют разные базы. TiDB объединяет оба сценария и предоставляет два движка хранения:
- TiKV — строковое хранилище для быстрых транзакций.
- TiFlash — колоночное хранилище для аналитических запросов.
TiFlash получает данные из TiKV в реальном времени по протоколу Multi-Raft Learner. Благодаря этому данные в обоих движках согласованы. Слой TiDB Server распределяет запросы между TiKV и TiFlash и выбирает оптимальный способ выполнения.
Cloud-native и TiDB Cloud
TiDB разворачивают в публичных облаках, в собственном дата-центре или в Kubernetes. Для Kubernetes есть отдельный оператор — TiDB Operator. Он автоматизирует типовые операции кластера: развёртывание, обновление, восстановление. Существует и полностью управляемый сервис TiDB Cloud с бесплатным тарифом, для которого не нужна банковская карта.
Совместимость с MySQL
TiDB совместима с MySQL 8.0. Работают привычные драйверы, ORM и инструменты. Перенести приложение можно без изменения кода или с минимальными правками. Для миграции данных есть набор специальных инструментов. Подробности о совместимости описаны в документации.
Векторный поиск для AI-приложений
Для AI-разработчика здесь важнее всего векторный поиск. TiDB позволяет хранить векторы рядом с обычными бизнес-данными и выполнять поиск по сходству обычным SQL-запросом. Для этого не нужен отдельный векторный движок и синхронизация между двумя системами.
Типичный сценарий — RAG. Вы кладёте эмбеддинги документов в таблицу, рядом храните текст и метаданные, а поиск по сходству объединяете с фильтрами SQL. Обзор возможностей и примеры есть в документации по векторному поиску.
Архитектура
Кластер TiDB состоит из нескольких типов узлов:
- TiDB Server — слой вычислений. Принимает SQL-запросы, строит план выполнения и координирует работу распределённых транзакций. Состояния не хранит, поэтому узлы легко добавлять и убирать.
- TiKV — распределённое строковое хранилище. Хранит данные в репликах и обеспечивает сильную согласованность через Raft.
- TiFlash — колоночная реплика данных для аналитики. Работает как «ученик» в Raft-группе и получает данные из TiKV в реальном времени.
- PD (Placement Driver) — «мозг» кластера. Распределяет данные по узлам и следит за их размещением.
Подробная схема и описание опубликованы в документации по архитектуре.
Быстрый старт
Есть три способа начать работу.
Первый — локальный кластер через TiUP. Он поднимает кластер на одной машине и подходит для экспериментов:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
tiup playground
Инструкции для локального стенда — в руководстве быстрого старта.
Второй способ — Kubernetes. Используйте TiDB Operator: он работает как с собственным кластером, так и с managed-сервисами облаков.
Третий способ — TiDB Cloud. Это рекомендованный путь для быстрого старта: бесплатный тариф, кластер поднимается за пару минут без банковской карты.
Дальше стоит изучить возможности SQL в TiDB и подключить приложение через обычный MySQL-драйвер или ORM. Обзор разработки приложений собран в руководстве для разработчиков. Оттуда удобно перейти к ключевым сценариям: миграции данных, changefeed, векторному поиску и HTAP.
Открытый код и сообщество
Весь исходный код лежит на GitHub под лицензией Apache 2.0 — включая функции корпоративного уровня. Проект активно развивается: свежие версии публикуются в релизах, планы развития описаны в roadmap.
Попробовать базу без установки можно в онлайн-песочнице.
Тем, кто хочет внести вклад в проект, стоит начать с гайда для контрибьюторов и руководства по разработке TiDB. Подходящие задачи помечены ярлыками good first issue и help wanted. Полный список направлений для вклада собран в карте контрибуций, а общая информация о сообществе — в репозитории pingcap/community.
Если что-то пошло не так, помогут материалы по устранению неполадок. Задать вопрос можно через Issues и Discussions.
Когда выбирать TiDB
TiDB — хороший выбор, если данные уже не помещаются на один сервер, а останавливать сервис ради масштабирования нельзя. Её стоит рассматривать в трёх случаях:
- Нужна MySQL-совместимая база, которая растёт горизонтально и переживает отказ узлов.
- Хочется объединить транзакционную и аналитическую нагрузку в одной системе вместо связки из двух баз.
- В проекте есть AI-сценарии, и вы хотите совместить векторный поиск с обычными SQL-запросами и бизнес-данными.
Для небольших проектов одной машины вполне достаточно, и тут проще взять обычный MySQL или PostgreSQL. Но когда приложение вырастает, TiDB даёт путь масштабирования без смены стека и переписывания кода.
Источник: https://github.com/pingcap/tidb