Почему мы создали Turso, переписывание Rust of Sqlite

Scylladb спонсировал этот пост.

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

Учитывая повсеместность и репутацию SQLite в отношении надежности, вы можете задаться вопросом: почему кто -то за пределами психиатрических учреждений даже подумывает его переписать?

Это не то, что SQLite делает что -то не так. Скорее, это потому, что сегодняшние приложения нуждаются в возможностях, которые SQLite, ограниченная десятилетиями архитектурных решений, не может легко предоставить. Несмотря на то, что SQLite достиг значительного охвата, видение действительно наличия баз данных повсюду — питание агентов ИИ в режиме реального времени, потоковая аналитика на грани и интеллектуальные системы, которые мгновенно адаптируются к изменению данных — остаются недоступными с традиционными ограничениями SQLite.

SQLite: любимый, но ограниченный

SQLite использовался, чтобы попасть в сладкое место: простой, но достаточно мощный для многих вариантов использования. Но этот баланс изменился с темпами эволюции. То, что когда -то было «просто правильно», теперь слишком ограничивает для многих приложений.

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

Производительность и надежность

Подожди, что? Разве SQLite безумно быстро и надежно? Проблема в том, что существует большой разрыв между тем, что SQLite может сделать для чтения и записи.

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

Отсутствие ключевых современных особенностей

SQLite не хватает функций, которые разработчики считают само собой разумеющимся сегодня. Например:

  • Изменить захват данных (CDC), возможность регистрации изменений в базу данных
  • Шифрование
  • Векторный поиск

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

Синхронный дизайн

API SQLite синхронно. Это означает, что как только она запустит операцию, она будет выполнена до завершения, блокируя что -либо еще. Это затрудняет перенос его в такие среды, как веб -браузеры. Также трудно заменить его хранилище подкладки на хранилище объектов — что становится все более популярным в современных базах данных.

Разве с открытым исходным кодом ответ?

Это имеет тенденцию быть. Для популярных проектов с открытым исходным кодом, если вы видите место для улучшения, вы можете сделать эти улучшения. Это то, что сделало ядро ​​Linux, например, отличным.

Но SQLite отличается: проект «открытый исходный код, но не открытый вклад». Это означает, что участие в SQLite, если не откровенно невозможно, по крайней мере очень сложно.

Эта закрытая модель развития препятствует эволюции базы данных. Подвеска — это всегда вариант, но тот, который идет с проблемой. В то время как легендарная надежность SQLITE основывается на обширном наборе тестирования (по сообщениям, содержащим в пять раз больше кода, чем сам SQLite), этот набор тестов является собственностью. Это делает глубокие, основные изменения в SQLite чрезвычайно трудным.

Наш переломный момент: добавление векторного поиска

Моя команда поддерживала вилку SQLite в течение почти двух лет. Мы тщательно расширили его во многих отношениях, но добавление векторного поиска в SQLite было откровением. Мы хотели сделать синтаксис максимально простым и естественным, насколько это возможно. Это потребует изменений в генерации байт -кодов, которые мы сделали. Мы можем разоблачить векторы как тип данных, запросы реляционные и векторные данные вместе в одной таблице и (до тех пор, пока запрос не нуждается в индексе) использовать совершенно скучный синтаксис SQL. Добавление всего этого при сохранении уверенности, что ничто иное не сломалось, не было сложным, но мы сняли это

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

Выберите заголовок, год от фильмов по заказу по vector_distance_cos (Encedding, Vector (‘[4,5,6]’)) Предел 3; 1234 Выберите заголовок, год от порядок фильмов по vector_distance_cos (Encedding, Vector (‘[4,5,6]’)) Предел 3;

И мы закончили тем, что согласились:

Выберите заголовок, год от vector_top_k (‘mivs_idx’, ecector (‘[4,5,6]’), 3) Присоединяйтесь к фильмам на фильмах.rowid = id; 1234 Выберите заголовок, год от vector_top_k (‘mivs_idx’, ecect (‘[4,5,6]’), 3) Присоединяйтесь к фильмам на фильмах.rowid = id;

Индекс представлен как отдельная таблица, и мы должны явно присоединиться к нему с основной таблицей.

В этот момент мы подумали: сколько усилий потребовалось бы, чтобы переписать SQLite с нуля?

Turso: переписывание SQLite в Rust

Здесь Турссо входит на картинку. В конце 2024 года мы решили пойти на полную переписывание SQLite в Rust, сохраняя полную совместимость, обеспечивая при этом фундаментальные архитектурные инновации для современных рабочих нагрузок. Мы только что выпустили бета -версию и быстро движемся к нашему предстоящему первому стабильному релизу.

Помимо выбора языка, Turso уходит из SQLite ключевыми способами:

  • Асинхронно ввода/вывод: Архитектура Турсо следует за асинхронным вводом/выводом, а IO_URNE используется в качестве бэкэнда на Linux. Это позволяет использовать Turso изначально в сложных условиях, таких как веб -браузеры.
  • Нативное шифрование, CDC, Vector Search: Turso обладает встроенной поддержкой для зашифрованных баз данных, Vector Search и CDC.
  • Одновременно пишет: При поддержке Multivershive Complornency Control (MVCC), пишет в Turso, предназначены для прохождения параллельно.
  • Живые материализованные взгляды: Turso реализует методы обслуживания постепенного представления. Это позволяет постепенно поддерживать материализованные представления, без необходимости пересмотреть весь вид.
  • Открытый вклад: С более чем 150 участниками, у Турсо есть процветающее сообщество участников, которые раздвигают границы того, что это может быть.

Архитектурные решения … и почему ржавчина?

Конечно, многое можно сказать обо всех этих моментах. В предстоящем P99 Conf я подробно рассмотрю две темы, актуальные для этого одержимого задержкой сообщества: почему ржавчина, а не зиг и то, как мы сделали SQLite еще быстрее. Мы рассмотрим некоторые ключевые дизайнерские решения, такие как принятие асинхронной архитектуры, сделав многопользовательский гражданин первоклассного гражданина и использование инкрементализма, чтобы каждый раз избегать перекомплектования тяжелых операций.

Конференция бесплатная и виртуальная (бесплатные проходы на p99conf.io), поэтому я надеюсь, что все, что вы, энтузиасты программирования P99 с низкой задержкой, будут там вживую и вызовут дружеские дебаты в легендарном чате P99 Conf.

Scylladb разработан для обеспечения предсказуемой производительности в масштабе. Он принят организациями, которые требуют ультра-низкую задержку, даже с рабочими нагрузками, превышающими 1M OPS/SEC. Наша уникальная архитектура использует силу современной инфраструктуры — переводится на меньшее количество узлов, меньшую административную и снижающую затраты. Узнайте больше последних из Scylladb Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Glauber Costa является основателем и генеральным директором Shiselstrike, производителей Turso: SQLite-совместимой базы данных Edge, которая основана на Libsql. Он является ветераном высокопроизводительных и низких систем, с широким вкладом в ядро ​​Linux, … Подробнее от Glauber Costa

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *