Скиллы Новичок Исследования и аналитика

SQLite

Скачать ZIP
15
Предупреждение о рисках!

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

Используйте SQLite правильно — с учетом особенностей конкурентного доступа, настроек PRAGMA и корректной работы с типами данных.

Конкурентность (главный подводный камень)

  • Одновременно может быть только один писатель — параллельные записи либо выстраиваются в очередь, либо завершаются ошибкой. SQLite не подходит для сценариев с высокой нагрузкой на запись.
  • Включайте режим WAL: PRAGMA journal_mode=WAL — это позволяет читать данные во время записи и существенно повышает производительность.
  • Задавайте таймаут ожидания: PRAGMA busy_timeout=5000 — база будет ждать до 5 секунд перед ошибкой SQLITE_BUSY, вместо мгновенного отказа.
  • Режим WAL использует файлы -wal и -shm — не забывайте копировать их вместе с основной базой данных.
  • Используйте BEGIN IMMEDIATE, чтобы заранее захватить блокировку записи — это предотвращает дедлоки в сценариях «сначала читаем, потом пишем».

Внешние ключи (по умолчанию отключены!)

  • Необходимо явно включать: PRAGMA foreign_keys=ON — и делать это для каждого соединения (настройка не сохраняется в самой базе).
  • Если не включить, ограничения внешних ключей будут тихо игнорироваться — целостность данных окажется нарушенной.
  • Перед использованием проверяйте состояние: PRAGMA foreign_keys вернет 0 или 1.
  • ON DELETE CASCADE работает только при включенных внешних ключах.

Типы данных и приведение

  • SQLite использует динамическую типизацию — тип столбца задает лишь предпочтение, а не жесткое ограничение.
  • Возможны неожиданные преобразования типов — особенно при сравнении строк и чисел.
  • Для предсказуемого поведения явно приводите типы с помощью CAST.
  • Храните даты либо как ISO-строки, либо как Unix-время — избегайте смешанных форматов.

Индексы и производительность

  • Индексы критичны для производительности — без них даже простые запросы становятся медленными.
  • Создавайте индексы под реальные запросы, а не «на всякий случай».
  • Проверяйте план выполнения через EXPLAIN QUERY PLAN.
  • Избегайте лишних индексов — они замедляют операции записи.

Транзакции

  • Всегда оборачивайте несколько операций записи в транзакцию — это ускоряет выполнение в разы.
  • По умолчанию каждая команда — отдельная транзакция, что сильно снижает производительность.
  • Используйте BEGIN / COMMIT для контроля.
  • При необходимости используйте ROLLBACK для отката изменений.

Практические рекомендации

  • SQLite отлично подходит для локальных приложений, CLI-инструментов и небольших сервисов.
  • Не используйте его как замену полноценной СУБД при высокой нагрузке или сложной многопользовательской записи.
  • Следите за настройками PRAGMA — они напрямую влияют на поведение и надежность.
  • Всегда тестируйте сценарии с реальной нагрузкой, а не только на «пустой» базе.

Файл из источника

11770_sqlite-1.0.0.zip