SQLite concurrency and why you should care about it 🔥 Горячее 💬 Длинная дискуссия
—
Комментарии (153)
- SQLite не поддерживает параллельную запись; WAL-режим лишь разрешает параллельное чтение, но не пишущие транзакции.
- Проблема SQLITE_BUSY чаще всего возникает из-за длительных транзакций, которые не закрывают файл, и не из-за реальной конкуренции за доступ.
- Не стоит забывать, что SQLite — это встроенная СУБД, а не серверная СУБД, и что она не предназначена для высоконагруженных веб-приложений.
- В отличие от PostgreSQL, MySQL и других серверных СУБД, SQLite не поддерживает параллельную запись, и поэтому не может быть использована в ситуациях, где требуется высокая параллельность.
Parrot – type-safe SQL in Gleam, supports SQlite, PostgreSQL and MySQL
Parrot — это библиотека для языка Gleam, предоставляющая типобезопасный способ написания SQL-запросов. Она позволяет компилировать запросы на этапе разработки, выявляя ошибки в синтаксисе или типах данных до выполнения кода, что повышает надёжность приложений.
Библиография использует встроенные возможности Gleam для генерации корректного SQL, избегая распространённых проблем вроде опечаток в именах колонок или несоответствия типов. Это особенно полезно в проектах, где важна строгая статическая проверка и минимальное количество runtime-ошибок.
Комментарии (27)
- Участники положительно оценивают sqlc и его порт для Gleam, отмечая преимущества использования чистого SQL с типобезопасностью.
- Обсуждаются ограничения SQL и ORM, в частности проблема композиции и динамических запросов, а также сравнение с другими инструментами (Kysely, PRQL, Django ORM).
- Несколько пользователей спрашивают, что такое Gleam, и получают разъяснения, что это типобезопасный язык для Erlang VM.
- Поднимается вопрос о кроссплатформенности запросов и поддержке разных СУБД, на который автор отвечает, что это зависит от возможностей sqlc.
- Сравниваются системы типов Gleam (статическая) и Elixir (gradual), отмечаются их ключевые различия и предпочтения.
Litestream v0.5.0 🔥 Горячее 💬 Длинная дискуссия
Выпуск Litestream v0.5.0 знаменует переход от простого резервного копирования к эффективному восстановлению на определённый момент времени (PITR). Ключевое нововведение — формат LTX, позаимствованный из проекта LiteFS. Вместо потоковой передачи отдельных страниц базы данных Litestream теперь группирует изменения в рамках транзакций, что значительно ускоряет восстановление после сбоя.
Формат LTX решает проблему "горячих страниц" — например, при частых вставках в таблицу с автоинкрементным ключом, когда изменения концентрируются на ограниченном числе страниц. Раньше Litestream обрабатывал каждую страницу отдельно, что замедляло процесс. Теперь транзакции записываются целиком, сокращая количество операций ввода-вывода и ускоряя восстановление. Это делает SQLite ещё более надёжным решением для полноценных приложений.
Комментарии (174)
- Пользователи обсуждают сложности развертывания SQLite-приложений на Fly.io, включая проблемы с инициализацией и миграцией баз данных.
- Litestream получает положительные отзывы за простоту использования, низкую стоимость репликации в S3 и надежность как инструмента для резервного копирования и репликации.
- Обсуждаются технические детали Litestream: поддержка S3-совместимых хранилищ, условные записи для реализации временных lease и планы по реализации read-replicas через VFS.
- Участники сравнивают Litestream с другими решениями (LiteFS, rsync, управляемые БД), отмечая его операционную простоту и отсутствие необходимости в отдельном сервере.
- Поднимаются вопросы о практическом применении SQLite и Litestream: восстановление после сбоев, работа с нестабильным интернетом, целесообразность использования против PostgreSQL/MySQL для разных сценариев.
Show HN: ChartDB Agent – Cursor for DB schema design
ChartDB — это инструмент для визуализации схем баз данных, который помогает разработчикам и аналитикам лучше понимать структуру данных. Он автоматически генерирует интерактивные диаграммы на основе существующих баз данных, поддерживая популярные СУБД, такие как PostgreSQL, MySQL и MongoDB. Это упрощает проектирование, документирование и совместную работу над сложными системами.
Среди ключевых возможностей — автоматическое обновление схем при изменениях в БД, экспорт в форматы PNG или SVG, а также интеграция с инструментами вроде Git для версионного контроля. Практический плюс: визуализация помогает быстро находить связи между таблицами, что ускоряет отладку и оптимизацию запросов.
Комментарии (34)
- Представлен инструмент ChartDB с открытым исходным кодом для проектирования схем баз данных через текстовые промпты с визуализацией в виде ERD-диаграмм.
- Пользователи отмечают удобный интерфейс и потенциальную пользу для быстрого прототипирования, но критикуют читаемость соединений и отсутствие обсуждения для уточнения требований.
- Высказаны опасения по поводу стоимости бесплатного использования ИИ, точности генерируемых схем (в т.ч. устаревшая информация о СУБД) и способности инструмента масштабировать решения.
- Отмечено, что многие ИИ-инструменты и так умеют работать с БД, генерировать SQL и диаграммы, поэтому ценность ChartDB видится в автоматизации и удобстве.
- Запросы на дополнительные функции: предпросмотр миграций, генерация SQL-запросов под use case, интеграция веб-интерфейса и расширение на проектирование классов.
Atuin Desktop: Runbooks That Run – Now Open Source
Atuin Desktop — это инструмент, который объединяет документацию и исполняемые команды в едином пространстве, похожем на документ, но работающем как терминал. Он позволяет создавать и запускать сценарии, запросы к базам данных, HTTP-запросы и даже встраивать графики Prometheus, делая рабочие процессы повторяемыми, совместными и надёжными. Это решает проблему устаревшей документации и разрозненных знаний, которые часто хранятся лишь в памяти или истории команд.
Инструмент теперь полностью открыт под лицензией Apache 2.0 и включает интеграции с Kubernetes, MySQL, Git-совместимые рабочие пространства и возможности совместной работы в реальном времени. Планы развития включают удалённое выполнение, аудит, расширенные блоки и улучшенную интеграцию с облачными провайдерами.
Комментарии (67)
- Пользователи отмечают полезность инструмента для документирования и выполнения команд, особенно для редких или сложных задач администрирования.
- Обсуждаются аналогичные подходы и инструменты: bash-скрипты, Jupyter Notebooks, org-mode в Emacs, runme.dev, speedrun.cc и Warp Notebooks.
- Поднимаются вопросы о безопасности, включая риски выполнения деструктивных команд из истории и необходимость подтверждения.
- Обсуждаются технические аспекты: поддержка shellcheck, формат файлов (YAML), работа с Git, удаленное и параллельное выполнение.
- Авторы отвечают на вопросы, подчеркивая гибкость подхода, планы по развитию и открытость к обратной связи.
Rails on SQLite: new ways to cause outages
Rails + SQLite: новые способы уронить прод
SQLite встроен в процесс веб-сервера — нет отдельного демона, портов, сокетов; всё хранится в одном файле. Плюс: пропали ошибки подключения к БД. Минус: файл живёт в контейнере, а контейнеры пересоздают, и данные исчезают.
Правило 1: клади БД в персистентное хранилище (EBS, Fly Volumes, …) и включи снапшоты.
Правило 2: веб, кеш, очередь и джобы по умолчанию пишут в тот же файл. Удобно, но воркеры теперь должны видеть этот файл. Запускай воркеры в том же VM, либо разнеси данные по разным БД и настрой database.yml.
Правило 3: SQLite блокирует всю БД на время записи. Параллельные длинные запросы = таймауты. Держи транзакции короткими, используй PRAGMA journal_mode=WAL, synchronous=NORMAL, busy_timeout=5000.
Правило 4: бекапы. sqlite3 db.sqlite3 ".backup backup.sqlite3" — атомарно, без остановки сервиса. Крути каждый час и перед деплоем.
Плюсы:
- FTS5-индекс из коробки
- Мегабайты вместо гигабайтов RAM
- $14/мес на Fly.io при 1 млн запросов
- Нет Redis, Postgres, S3 — только Rails-контейнер
Итог: SQLite позволяет поднять pet-project за вечер, но требует новых привычек: персистентные диски, WAL, короткие транзакции, общий доступ к файлу. Соблюдай правила — и база не уйдёт в /dev/null.
Комментарии (55)
- Автор статьи утверждает, что его сервис «Feed Your Email» возможен только благодаря SQLite, но не объясняет, почему именно SQLite, а не PostgreSQL/MySQL.
- Многие участники считают SQLite удобным для малонагруженных и внутренних приложений из-за простоты развёртывания и отсутствия отдельного процесса БД.
- Критики отмечают: при росте нагрузки появляются проблемы с бэкапами, масштабированием, единственным писателем и отказоустойчивостью, смывая преимущества.
- Часть разработчиков использует обёртки вроде Litestream, Turso или Cloudflare D1, чтобы добавить репликацию и горизонтальное масштабирование к SQLite.
- В сообществе Rails новый тренд — «по-умолчанию SQLite» для быстрого старта MVP, но опытные пользователи предупреждают о риске «выстрелить себе в ногу» при росте проекта.
Oldest recorded transaction
- Шутка: глиняная табличка 3100 г до н. э. — «база данных» с 5000-летним аптаймом.
- Проверил, какие даты принимают MySQL, Postgres, SQLite:
– MySQL: мин. 1000 г н. э.
– Postgres/SQLite: 4713 г до н. э. (юлианский календарь). - Пример:
INSERT … '4713-01-01 BC'::dateработает, 4714 г до н. э. — уже ошибка. - Вопрос: как хранить ещё более древние даты (например, экспонаты Британского музея)? Текстом, эпохой, кастомным типом?
Комментарии (84)
- Самая ранняя письменность — это не литература, а счёты и квитанции: глиняные таблички фиксируют выдачу зерна и другие транзакции ~3300 г. до н. э.
- Для музейных дат «около X» нет единого числового стандарта; хранят как текст либо диапазон «start/end», а сортировку и поиск делает прикладной код.
- PostgreSQL ограничен 4713 до н. э. технически (4-байтный Julian day), но SQLite и кастомные схемы позволяют любые тексты или большие целые.
- Подавляющее большинство записей погибло: дошедшие таблички — пример survivor bias; цифровые носители вряд ли протянут 5000 лет.
- Пиво/ферментация упоминаются как возможный первичный двигатель оседлости и учёта задолго до клинописи.
Data engineering and software engineering are converging
Кратко:
Инженеры, создающие realtime-аналитику или AI-функции, нуждаются в инфраструктуре данных с современным developer experience (DX). MooseStack от 514 — open-source DX-слой для ClickHouse.
Слияние дисциплин
Классические хранилища и озёра строились для аналитиков: SQL, BI-дашборды. Теперь же realtime-данные встроены в продукты и AI-функции, а команды разработки обязаны поставлять их так же быстро, как и обычный код.
- Транзакционные БД (Postgres, MySQL) хороши для разработки, но проваливаются при аналитических нагрузках.
- Облачные аналитические платформы (Snowflake, BigQuery) удобны для пакетных ETL, но не обеспечивают свежесть данных и sub-second ответов, а DX в них устарел.
UX-разрыв
Пользователи хотят аналитику за миллисекунды. ClickHouse решает задачу: на порядки быстрее Postgres и дешевле Snowflake/Databricks.
DX-разрыв
Разработчики привыкли к локальному циклу «код → тест → CI/CD». В мире данных такого нет: нет локального окружения, медленные итерации, конфликты между data- и software-инженерами.
MooseStack
514 выпустили MooseStack — open-source DX-слой поверх ClickHouse:
- Git-native, local-first, everything-as-code.
- Единый язык схем и запросов для всех специалистов.
- Поддержка CI/CD, preview-окружений, автотестов.
Комментарии (50)
- Сторонники «чистого» инженерного подхода считают, что data engineering изначально был частью software engineering, но позже к нему примешались аналитики, знающие лишь SQL/DBT.
- В сообществе виден раскол: одни DE пишут Terraform, CI/CD, Spark и k8s, другие ограничиваются ноутбуками, SQL-запросами и no-code-инструментами.
- Критика Python и SQL как «недостаточно инженерных» языков: динамическая типизация, отсутствие строгих схем и нормального тестирования.
- Название роли «Data Engineer» стало размытым: HR ищут «писателей SQL», а специалисты просят называть их «Software Engineer, Big Data» или «Platform Engineer».
- Сильные практики уже давно используют IaC, версионирование, code review и полноценный SDLC, но таких меньшинство.
GNU Artanis – A fast web application framework for Scheme
GNU Artanis — первый production-ready веб-фреймворк на Scheme. Лёгкий, быстрый, с поддержкой JSON/XML/SXML, WebSocket, i18n, MySQL/SQLite/PostgreSQL, кэширования, шаблонов и статики.
(use-modules (artanis artanis))
(init-server)
(get "/hello" (λ () "hello world"))
(run #:port 8080)
Скачать
Документация
Официальное руководство
Исходники
- Savannah: https://savannah.gnu.org/projects/artanis
- GitLab: https://gitlab.com/hardenedlinux/artanis
История
2013 — рождение на hack-potluck Guile; 2014 — награда «Lisp In Summer Projects»; 2015 — первая стабильная версия и вступление в GNU; 2021 — переход под крыло HardenedLinux.
Контакты
Почта: artanis@gnu.org
GitLab: https://gitlab.com/hardenedlinux/artanis
Комментарии (65)
- Участники обсуждают фреймворк Artanis для Guile Scheme: кто-то хвалит простоту синтаксиса и встроенный веб-сервер, кто-то жалуется на отсутствие CSRF, 404-ссылок и слабое tooling.
- Почему Guile не стал популярен? Недостаток LSP, отладки, туториалов и узкая аудитория.
- Название «Artanis» — отсылка к Sinatra (Ruby) и палиндрому «Sinatra» задом-наперёд.
- Сайт без JS и шрифтов выглядит чисто, но кто-то считает текст слишком крупным и структуру странной.
- По безопасности: при грамотных разработчиках Scheme-системы могут быть безопаснее «обычных».
Show HN: ChartDB Cloud – Visualize and Share Database Diagrams
ChartDB — инструмент для интерактивной визуализации схем БД.
Поддерживает PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, CockroachDB, MongoDB.
Ключевые возможности
- Импорт схемы одним кликом из любой поддерживаемой СУБД.
- Авто-раскладка таблиц и связей; ручное перемещение.
- Экспорт в форматы PNG, SVG, PDF.
- Режим «одной страницы» для быстрого просмотра.
- Поиск и фильтрация по названию таблицы или столбца.
- Тёмная и светлая темы.
Быстрый старт
- Открыть chartdb.io.
- Нажать «Import from DB», вставить строку подключения или SQL-дамп.
- Получить готовую схему за секунды.
Комментарии (12)
- Некоторые команды продолжают рисовать ERD и документировать именно схему БД, особенно при проектировании новых фич и онбординге.
- Другие полагаются на абстракции вроде ORM/DDD и считают диаграммы избыточными, особенно для типовых SaaS с generic auth и payment.
- Инструменты вроде dbdiagram.io, Lucidchart и ChartDB спросом пользуются, но часто ломаются при >15 таблиц или требуют изучения нового UI.
- Сторонники диаграмм аргументируют: «базы живут дольше абстракций», а отсутствие документации — потеря для индустрии.
450× Faster Joins with Index Condition Pushdown
Проблема
При промахе кэша Readyset выполняет запрос с нуля. Для «расколотых» соединений (предикаты есть и в WHERE, и в ON) старый hash-join читал обе таблицы полностью:
- фильтр по
emailвозвращал 1 строкуusers; - фильтр по
status='SHIPPED'— 99 % таблицыorders.
Материализовав миллионы лишних строк, система строила хэш-таблицу и лишь потом отбрасывала ненужное. Профилирование показало: 30 % времени уходило на распаковку RocksDB, затем на 10 K IOPS и 81 % загрузки NVMe.
Решение: Index Condition Pushdown
Новый план использует индексы и «проталкивает» условия вниз:
- Сначала выбираем 1 строку
usersпо индексуemail. - Для каждой найденной
u.idделаем индексный lookup вordersс условиемuser_id = u.id AND status='SHIPPED'.
Так читаются только нужные строкиorders, объём I/O падает на порядки, а хэш-таблица больше не строится.
Результат
ICP устраняет лишнее чтение и распаковку, превращая холодный straddled-join из многомиллисекундной операции в субмиллисекундную.
Комментарии (49)
- Пользователи жалуются, что планировщик запросов не продавливает фильтры к индексам, и считают это багом производительности.
- Многие разработчики вынуждены сами заниматься индексами, партиционированием и анализом EXPLAIN, потому что DBA лишь «держат свет».
- В RonDB и ReadySet показали примеры «pushdown-joins» и Index Condition Pushdown, дав ускорение до 450×.
- ReadySet описывают как «кеш-прокси» поверх MySQL/Postgres, который по логу репликации инкрементально обновляет материализованные представления.
- Часть участников считает, что современные оптимизаторы должны делать такие оптимизации автоматически, и не понимает, зачем изобретать велосипед.