当前位置:首页 > 家装 > 装修设计 > 文章正文

数据火器库八卦系列之瑞士军刀随APP携带的SQLite

编辑:[db:作者] 时间:2024-08-25 02:11:30

数据库打工仔喃喃自语的八卦历史

1. 为导弹巡洋舰设计,用在手机上的数据库2. Small and Simple, and Better3. 如何看出是自己的娃:产品定位,特点和边界

数据火器库八卦系列之瑞士军刀随APP携带的SQLite

1. 产品设计

作为产品设计/产品管理的从业者,日常事情的一个核心便是明确产品的上风和定位,加上同样主要,又常常被忽略的维度:产品边界

姚明是中锋,并不是说他不能像后卫一样投三分,他明确的知道自己的长处和定位,和能力边界。

我们本日就谈论一个数据库专注细分领域的,乃至可以说是小众的,但是又最盛行的,产品边界清晰的数据库 SQLite

SQLite Logo

图片来源 - SQLite.org

2. SQLite - 兆级数据库

从数据库实例维度,全天下最盛行的数据库,不是那些数据库元老(O,DB2,SQL Server), 不是云上新贵(Aurora, Snowflake, Azure),不是开源MySQL/PG, 不是大数据HBase/Spark。
他们加在一起,也比不上SQLite的零头。

现现代界上正在运行的SQLite,有超过万亿(1000B,1e12)的实例。
每一位当代人的日常是被SQLite环绕的 :

• 所有的Android手机/手环(华为,小米,三星...)

• 所有的苹果iOS设备手机/Pad/腕表

• 所有的苹果电脑 Mac

• 所有的微软Windows10电脑

• 通用浏览器(Firefox, Chrome, and Safari)

• 智能电脑/机顶盒

• 车载多媒体系统

• ....

SQLite不须要传统意义的安装,支配,调试,是纯粹意义上的Zero-Configuration。
不须要DBA, It just work for a developer,乃至许多i/OS, andriod手机APP的开拓者,根本不知道他们在利用SQLite。

3. SQLite 产品设计

产品设计,开拓实现与运用实践,三者之间不是流水线或waterfall的单行道,而是循环往来来往,螺旋上升的。

SQLite由Dwayne Richard Hipp个人开拓开源的。
Hipp也算是打算机领域中N多个从学校求学的大牛之一,差异在于Hipp是在Duke读博士的时候才悟出来的,比Gates(大三) 和Jobs(大一)逊色不少。
当年2000年甲方爸爸,天下五大国防工业供应商(俗称军火制造商)之一,列入Fortune 100的 通用动力公司(General Dynamics)须要为美国海军的供应软件系统,Hipp是个中一个临时工。

如果对GD不熟习,那可以补课旗舰产品F-16

Hipp作为政府的条约工,适值由于联邦政府关门(对的,便是那种没有钱导致确当局关门),暂时失落业了。
待业在家(笔者刚刚短暂的享受了几天),Hipp搞出的事情便是写个数据库,处理个战舰损管掌握系统。

2.1 需求

驱逐舰 奥斯卡.奥斯丁舰名来自名誉勋章得到者奥斯丁下士图片来源 - wiki百科

做数据库的产品经理可能很难碰着如此详细的需求,驱逐舰奥斯卡.奥斯丁上的某个任务对话框弹出DBA梦幻信息:

Can’t connect to database server

而这个任务是战斗损管系统,也便是在弹雨枪林下,水深火热中,须要报警表示那些管道/举动步伐须要应急维修。
真枪实弹的秒级交互场景中,如果涌现数据库无法联接,操作员心中怎能不万马奔驰?

这个联系不上的数据库系统,是当年赫赫有名的Informix。
虽然不如Oracle, Db2(那是还没有SQL Server的时期),Informix也是top5 的数据库,二十年前被IBM用10亿美刀收购,也算表示代价了。
可是Informix不是为这个业务场景设计的,事实上当年没有任何一款数据库符合此场景。

2.2 边界:不是什么

一方面Informix和已有数据库不适宜上述场景,另一方面新产品也不用背负老系统的功能集和业务职责。

NOT another RDBMS:

• 不是替代当年成熟的数据库(Db2, Oracle)

• 不是(2000年代)新宠的数据仓库(Netezza, greenplum)

• 不是繁芜的做事器Server-base系统

• 速率不是主要指标

• 存储量也不是主要指标

• 跨平台不是设计指标(比拟2000 java的崛起)

• 功能完好不是设计目的

2.3 定位:为单一APP做事的数据库

SQLite是自己自足Self contained的关系数据库管理系统,直接手事某运用某块。
此观点与现在盛行的microservices有类似之处。

SQLite面临的不是提高Informix链接数,繁芜的链接池算法,或者断点续连的问题。
而是面向的是每一个掌握模块须要恶劣环境下,乃至涌现物理切割的情形下,单模块系统依然可以对立运行,完成大部分设计功能。
特殊明确一下,这里的模块指代某个硬软件一体的工业模块,不是数据库内部的纯软件模块。

让我们做一个业务比拟:现在中国的银行系统是采取中央体系的,每次一个支行或柜员机的业务操作是与总行数据中央连接完成的。
好处是用户可以跨区域跨分行操作,异地存储转账,不敷是如果与总行的线路涌现问题,分行是瘫痪的。
而SQLite的定位是,在正常情形下与总枢纽指挥中央联结,通讯通道非常时,比如前炮台,后轮机,均须要独立完成90%以上的职责。

2.4 特点(优点):NOT Faster, Better, Cheaper

咬文嚼字的说,优点是发卖词汇,产品设计角度该当强调的是特点。
特点在适宜的场景中才是上风。
SQLite,不是最快最大最全的数据库,正好相反它是最小的标准数据库RDBMS。

SQLite的特点是如此明显的,以是宣扬它不用那些看不出产品特点的片儿汤话。
事实上SQLite的早期成功同商务宣扬没有半毛钱关系。
它为一个分外的细分市场供应了具有根本数据库能力的嵌入式系统,这个细分市场在短短几年跳跃进弘大的智好手机时期,而SQLite的生命力强大到轻轻松松的站在时期的浪尖。

2.4.1 小:Small and Simple

通过C编写,在正式发布5年之后,向Google/Andriod的推广时,SQLite的binary也不过250KB。
出世20多年过程中,添加了全文检索,CTE,JSON等高等功能后,SQLite的发布版也只有小小的700KB。

今日头条( andriod版)的安装后大小161MB,1:200的关系。
对了,今日头条APP中很可能也用了SQLite(请字节同学确认,同样问题抛给阿里淘宝,腾讯微信)

SQLite实在很"大",3.33.0(2020GA)可以最大支持281TB的数据。
其系统测试分四大类,几百万测试case。
纵然最小的,为开拓程序员日常check in的把关的“very quick”的Tcl 测试,也有30万个。
它对产品质量的重视,是否可以让许多大厂的号称企业级的系统测试汗颜了[^9]。

[^9]: How SQLite Is Tested https://sqlite.org/testing.html

2.4.2 标准数据库

1. 支持数据库最主要的事务ACID。

2. 兼容标准的SQL-92,初版SQLite 1.0利用PostgreSQL6.5语法。

3. C/C++ interface作为原始编程措辞接口,为后期衍生开拓供应可扩展的链接

2.4.3 嵌入式

大家熟习数据库系统,Oracle, DB2, MySQL等,是存在于运用程序之外的独立系统,一个Oracle为多个运用做事。
还以银行系统为例,运用(application)包括存取(强事务write),流水单(单储户Read Only),储户留存剖析(月尾报表, BI Report),都可以在同一个Oracle集群上操作。

SQLite是嵌入式的数据库,作为运用(APP)的一个部件,同时安装,同运用和用户常常都是一对一关系。
SQLlite的小授予了它可以被嵌入的能力。

2.4.4 利用文件系统

定位决定了分外性:并发少,权限管理大略,性能哀求不高。

SQLite不用类似系统级数据库,深度管理定制的存储管理系统,比如MySQL 开拓自己的innoDB, TiDB 采取TiKV和RocksDB。
SQLite依赖操作系统自带的文件系统,读写自己DB file,并且继续文件系统的权限管理。

此设计理念简化系统繁芜度,但也并不是没有缺陷。
并发读写便是SQLite的明显短板之一。
由于全体数据库是一个大文件,依赖文件锁来掌握读写冲突。
只有在后期(2010)实现WAL后,才供应了并发功能,当然也是有代价的。

2.4.5 Serverless

大家常常稠浊了“Serverless”这个技能,与云Serverless Computing 这个技能+业务手段,比如[Serverless Database] (https://en.wikipedia.org/wiki/Serverless_computing#Serverless_databases),实在还是client/server的做事架构,准确的说是有做事器(Server)的。

Serverless作为一个技能,其经典定义(现在比较小众了)便是纸面意思:没有做事器/no server。
SQLite是Serverless,由于它与运用程序的同一个进程内运行,公用共享同一块内存空间,相互之间直接读写,而不通过协议(比如RPC call)和网络交互。

2.4.6 "官方"认证

美国国会图书馆,又称美国国家图书馆(Library of Congress) 推举的独立于平台的开放格式的四种数据存储格式之一。

此官方认证与海内确当局认证,语音类似,差距很大。

3. 马后炮,评英雄

《成功学》最主要的上风就在于:面对一个已经成功的产品,项目,人或者团队,总结(堆砌)其英明决策。

现实天下是黑白多变的,历史有时性多于一定性,尤其是详细的人和事。
转头看SQLite, 也是可以总结一些契机和事后方知的成分,匆匆成了它的本日。

3.1 项目 vs. 产品

SQLite肯定不是某领导英明决策的结果。
本来是个项目(办理Informix掉链问题),Hipp闲的无聊把它作成了产品。

反不雅观许多产品团队打着产品的名号做项目。
在短期业务压力下,或者是由于大厂内部竞争,或者由于初创企业生存压力。
团队早期做有生命力有天下水平数据库的梦想,很快向现实环境低头了。
被甲方爸爸或领导指挥旁边,对自己的产品拔苗助长。
项目大概拿下了的代价是产品做残了。

3.2 开源

SQLite从第一天便是开源的,特殊要明确一下,不是开源项目。

Hipp一个人开拓,开源的。
他没有想到SQLite二十年后支持了当代人的分分秒秒的日常生活。
乃至在头几年,Hipp都不知道谁利用,搞笑的是他之以是理解到通用电气和日立青睐SQLite,是由于出口牵制须要走法律流程时,两个大厂不得不找Hipp理解情形。
他才知道已经被白嫖多年。

很幸运的是,Hipp这个工程师得到一个有法务背景的IT贩子, Mitchell Baker, CEO of Mozilla Foundation,辅导和帮助。
SQLite才真正成为一个项目SQLite同盟 ,有了稳定的资金,同时又保留了开拓者主导决策产品的发展的权利。

3.3 Google和Andriod

SQLite唯一得到的奖项是2005 Google O’Reilly Open Source Award。

当iphone/智好手机被业界认为是后PC革命的时候,smartphone已经开始利用SQLite, Symbian(Nokia)属于最早的之一。

Google/Andriod在iphone得到早期风光之后,也走进了掌上的舞台。
他们选中了SQLite。
于是所有的Andriod APP, 都用SQLite作为默认的数据库管理。
实际情形是APP开拓者并不理解数据库,也没有动力去选型。
APP利用SQLite由于Google/Andriod是选择(平台浸染),也是所有APP教程的选择(生态浸染)。

3.4 测试

SQLite溘然直面了百万的用户,各种bug如雨后春笋一样平常暴露出来。
Hipp花了整整一年韶光写测试用例。
大多数产品在GA,商业化之后,很难有韶光和机会专门供应测试覆盖和产品质量。
Hipp是幸运的,在关键时候等到认可和帮助;SQLite是幸运的,它是开拓者的孩子而不是大略的赢利的工具。
SQLite像是发展中的少年,等到了机会,接管了营养,终年夜成人。

4. 一点感触4.1 业务勾引技能方向 - 海内和国际不同的实践

技能做事业务,是行内比较普遍的认知,合乎逻辑。
但当我们看到细节的时候,会创造国际和海内的明显不同。

中国和欧美IT技能开拓既有相似处,比如美国为联邦政府供应IT软件做事也有类似中国的认证流程,本着对纳税人卖力的态度,严谨但也去世板,同时政府也常常是主要的金主甲方。
不同点是,中国政府可以集中力量办大事,远的高铁,近期的芯片和新能源汽车,政府的方向性是明确清晰的。
国际上,技能改造的大方向常常是技能公司和商业勾引的,比如说Telsa/SpaceX的跨时期的打破,基本上没有政府的勾引,更准确的说是Telsa勾引(游说)政府给以免税政策。

详细到SQLite这个国家图书馆的“官方”认证,提及来很有力,实在对付SQLite的成败影响力就非常有限了。

一点感想吧,如果读者的产品操持进军国际市场,个人建议:

• 业务发卖职员要积极关注政府合规认证;

• 技能开拓职员专注设计前沿和产品实现,切忌迎合。

4.2 描述产品的片儿汤话

产品常见的商业口号同质化严重,基本上是快好省的衍生词汇。

比如:"与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造。
性能和可用性与商用数据库相称,本钱只有其 1/10" , 2022年9月13日摘抄AWS Aurora 官网。
如果是某个领域的先行者,比如Aurora,倒也罢了,由于是采取了某个打破性新技能,可以担当快好省的评价。
之后的追随者,也如此定位宣扬,就有些东施效颦的偷

PPT/胶片是技能产品职员常常利用的工具,评价一个材料的好坏,存心与否,可以把PPT中的产品名字挡住,用模版的把颜色和字符统一一下,是否还能看出是哪一个大厂的哪一款产品?粗略估计,80%的产品描述过不了此关。

5. 八卦篇阿波罗登月

提到小而精的经典程序,必须膜拜一下阿波罗登月操持中的AGC系统,供应登月过程中航天器的制导、导航和掌握。
全部系统安装在72KB的只读ROM里(头条APP的2千分之一),运行空间是4KB(byte) RAM(约为本篇Markdown文本的四分之一)。

交情奉送Github打卡地址,膜拜一下阿波罗 11 号导航软件AGC中指令模块(Comanche055)和登月模块(Luminary099)原码。

当然再牛的软件都有bug, 如果论如果论惊险性,AGC的1202肯定是历史前10的。
有兴趣的同学,可以移步[代码1202,50年前的阿波罗登月给自动驾驶汽车留下宝贵一课](https://www.sohu.com/a/327610148_115873),或英文原版[Apollo 11's Infamous Landing Error Code 1202 Offers Earthly Lessons For Self-Driving Cars](https://www.forbes.com/sites/lanceeliot/2019/07/16/apollo-11s-infamous-landing-error-code-1202-offers-earthly-lessons-for-self-driving-cars)。

花无百日红

讽刺的是SQLite当年并没有被GD采纳,由于决策者还是守旧的利用成熟且风险小的Informix。

SQLite的设计也没有考虑到现在强烈的端(手机)和云之间的数据协同/同步需求。
加上SQLite不从属于大厂,商业竞争过程中逐渐被同类产品压迫。
比如Google大力扶持的firebase 端云系统,MongoDB并购了Realme也是为此做事。
业界比较成功的云原生的时序数据库TDengine也在接口了除SQLite以外的多个端侧数据采集模块。

随着手机市场的成熟,IoT和智能汽车的发展,SQLite的强力竞争者将越来越多。
SQLite步入软件的中年危急,我们拭目以待,期望它老而弥坚吧。

6. 信息来源

由于平台对应引用链接的限定,无法准确标注信息来源。
须要理解,请参考原文https://github.com/nidmgh/ArmoryBase/blob/main/chapters/06-SQLite.md

https://www.discovermagazine.com/the-sciences/apollo-11s-1202-alarm-explained

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

https://www.sqlite.org/mostdeployed.html

https://www.loc.gov/preservation/resources/rfs/data.html

https://www.discovermagazine.com/the-sciences/apollo-11s-1202-alarm-explained

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

https://github.com/chrislgarry/Apollo-11/

https://thenewstack.io/the-origin-story-of-sqlite-the-worlds-most-widely-used-database-software/

https://sqlite.org/testing.html, How SQLite Is Tested

https://www.baike.com/wiki/%E5%A4%9A%E5%BF%AB%E5%A5%BD%E7%9C%81

https://www.baike.com/wiki/%E7%89%87%E5%84%BF%E6%B1%A4%E8%AF%9D

https://www.sohu.com/a/327610148_115873

https://www.forbes.com/sites/lanceeliot/2019/07/16/apollo-11s-infamous-landing-error-code-1202-offers-earthly-lessons-for-self-driving-cars

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/lz/zxsj/75676.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com