Перейти к основному содержанию

Сборник невероятных и занимательных фактов о SQLite

SQL

Автор: Avinash Sajjanshetty

1

SQLite — это самая разворачиваемая и часто используемая база данных. В активном использовании находится более одного триллиона (1 000 000 000 000 или миллион миллионов) баз данных SQLite.

Её поддерживают три человека. Они не принимают сторонних контрибьюторов.

2

Вероятно, SQLite используется чаще, чем все остальные системы управления базами данных вместе взятые. Миллиарды и миллиарды копий SQLite существуют "в дикой природе". Она повсюду.

sqlite

3

Также она, возможно, входит в топ-5 самых разворачиваемых программных модулей.

sqlite

4

Компания Hwaci стоит за SQLite. Они также увлекаются музыкой (?)

sqlite

5

SQLite зародилась на американском военном корабле. Д. Ричард Хипп (DRH) разрабатывал программное обеспечение для USS Oscar Austin, эсминца ВМС США. Существующее ПО просто переставало работать, когда сервер выходил из строя (это было в 2000-х годах). Для военного корабля это было неприемлемо.

Поэтому DRH задался вопросом: что, если база данных будет просто работать без какого-либо сервера? Словами DRH:

Зачем нам вообще нужен сервер? Почему я не могу читать данные прямо с диска? Таким образом, если компьютер достаточно исправен, чтобы вообще запускать наше приложение, у нас не будет зависимостей, которые могут выйти из строя и привести к нашему отказу. Я поискал и не нашел движков SQL-баз данных, которые бы так работали, и один из парней, с которыми я работал, сказал: "Ричард, почему бы тебе просто не написать такой?" "Ладно, я попробую". Я не сделал это сразу, но позже наступил перерыв в финансировании. Это было в 2000 году, и, если я правильно помню, Ньют Гингрич и Билл Клинтон как-то поссорились, так что все государственные контракты были заморожены, и я на несколько месяцев остался без работы. Я подумал: "Что ж, сейчас я и займусь написанием этого движка базы данных".

6

В отличие от большинства проектов с открытым исходным кодом, которые используют стандартные лицензии (как MIT или GPL), SQLite не поставляется с лицензией, одобренной Open Source Initiative (OSI).

sqlite

Вместо этого SQLite выпущена в общественное достояние (public domain), и у неё даже меньше ограничений.

Также обратите внимание, что это может быть проблемой в некоторых странах/юрисдикциях, где общественное достояние не признается. Поэтому SQLite продает лицензии, называемые «Гарантия правового титула» (Warranty of Title).

7

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

sqlite

8

Open Source, но не Open Contribution.

sqlite

Возможность внести contribution (вклад в код) в SQLite только по приглашению (у меня нет источника). Только после того, как вас пригласили и вы подписали письменное поручительство (affidavit) о том, что передаёте свой вклад в общественное достояние, вы можете отправлять патчи.

9

Что под капотом?

На каждую строку кода в SQLite приходится более 600 строк тестового кода. Тесты покрывают 100% ветвей (и 100% MC/DC) в библиотеке. Набор тестов чрезвычайно разнообразен и включает фаззинг-тесты (fuzz tests), тесты граничных значений, регрессионные тесты, а также тесты, которые имитируют сбои операционной системы, потерю питания, ошибки ввода-вывода и ошибки нехватки памяти.

SQLite изначально начиналась как расширение для Tcl, и её основной набор тестов написан на Tcl.

10

Что интересно, некоторые тесты SQLite являются проприетарными. Набор тестов под названием TH3 (Test Harness 3), который достигает 100% покрытия ветвей кода, является проприетарным и недоступен для свободного доступа.

Я не знаю ни одного другого проекта, который сделал бы код бесплатным, а наборы тестов — платными.

Однако им не удалось продать ни одной копии TH3. DRH сказал в подкасте:

Тесты на 100% MCD — это называется TH3. Они проприетарные. У меня была идея, что мы будем продавать эти тесты производителям авионики и зарабатывать таким образом деньги. Мы продали ровно ноль копий, так что это не сработало.

Чтобы получить доступ, нужно быть частью Консорциума SQLite, что стоит 120 000 долларов в год.

11

Это интересная бизнес-модель. Они получают доход за счет лицензий, платной поддержки, услуг по сопровождению, членства в консорциуме и коммерческих расширений.

12

В SQLite нет Кодекса поведения (CoC), зато есть Кодекс этики (Code of Ethics), основанный на "инструментах добрых дел" из главы 4 Устава Святого Бенедикта.

sqlite

13

В SQLite: Вместо юридического уведомления — благословение:

sqlite

Все файлы с исходным кодом поставляются с благословением.

14

SQLite настолько быстра, что конкурирует с fopen. Для некоторых сценариев использования вы можете использовать SQLite вместо файловой системы, и это может быть на 35% быстрее.

sqlite

15

SQLite vs Redis (угадайте, кто быстрее?)

sqlite

Для некоторых сценариев использования SQLite может быть быстрее Redis из-за накладных расходов на сетевой стек и (де)сериализацию.

16

Но, в отличие от большинства баз данных, SQLite изначально имела модель с единственным писателем. Вы не могли иметь более одного конкурентного писателя.

Это также было изменено в 2010 году, путем добавления режима WAL (Write-Ahead Log). До этого у вас могли быть либо читатели, либо писатель, но никогда вместе.

17

Есть и другие вещи, очень распространенные в других базах данных, но не в SQLite:

  • По умолчанию используется режим журнала отката (rollback journal), который ограничивает вас либо множеством читателей, либо одним писателем.
  • Внешние ключи (Foreign Keys) отключены; они подключаются опционально.
  • Она "слабо типизирована". SQLite называет это "родством типов" (type affinity). Это означает, что вы можете вставить что угодно в столбец, даже если вы определили для него тип. Столбцы со строгой типизацией подключаются опционально (через STRICT tables).
  • Многие команды ALTER, которые вы ожидаете увидеть в других базах данных, здесь не работают. Например, вы не можете добавить ограничение (constraint) к существующему столбцу. (Недавно они добавили возможность переименовывать имя столбца).

Весь список особенностей можно найти здесь.

18

Мне не нравится, что она не соблюдает типы. На авось (YOLO — живём один раз):

CREATE TABLE user(id INTEGER);
INSERT into user VALUES ("YOLO!"); --- И это работает!

Мало того, она не выбрасывает никакой ошибки, если вы даете какой-то случайный тип.

CREATE TABLE t(value TIMMYSTAMP);

Типа TIMMYSTAMP не существует, но SQLite спокойно это принимает.

В SQLite есть пять типов: NULL, INTEGER, REAL, TEXT, BLOB. Хотите узнать что-то ужасное? Родство типов работает по совпадению подстрок!

CREATE TABLE t(value SPONGEBLOB) --- Это тип BLOB!

Так что да, бывает и такое:

Обратите внимание, что объявленный тип "FLOATING POINT" даст родство INTEGER, а не REAL, из-за "INT" в конце "POINT".

19

Это одна из моих любимых историй. SQLite пришлось сменить префикс по умолчанию с sqlite_ на etilqs_, когда пользователи начали звонить разработчикам посреди ночи.

sqlite

20

SQLite очень серьезно относится к обратной совместимости.

Все выпуски SQLite версии 3 могут читать и записывать файлы баз данных, созданные самой первой версией SQLite 3 (версия 3.0.0) от 18 июня 2004 года. Это "обратная совместимость". Разработчики обещают сохранять обратную совместимость формата файла базы данных для всех будущих выпусков SQLite 3.

21

Но они настолько серьезно относятся к обратной совместимости, что даже если они выпустили версию с ошибкой, они не будут её исправлять.

sqlite

22

Автор SQLite Д. Ричард Хипп (DRH) не нашел существующие системы контроля версий подходящими. Поэтому он написал свою собственную под названием Fossil. Fossil, конечно же, работает на SQLite.

Это напоминает мне то, как Линус написал Git.

DRH также написал свой собственный генератор парсеров под названием Lemon.

23

DRH написал B-Дерево на основе алгоритма из книги TAOCP Дональда Кнута, программируя его в самолете во время путешествия (супер круто).

24

SQLite произносится как "Эс-Кью-Эл-айт". Официальных guidelines (руководящих указаний) по этому поводу нет. DRH упомянул на форумах SQLite:

Я создал SQLite и считаю, что это следует произносить "Эс-Кью-Эл-айт". Как минерал. Но я не против, если вы, ребята, произносите это как угодно.
:-)

Источники

  1. Источники: Самая разворачиваемая, Общественное достояние и вклады, Тестирование, Платная поддержка, Быстрее файловой системы, История SQLite.
  2. Я опубликовал это как тред в Twitter, где множество людей предоставили больше источников. Спасибо им: 1, 2, 3, 4, 5.

Теги

 

Похожие материалы

Zabbix шаблон для мониторинга Jobs у Microsoft SQL Server 2014

Заморочился и написал. Делюсь полезным шаблоном для мониторинга джобов Microsoft SQL Server 2014. Ось - Windows Server 2012 R2. В шаблоне 16 прототипов элементов данных и 8 прототипов триггеров.

Теги