Back

Знакомьтесь с Turso — эволюцией SQLite на базе Rust

Знакомьтесь с Turso — эволюцией SQLite на базе Rust

Если вы создавали приложения с SQLite, вы уже знаете его сильные стороны: нулевая конфигурация, один файл, быстрое чтение и работа везде. Но вы, вероятно, также сталкивались с его ограничениями — отсутствие конкурентной записи, синхронный API, который конфликтует с асинхронными средами выполнения, и отсутствие чистого пути к развёртыванию на edge или в распределённых системах.

Именно этот пробел призван заполнить Turso.

Ключевые выводы

  • Экосистема Turso имеет два столпа: libSQL (готовый к production форк SQLite на C) и Turso Database (переписанная с нуля на Rust версия в стадии бета, ранее известная под кодовым названием “Limbo”)
  • Переписывание на Rust обеспечивает безопасность памяти, async-first API, нативный векторный поиск и конкурентную запись на основе MVCC — возможности, которые сложно встроить в кодовую базу SQLite на C
  • libSQL и Turso Cloud позволяют использовать паттерны вроде база-данных-на-пользователя с встроенными репликами, что делает их практичным выбором для edge, serverless и мультитенантных архитектур уже сегодня
  • Переписанная на Rust версия ещё не готова к production, но она показывает долгосрочное направление развития экосистемы

Что такое Turso Database?

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

libSQL — это форк SQLite, написанный на C, готовый к production уже сегодня и являющийся основой Turso Cloud. Он добавляет репликацию, встроенные реплики и доступ по HTTP, что позволяет запускать базы данных в стиле SQLite на edge с синхронизацией с удалённым primary-сервером. Если вы используете Turso Cloud прямо сейчас, вы используете libSQL.

Turso Database (изначально под кодовым названием “Limbo”) — это полная переписка SQLite с нуля на Rust. В настоящее время находится в бета-версии. Цель — чистая реимплементация файлового формата SQLite и SQL-движка на Rust с современными возможностями, встроенными с самого начала, а не добавленными позже.

Эти два проекта разделяют название и миссию, но находятся на разных стадиях зрелости. libSQL — это то, что обеспечивает production-развёртывания сегодня. Переписанная на Rust версия — это направление, куда движется экосистема.

Зачем переписывать SQLite на Rust?

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

Переписывание на Rust решает это напрямую:

  • Безопасность памяти без сборщика мусора — borrow checker в Rust устраняет целые классы ошибок, распространённых в кодовых базах на C
  • Async-first API — в отличие от синхронного интерфейса SQLite, API Turso спроектирован для естественной работы в асинхронных средах выполнения и браузерных окружениях
  • Нативный векторный поиск — встроен для AI и ML нагрузок, не требуется внешнее расширение
  • MVCC для конкурентной записи — блокировка записи в SQLite — известное узкое место, и архитектура Turso нацелена на это с самого начала
  • Открытая модель контрибуций — проект привлёк растущее сообщество контрибьюторов

Вот как выглядит базовый запрос в Rust API:

use limbo_driver::Builder;

#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
    let db = Builder::new_local("test.db").build().await?;
    let conn = db.connect()?;
    let rows = conn.query("SELECT * FROM users", ()).await?;
    Ok(())
}

Примечание: API Turso Database (Limbo) всё ещё развивается, и точные названия крейтов и сигнатуры методов могут измениться до стабильного релиза. Всегда проверяйте официальный репозиторий для актуальных примеров использования.

Асинхронный интерфейс — это значимое изменение. Это означает, что Turso спроектирован для работы в окружениях, где блокирующий ввод-вывод недопустим, включая edge-среды выполнения и WebAssembly-таргеты.

libSQL vs SQLite: в чём разница для веб-разработчиков?

Для frontend и full-stack разработчиков наиболее практичной частью экосистемы Turso сегодня является libSQL и Turso Cloud. Один из распространённых паттернов, который он позволяет реализовать, выглядит так:

  • Каждый пользователь или тенант может иметь свою собственную базу данных в стиле SQLite
  • Эта база данных работает как встроенная реплика близко к пользователю — на edge или локально в приложении
  • Чтение быстрое и локальное, а записи синхронизируются обратно на удалённый primary-сервер

Эта модель база-данных-на-пользователя естественно подходит для serverless-окружений, мультитенантных SaaS-приложений и AI-агентов, которым нужно изолированное, лёгкое хранилище без необходимости поднимать полноценный Postgres-инстанс на каждую сессию.

Реальное внедрение уже происходит. Spice.ai использует Turso как акселератор наряду с DuckDB и сообщает об улучшении производительности по сравнению с их реализацией на SQLite для определённых паттернов запросов.

Где Turso подходит сегодня

СценарийРекомендуемый подход
Edge или serverless приложение, требующее SQLitelibSQL + Turso Cloud (готово к production)
Local-first приложение с удалённой синхронизациейВстроенные реплики libSQL
Оценка переписанной на Rust версииTurso Database бета (не готово к production)
AI-агент с изолированным хранилищемПаттерн база-данных-на-агента с libSQL

Переписанная на Rust версия всё ещё развивается и пока не является drop-in заменой SQLite для production.

Заключение

Turso представляет собой подлинную эволюцию экосистемы SQLite, а не просто форк. libSQL решает проблему распределённого SQLite уже сегодня. Переписанная на Rust версия строит фундамент для того, что будет дальше: полностью открытая, async-нативная, готовая к edge база данных, которая переносит простоту SQLite в современную инфраструктуру.

Если вы уже используете SQLite и задаётесь вопросом, куда он движется дальше, Turso — один из наиболее конкретных доступных ответов. Начните с libSQL и Turso Cloud для production-нагрузок и следите за переписанной на Rust версией по мере её созревания к стабильности.

Часто задаваемые вопросы

Не переписанную на Rust версию. Она всё ещё находится в бета-версии и пока не позиционируется как готовая к production замена SQLite. Однако libSQL готов к production и в значительной степени совместим с SQLite. Для большинства приложений libSQL с Turso Cloud — это рекомендуемая отправная точка на сегодня.

libSQL — это форк SQLite на базе C, который добавляет репликацию, встроенные реплики и HTTP-доступ. Он обеспечивает работу Turso Cloud сегодня. Turso Database, ранее известная под кодовым названием Limbo, — это отдельная переписанная с нуля версия SQLite на Rust. В настоящее время находится в бета-версии и нацелена на async-нативную, безопасную по памяти работу как долгосрочная замена.

SQLite использует блокировку одного писателя, что ограничивает конкурентность записи. Переписанная на Rust версия нацелена на поддержку конкурентной записи на основе MVCC, но функция всё ещё в разработке. libSQL наследует модель записи SQLite, поэтому поддержка конкурентной записи пока недоступна в production-развёртываниях Turso.

Да. Переписанная на Rust версия спроектирована для окружений вроде WebAssembly и edge-сред выполнения, где блокирующий ввод-вывод не разрешён. libSQL также поддерживает edge-развёртывания через модель встроенных реплик Turso Cloud, которая сохраняет чтение локальным и синхронизирует записи на удалённый primary-сервер.

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay