2025-01-11 关于SQLite的疯狂和有趣的事实的集合

关于SQLite的疯狂和有趣的事实的集合

<time class="post-date" datetime="2024-12-30 15:23:57 +0530" data-immersive-translate-walked="1fc84c77-91bc-4cf5-a722-f2319a65a864" data-immersive-translate-paragraph="1" style="box-sizing: border-box; display: block; margin: 0px 0px 1rem; text-align: right;">2024年12月30日</time></header>

  1. SQLite是部署最多、使用最多的数据库。有超过一万亿(100000000000000或100万)的SQLite数据库正在积极使用。

    它由三个人维护。他们不允许外部捐款。

  2. SQLite的使用可能比所有其他数据库引擎的总和更多。数十亿个SQLite副本存在于野外。它无处不在。

    [图片上传失败...(image-db69a5-1736577160724)]

  3. 它也可能是部署最多的五大软件模块之一。

    [图片上传失败...(image-7e3244-1736577160724)]

  4. Hwaci是SQLite背后的公司。他们也喜欢音乐(?)

    [图片上传失败...(image-dd3c31-1736577160724)]

  5. SQLite起源于一艘美国军舰。D.Richard Hipp(DRH)正在为海军驱逐舰奥斯卡·奥斯汀号构建软件。每当服务器停机时,现有软件就会停止工作(这是在2000年代)。对于一艘战舰来说,这是不可接受的。

    所以DRH问了一个问题:如果数据库在没有任何服务器的情况下工作怎么办?用DRH的话来说:

    为什么我们甚至需要一个服务器?为什么我不能直接把这个从磁盘驱动器上拉下来?这样,如果计算机足够健康,它就可以运行我们的应用程序,我们没有可以失败并导致我们失败的依赖项,我环顾四周,没有SQL数据库引擎可以做到这一点,和我一起工作的一个人说:“Richard,你为什么不写一个呢?”“好的,我会试一试的。”我没有马上那样做,但后来,资金中断了。这是在2000年,如果我没记错的话,Newt Gingrich和Bill Clinton正在打架,所以所有政府合同都被关闭了,所以我休息了几个月,我想,“好吧,我现在就写那个数据库引擎。”

  6. 与大多数使用标准许可证(如麻省理工学院或GPL)的开源项目不同,SQLite没有OSI批准的许可证。

    [图片上传失败...(image-10fd3c-1736577160724)]

    相反,SQLite被释放到公共领域,它的限制更少。

    另请注意,在一些不承认公共领域的国家/司法管辖区,这可能是一个问题。因此,SQLite销售许可证,称为“所有权保证”。

  7. 他们不允许外部捐款。您不能只是发送拉取请求,并希望补丁被接受。

    [图片上传失败...(image-31c7eb-1736577160724)]

  8. 开源,而不是开放贡献

    [图片上传失败...(image-40dc5e-1736577160724)]

    为SQLite做出贡献是仅限邀请的(我没有来源)。只有在您被邀请并签署一份宣誓书,将您的贡献奉献给公共领域后,您才能提交补丁。

  9. 他们是怎么做饭的?

    SQLite中每行代码都有600多行测试代码。测试涵盖了图书馆中100%的分支(和100%的MC/DC)。测试套件非常多样化,包括模糊测试、边界值测试、回归测试以及模拟操作系统崩溃、功耗、I/O错误和内存丢失错误的测试。

    SQLite最初是Tcl扩展,其主要测试套件是用Tcl编写的。

  10. 有趣的是,一些SQLite测试是专有的。名为TH3(测试线束3)的测试套件实现了代码的100%分支覆盖,是专有的,不开放访问。

我不知道任何其他项目让代码免费,但测试套件是付费的。

然而,他们无法出售TH3的一份副本。DRH在播客中说:

> 100%的MCD测试,称为TH3。那是专有的。我的想法是,我们将把这些测试卖给航空电子制造商,并以这种方式赚钱。我们卖的副本正好为零,所以这并没有真正奏效。

为了获得访问权限,一个人需要成为SQLite联盟的一员,该联盟每年花费12万美元。
  1. 这是一个有趣的商业模式。他们通过许可证、付费支持、维护服务、财团会员资格和商业扩展来创造收入。

  2. SQLite没有行为准则(CoC),而是道德准则来自《圣规则》第4章的“善行工具”。本尼迪克特

[图片上传失败...(image-4627e2-1736577160724)]
  1. 在SQLite中:这里有一个祝福,代替法律声明:
[图片上传失败...(image-772185-1736577160724)]

所有源代码文件都带有祝福。
  1. SQLite太快了,它们与fopen竞争。对于某些用例,您可以使用SQLite而不是文件系统,这可以加快35%的速度。
[图片上传失败...(image-a5382a-1736577160724)]
  1. SQLite vs Redis(猜哪个更快?)
[图片上传失败...(image-230d2-1736577160724)]

对于[某些用例](https://x.com/iavins/status/1849422515027763227),由于网络堆栈和(去)序列化开销,SQLite可能比Redis更快。
  1. 但是,与大多数数据库不同,SQLite有一个单一的写入模型。你不能同时拥有多个作家。
最近在2010年通过添加WAL模式也发生了变化。在此之前,你可以有读者或作家,但永远不会在一起。
  1. 还有其他东西在其他数据库中非常常见,但在SQLite中并不常见:
*   默认值是回滚日志模式,它限制您拥有多个读者或单个作家
*   外键被禁用;它们是选择加入的
*   它是“弱类型”。SQLite称它为“类型亲和力”。这意味着,即使您已经定义了类型,您也可以在列中插入任何东西。强类型列是选择加入的(通过[`STRICT`](https://www.sqlite.org/stricttables.html)表)。
*   [](https://sqlite.org/omitted.html)您期望在其他数据库中[的许多`ALTER`命令](https://sqlite.org/omitted.html)不起作用。例如,您不能向现有列添加约束。(他们最近增加了重命名列名的功能)

这里有一整套[怪癖清单](https://www.sqlite.org/quirks.html)。
  1. 我讨厌它不强制执行类型。这完全是YOLO:
```
CREATE TABLE user(id INTEGER);
INSERT into user VALUES ("YOLO!"); --- This works!

```

不仅如此,如果你给出一些随机类型,它不会抛出任何错误。

`CREATE TABLE t(value TIMMYSTAMP);`

没有`TIMMYSTAMP`类型,但SQLite很乐意接受这个。

SQLite有五种类型:`NULL`、`INTEGER`、`REAL`、`TEXT`、`BLOB`。想知道一些被诅咒的东西吗?类型亲和力通过[子字符串匹配](https://www.sqlite.org/datatype3.html#determination_of_column_affinity)来工作!

```
CREATE TABLE t(value SPONGEBLOB) --- This is BLOB type!

```

所以,是的,这也发生了:

> 请注意,由于“POINT”末尾的“INT”,声明的“浮点”类型将给出整数亲和力,而不是真实亲和力。
  1. 这是我最喜欢的传说之一。当用户在半夜开始呼叫开发人员时,SQLite必须将默认前缀从sqlite_更改为etilqs_
[图片上传失败...(image-bb4899-1736577160724)]
  1. SQLite非常重视向后兼容性
> SQLite版本3的所有版本都可以读取和写入第一个SQLite 3版本(版本3.0.0)创建的数据库文件,可以追溯到2004年6月18日。这就是“向后兼容性”。开发人员承诺为SQLite 3的所有未来版本保持数据库文件格式的向后兼容性。
  1. 但他们非常重视向后兼容性,即使他们已经发货了错误,他们也不会修复它
[图片上传失败...(image-fa8a8d-1736577160724)]
  1. SQLite的作者D。Richard Hipp(DRH)发现现有的版本控制系统不合适。所以他写了自己的名为Fossil。当然,Fossil由SQLite提供支持。
这让我想起了Linus是如何编写Git的。

DRH还编写了自己的名为Lemon的解析器生成器。
  1. DRH根据Donald Knuth的《TAOCP》一书中的算法编写了B-Tree,在旅行时在飞机上编码(基于超级)

  2. SQLite的发音是“Ess-Cue-El-ite”。不过,没有官方指导方针。SQLite论坛中提到的DRH:

> 我写了SQLite,我认为它应该发音为“S-Q-L-ite”。像矿物一样。但我不介意你们想用什么方式说。
> 
> :-)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,702评论 6 534
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,615评论 3 419
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,606评论 0 376
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,044评论 1 314
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,826评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,227评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,307评论 3 442
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,447评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,992评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,807评论 3 355
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,001评论 1 370
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,550评论 5 361
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,243评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,667评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,930评论 1 287
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,709评论 3 393
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,996评论 2 374

推荐阅读更多精彩内容