Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
turbolite — SQLite VFS с холодными JOIN-запросами из S3 менее чем за 100 мс + сжатие и шифрование на уровне страниц | Kitploit
Инструменты/GitHubGitHub/russellromney/turbolite
Инструменты шифрования/дешифрованияКриптографияБезопасность облачных средУтилиты и фреймворкиБезопасность Баз Данных
GitHubrussellromney/turbolite

turbolite

SQLite VFS с холодными JOIN-запросами из S3 менее чем за 100 мс + сжатие и шифрование на уровне страниц

Репозиторий
48012113 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

turbolite

turbolite — это SQLite VFS на Rust, который выполняет точечные запросы и объединения напрямую из S3 с холодной задержкой менее 250 мс.

Этот репозиторий представляет собой рабочую область Cargo с двумя крейтами:

  • turbolite — чисто Rust библиотека. SQLite VFS с сжатием на уровне страниц, шифрованием и распределением по уровням S3.
  • turbolite-ffi — C FFI / загружаемое расширение + привязки к языкам (Python, Node.js, Go).

Он также предлагает сжатие на уровне страниц (zstd) и шифрование (AES-256) для эффективности и безопасности в состоянии покоя, которые можно использовать отдельно от S3.

Экспериментально. turbolite находится в активной разработке и содержит ошибки. Будьте осторожны.

Объектное хранилище становится быстрым. S3 Express One Zone обеспечивает однозначные миллисекундные GET-запросы, а Tigris также чрезвычайно быстр. Разрыв между локальным диском и облачным хранилищем сокращается, и turbolite использует это.

Дизайн и название вдохновлены подходом turbopuffer к бескомпромиссной архитектуре с учётом ограничений облачного хранения. Первоначальной целью проекта было превзойти холодные старты Neon в 500 мс+. Цель достигнута.

Если у вас одна база данных на сервер, используйте том. turbolite исследует, как иметь сотни или тысячи баз данных (одна на арендатора, одна на рабочую область, одна на устройство), не использовать том для каждой из них и мириться с единственным источником записи.

turbolite поставляется как библиотека Rust, загружаемое расширение SQLite (.so/.dylib) и языковые пакеты для Python и Node.js, а также зависимости для Go через Github. Подходит любое S3-совместимое хранилище (AWS S3, Tigris, R2, MinIO и т. д.). Это стандартный VFS SQLite, работающий на уровне страниц, поэтому должно работать большинство функций SQLite: FTS, R-деревья, JSON, режим WAL и т. д.

turbolite является частью более широкой экосистемы hadb. Отдельный turbolite — это VFS для хранения с одним безопасным писателем; если вам нужна HA-выборка лидера с непрерывной репликацией WAL, используйте его через haqlite-turbolite, который поверх добавляет HaQLite и walrust. Этот HA-путь всё ещё очень экспериментален.

Если вы хотите внести вклад в turbolite или найти ошибки, создайте pull request или откройте issue.

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

ЗапросТипХолодный (S3 Express)Холодный (Tigris)
Post + userpoint lookup + join86ms172ms
Profilemulti-table join (5 JOINs)251ms479ms
Who-likedindex search + join206ms302ms
Mutual friendsmulti-search join19ms49ms
Indexed filtercovered index scan79ms88ms
Full scan + filterfull table scan476ms532ms

1M постов / 100K пользователей (~1.5 ГБ хранится) без кэширования, каждый байт с S3. EC2 c5.2xlarge + S3 Express One Zone (та же зона доступности, ~4 мс задержки GET). Fly performance-8x + Tigris (~25 мс задержки GET). Оба: 8 выделенных vCPU, 16 ГБ RAM, 7 рабочих потоков предвыборки. См. Бенчмаркинг и Важность бэкенда хранения.

Бенчмарки организованы по уровню кэша (что уже есть на локальном диске при выполнении запроса):

Уровень кэшаЧто кэшированоЧто загружается с S3Когда это происходит
noneничеговсёСвежий старт, пустой кэш
interiorвнутренние страницы B-деревастраницы индекса + данныхПервый запрос после открытия соединения
indexвнутренние + страницы индексатолько страницы данныхНормальная работа turbolite
dataвсёничегоЭквивалент локального SQLite

interior — самый реалистичный холодный бенчмарк: внутренние страницы загружаются сразу при открытии соединения, поэтому к моменту выполнения первого запроса они уже кэшированы. Страницы индекса агрессивно предварительно загружаются в фоне при первом обращении и могут быть ещё не готовы.

Тёплый кэш (накладные расходы VFS по сравнению с обычным SQLite)

100K строк, Fly.io performance-2x (выделенный vCPU, NVMe, IAD):

ОперацияSQLiteturboliteНакладные расходы
Point lookup145K/s73K/s2.0x
Range scan8.8K/s8.3K/sпаритет
Full table scan56/s60/sпаритет
INSERT19K/s23K/sпаритет
UPDATE by PK40K/s27K/s1.5x
Batch INSERT (в транзакции)685K/s740K/sпаритет

Точечные запросы имеют наибольшие накладные расходы на страницу (~2x). Всё остальное приближается к паритету или превосходит его. Архитектура кэша без блокировок означает, что параллельные чтения никогда не блокируют запись.

Стоимость контрольной точки

ПослеЛокальноS3 (RustFS в том же регионе)
1K вставок19ms38ms
Пакет 10K17ms114ms
1K обновлений9ms36ms

Запись всегда на локальной скорости. Затраты на S3 возникают только при контрольной точке. Цифры с RustFS в том же регионе Fly (~2 мс RTT). S3 Express One Zone была бы сопоставима.

Быстрый старт

Python```bash

pip install turbolite

# Chunk 3

(No content provided in this chunk.)```python
import turbolite

conn = turbolite.connect("my.db", mode="s3",
    bucket="my-bucket",
    endpoint="https://t3.storage.dev")

conn.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")
conn.execute("INSERT INTO users VALUES (1, 'alice', '[email protected]')")
conn.commit()

alice = conn.cursor().execute("SELECT * FROM users").fetchone()
print(alice[1])
>>> "alice"

Смотрите Установка для Node, Go, Rust, локального режима и использования загружаемого расширения .so напрямую

Design

turbolite спроектирован с учётом ограничений S3, а не файловой системы. Каждое решение исходит из этой модели:

Ограничение S3Последствие
Повторные запросы медленныеСводите количество запросов к минимуму. Группируйте записи, агрессивно предварительно считывайте.
Пропускная способность — узкое местоМаксимально используйте пропускную способность.
PUT и GET тарифицируются за операциюGET на 64 КБ стоит столько же, сколько GET на 16 МБ. Оптимизируйте количество запросов, а не эффективность по байтам.
Объекты неизменяемыНикогда не обновляйте на месте. Записывайте новые версии, меняйте указатель. Нет повреждения данных при частичной записи.
Хранилище дёшевоНе оптимизируйте под объём. Выделяйте с запасом, сохраняйте старые версии, пусть сборщик мусора уберёт их позже.

Architecture

turbolite добавляет слои интроспекции и косвенности между SQLite и S3, которые эффективно группируют, сжимают, отслеживают и извлекают страницы.

SQLite использует B-дерево и запрашивает по одной странице за раз. Он знает, что страница N находится по смещению N * page_size. И эти страницы распределены случайным образом по карте страниц для эффективного произвольного доступа. Но в S3 получение одной страницы за запрос означало бы тысячи потенциально случайных GET-запросов на каждый запрос.

Но страницы не одинаковы. SQLite имеет разные типы страниц. turbolite разделяет группы страниц по типу: внутренние страницы B-дерева, листовые страницы индекса и листовые страницы данных.

Скачать инструмент