- PVSM.RU - https://www.pvsm.ru -

Её поддерживают три человека [1]. Они не допускают внешних контрибьюторов.



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

SQLite сделали общественным достоянием (public domain), и она даже имеет ещё меньше ограничений.
Стоит также отметить, что это может стать проблемой [3] в некоторых странах/юрисдикциях, не признающих общественное достояние. Поэтому SQLite продаёт лицензии [4], называемые «Warranty of Title» («гарантия чистоты прав собственности»).


Контрибьютором в SQLite можно стать только по приглашению (у меня нет ссылки на источник, подтверждающий это). Патчи можно будет добавлять только после того, как вас пригласят и вы подпишете письменное поручительство (аффидавит) о том, что передаёте свой вклад в общественное достояние.
На каждую строку кода SQLite приходится более 600 строк кода тестов. Тесты покрывают 100% ветвлений (и 100% MC/DC [5]) библиотеки. Набор тестов крайне разнообразен, он включает фаззинг-тесты, тесты граничных значений, регрессионные тесты и тесты, симулирующие вылеты операционных систем, отключение питания, ошибки ввода-вывода, ошибки out-of-memory.
Изначально SQLite была расширением Tcl [6], а её основной набор тестов написан на Tcl.
Не знаю ни одного другого проекта, который бы был открытым, но с платными тестами.
Однако разработчики не смогли продать ни единой копии TH3. DRH сказал в подкасте:
«Стопроцентные тесты MCD называются TH3. Они проприетарны. У меня была мысль, что мы можем продавать эти тесты производителям авиационного оборудования и зарабатывать на этом. Мы продали ровно ноль копий, так что затея провалилась».
Для получения доступа нужно вступить в SQLite Consortium с ежегодным членским взносом 120 тысяч долларов.


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


В некоторых сценариях использования [10] SQLite может быть быстрее, чем Redis из-за сетевого стека и лишних затрат на (де)сериализацию.
В 2010 году ситуация изменилась из-за добавления режима WAL. До его появления могли быть или читатели, или писатель, но не одновременно.
Существует целый список странностей [13] SQLite.
CREATE TABLE user(id INTEGER);
INSERT into user VALUES ("YOLO!"); --- Это сработает!
Более того, база данных не выбрасывает никаких ошибок, если передать ей какой-то произвольный тип.
CREATE TABLE t(value TIMMYSTAMP);
Типа TIMMYSTAMP не существует, но SQLite спокойно принимает его.
В SQLite есть пять типов: NULL, INTEGER, REAL, TEXT, BLOB. Хотите узнать нечто безумное? Аффинность типов работает при помощи сопоставления подстрок [14]!
CREATE TABLE t(value SPONGEBLOB) --- Это тип BLOB!
Поэтому случается и такое:
Имейте в виду, что объявленный тип «FLOATING POINT» придаст аффинность INTEGER, а не REAL, потому что в конце «POINT» есть подстрока «INT».
sqlite_ на etilqs_, когда пользователи начали звонить разработчикам по ночам.

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

Это напомнило мне о том, как Линус написал Git.
Также DRH написал собственный генератор парсеров Lemon.
Я написал SQLite и думаю, название должно произноситься, как «S-Q-L-ite». Но вы вполне можете произносить его, как угодно.
:-)
1. Самая развёртываемая [19], общественное достояние и вклад [20], тестирование [21], платная поддержка [22], быстрее, чем файловая система [23], история SQLite [24].
2. Я опубликовал эту статью на Twitter, и люди дали мне ссылки на дополнительные источники. Спасибо им: 1 [25], 2 [26], 3 [27], 4 [28], 5 [29].
Автор: ru_vds
Источник [30]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/bazy-danny-h/407755
Ссылки в тексте:
[1] три человека: https://www.sqlite.org/crew.html
[2] Hwaci: https://hwaci.com
[3] проблемой: https://opensource.org/blog/public-domain-is-not-open-source
[4] продаёт лицензии: https://www.sqlite.org/purchase/license
[5] MC/DC: https://en.wikipedia.org/wiki/Modified_condition/decision_coverage
[6] расширением Tcl: https://www.sqlite.org/tclsqlite.html
[7] TH3 (Test Harness 3): https://www.sqlite.org/th3.html
[8] Code of Ethics: https://sqlite.org/codeofethics.html
[9] благословение: https://github.com/sqlite/sqlite/blob/624cb96/src/wal.c#L4,#L9
[10] некоторых сценариях использования: https://x.com/iavins/status/1849422515027763227
[11] STRICT: https://www.sqlite.org/stricttables.html
[12] Многие команды ALTER: https://sqlite.org/omitted.html
[13] список странностей: https://www.sqlite.org/quirks.html
[14] сопоставления подстрок: https://www.sqlite.org/datatype3.html#determination_of_column_affinity
[15] любимых историй: https://x.com/iavins/status/1865746403072389612
[16] выпустили код с багом: https://x.com/iavins/status/1851276312876326980
[17] Fossil: https://fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki
[18] форумах по SQLite: https://web.archive.org/web/20201126110450/http://sqlite.1065341.n5.nabble.com/SQLite-Pronunciation-td88186.html#message88194
[19] Самая развёртываемая: https://www.sqlite.org/mostdeployed.html
[20] общественное достояние и вклад: https://www.sqlite.org/copyright.html
[21] тестирование: https://www.sqlite.org/testing.html
[22] платная поддержка: https://www.sqlite.org/prosupport.html
[23] быстрее, чем файловая система: https://www.sqlite.org/fasterthanfs.html
[24] история SQLite: https://corecursive.com/066-sqlite-with-richard-hipp/
[25] 1: https://x.com/nomsolence/status/1873416106922402060
[26] 2: https://x.com/motherwell/status/1873678651616829949
[27] 3: https://x.com/eriklangille/status/1873737893057122400
[28] 4: https://old.reddit.com/r/programming/comments/1hpowxh/collection_of_insane_and_fun_facts_about_sqlite/m4ktv35/
[29] 5: https://attractive.space/@Setok/113762362684067877
[30] Источник: https://habr.com/ru/companies/ruvds/articles/873816/?utm_source=habrahabr&utm_medium=rss&utm_campaign=873816
Нажмите здесь для печати.