共计 6884 个字符,预计需要花费 18 分钟才能阅读完成。
起源:云数据库技术
数据库打工仔自言自语的八卦历史
1. 为导弹巡洋舰设计,用在手机上的数据库
2. Small and Simple, and Better
- 如何看出是本人的娃:产品定位,特点和边界
- 产品设计
作为产品设计 / 产品治理的从业者,日常工作的一个外围就是明确产品的劣势和定位,加上同样重要,又经常被疏忽的维度:产品边界
姚明是中锋,并不是说他不能像后卫一样投三分,他明确的晓得本人的短处和定位,和能力边界。
咱们明天就探讨一个数据库专一细分畛域的,甚至能够说是小众的,然而又最风行的,产品边界清晰的数据库 SQLite
编辑
SQLite Logo
图片起源 – SQLite.org
- 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。
- 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 万个。它对产品质量的器重,是否能够让许多大厂的号称企业级的零碎测试汗颜了1。
2.4.2 规范数据库
- 反对数据库最重要的事务 ACID。
- 兼容规范的 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…),其实还是 client/server 的服务架构,精确的说是有服务器(Server) 的。
Serverless 作为一个技术,其经典定义(当初比拟小众了)就是纸面意思:没有服务器 /no server。SQLite 是 Serverless,因为它与应用程序的同一个过程内运行,专用共享同一块内存空间,相互之间间接读写,而不通过音讯协定(比方 RPC call)和网络交互。
2.4.6 “ 官网 ” 认证
美国国会图书馆,又称美国国家图书馆(Library of Congress) 举荐的独立于平台的凋谢格局的四种数据存储格局之一。
此官网认证与国内的政府认证,语音相似,差距很大。
- 马后炮,评英雄
《胜利学》最重要的劣势就在于:面对一个曾经胜利的产品,我的项目,人或者团队,总结(堆砌)其英明决策。
事实世界是黑白多变的,历史必然性多于偶然性,尤其是具体的人和事。回头看 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.1 业务疏导技术方向 – 国内和国内不同的实际
技术服务业务,是行内比拟广泛的认知,合乎逻辑。但当咱们看到细节的时候,会发现国内和国内的显著不同。
中国和欧美 IT 技术开发既有类似处,比方美国为联邦政府提供 IT 软件服务也有相似中国的认证流程,本着对纳税人负责的态度,谨严但也死板,同时政府也经常是重要的金主甲方。不同点是,中国政府能够集中力量办小事,远的高铁,近期的芯片和新能源汽车,政府的方向性是明确清晰的。国内上,技术革新的大方向经常是技术公司和商业疏导的,比如说 Telsa/SpaceX 的跨时代的冲破,基本上没有政府的疏导,更精确的说是 Telsa 疏导(游说)政府给以免税政策。
具体到 SQLite 这个国家图书馆的“官网”认证,说起来很无力,其实对于 SQLite 的成败影响力就十分无限了。
一点感想吧,如果读者的产品打算进军国内市场,集体倡议:
• 业务销售人员要积极关注政府合规认证;
• 技术开发人员专一设计前沿和产品实现,切忌投合。
4.2 形容产品的片儿汤话
产品常见的商业口号同质化重大,基本上是快好省的衍生词汇。
比方:” 与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造。性能和可用性与商用数据库相当,老本只有其 1/10″ , 2022 年 9 月 13 日摘抄 AWS Aurora 官网。如果是某个畛域的先行者,比方 Aurora,倒也罢了,因为是采纳了某个突破性新技术,能够担当快好省的评估。之后的追随者,也如此定位宣传,就有些东施效颦的偷懒和难堪了。
PPT/ 胶片是技术产品人员经常应用的工具,评估一个资料的好坏,用心与否,能够把 PPT 中的产品名字盖住,用模版的把色彩和字符对立一下,是否还能看出是哪一个大厂的哪一款产品?粗略预计,80% 的产品描述过不了此关。
- 八卦篇
阿波罗登月
提到小而精的经典程序,必须跪拜一下阿波罗登月打算中的 AGC 零碎,提供登月过程中航天器的制导、导航和管制。全副零碎装置在 72KB 的只读 ROM 里(头条 APP 的 2 千分之一),运行空间是 4KB(byte) RAM(约为本篇 Markdown 文本的四分之一)。
情谊奉送 Github 打卡地址,膜拜一下阿波罗 11 号导航软件 AGC 中指令模块(Comanche055)和登月模块(Luminary099)原码。
当然再牛的软件都有 bug, 如果论如果论惊险性,AGC 的 1202 必定是历史前 10 的。有趣味的同学,能够移步代码 1202,50 年前的阿波罗登月给主动驾驶汽车留下贵重一课,或英文原版 Apollo 11’s 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/Arm…
https://www.discovermagazine….
https://en.wikipedia.org/wiki…
https://www.sqlite.org/mostde…
https://www.loc.gov/preservat…
https://www.discovermagazine….
https://en.wikipedia.org/wiki…
https://github.com/chrislgarr…
https://thenewstack.io/the-or…
https://sqlite.org/testing.html, How SQLite Is Tested
https://www.baike.com/wiki/%E…
https://www.baike.com/wiki/%E…
https://www.sohu.com/a/327610…
https://www.forbes.com/sites/…
- How SQLite Is Tested https://sqlite.org/testing.html ↩