來源:云數(shù)據(jù)庫技術(shù)
數(shù)據(jù)庫打工仔喃喃自語的八卦歷史
1. 為導(dǎo)彈巡洋艦設(shè)計,用在手機(jī)上的數(shù)據(jù)庫 2. Small and Simple, and Better 3. 如何看出是自己的娃:產(chǎn)品定位,特點和邊界
1. 產(chǎn)品設(shè)計
作為產(chǎn)品設(shè)計/產(chǎn)品管理的從業(yè)者,日常工作的一個核心就是明確產(chǎn)品的優(yōu)勢和定位,加上同樣重要,又常常被忽略的維度:產(chǎn)品邊界
姚明是中鋒,并不是說他不能像后衛(wèi)一樣投三分,他明確的知道自己的長處和定位,和能力邊界。
我們今天就討論一個數(shù)據(jù)庫專注細(xì)分領(lǐng)域的,甚至可以說是小眾的,但是又最流行的,產(chǎn)品邊界清晰的數(shù)據(jù)庫SQLite
SQLite Logo
圖片來源 - SQLite.org
2. SQLite - 兆級數(shù)據(jù)庫
從數(shù)據(jù)庫實例維度,全世界最流行的數(shù)據(jù)庫,不是那些數(shù)據(jù)庫元老(O,DB2,SQL Server), 不是云上新貴(Aurora, Snowflake, Azure),不是開源MySQL/PG, 不是大數(shù)據(jù)HBase/Spark。他們加在一起,也比不上SQLite的零頭。
現(xiàn)今世界上正在運行的SQLite,有超過萬億(1000B,1e12)的實例。每一位現(xiàn)代人的日常是被SQLite圍繞的 :
? 所有的Android手機(jī)/手環(huán)(華為,小米,三星...)
? 所有的蘋果iOS設(shè)備手機(jī)/Pad/手表
? 所有的蘋果電腦 Mac
? 所有的微軟Windows10電腦
? 通用瀏覽器(Firefox, Chrome, and Safari)
? 智能電腦/機(jī)頂盒
? 車載多媒體系統(tǒng)
? ....
SQLite不需要傳統(tǒng)意義的安裝,部署,調(diào)試,是純粹意義上的Zero-Configuration。不需要DBA, It just work for a developer,甚至許多i/OS, andriod手機(jī)APP的開發(fā)者,根本不知道他們在使用SQLite。
3. SQLite 產(chǎn)品設(shè)計
產(chǎn)品設(shè)計,開發(fā)實現(xiàn)與應(yīng)用實踐,三者之間不是流水線或waterfall的單行道,而是循環(huán)往復(fù),螺旋上升的。
SQLite由Dwayne Richard Hipp個人開發(fā)開源的。Hipp也算是計算機(jī)領(lǐng)域中N多個從學(xué)校肄業(yè)的大牛之一,區(qū)別在于Hipp是在Duke讀博士的時候才悟出來的,比Gates(大三) 和Jobs(大一)遜色不少。當(dāng)年2000年甲方爸爸,世界五大國防工業(yè)提供商(俗稱軍火制造商)之一,列入Fortune 100的 通用動力公司(General Dynamics)需要為美國海軍的提供軟件系統(tǒng),Hipp是其中一個臨時工。
如果對GD不熟悉,那可以補(bǔ)課旗艦產(chǎn)品F-16
Hipp作為政府的合同工,恰巧因為聯(lián)邦政府關(guān)門(對的,就是那種沒有錢導(dǎo)致的政府關(guān)門),暫時失業(yè)了。待業(yè)在家(筆者剛剛短暫的享受了幾天),Hipp搞出的事情就是寫個數(shù)據(jù)庫,處理個戰(zhàn)艦損管控制系統(tǒng)。
2.1 需求
做數(shù)據(jù)庫的產(chǎn)品經(jīng)理可能很難遇到如此具體的需求,驅(qū)逐艦奧斯卡.奧斯丁上的某個任務(wù)對話框彈出DBA夢幻信息:
Can’t connect to database server
而這個任務(wù)是戰(zhàn)斗損管系統(tǒng),也就是在彈雨槍林下,水深火熱中,需要報警表示那些管道/設(shè)施需要應(yīng)急維修。真槍實彈的秒級交互場景中,如果出現(xiàn)數(shù)據(jù)庫無法聯(lián)接,操作員心中怎能不萬馬奔騰?
這個聯(lián)系不上的數(shù)據(jù)庫系統(tǒng),是當(dāng)年赫赫有名的Informix。雖然不如Oracle, Db2(那是還沒有SQL Server的時代),Informix也是top5 的數(shù)據(jù)庫,二十年前被IBM用10億美刀收購,也算體現(xiàn)價值了。可是Informix不是為這個業(yè)務(wù)場景設(shè)計的,事實上當(dāng)年沒有任何一款數(shù)據(jù)庫符合此場景。
2.2 邊界:不是什么
一方面Informix和已有數(shù)據(jù)庫不適合上述場景,另一方面新產(chǎn)品也不用背負(fù)老系統(tǒng)的功能集和業(yè)務(wù)職責(zé)。
NOT another RDBMS:
? 不是替代當(dāng)年成熟的數(shù)據(jù)庫(Db2, Oracle)
? 不是(2000年代)新寵的數(shù)據(jù)倉庫(Netezza, greenplum)
? 不是復(fù)雜的服務(wù)器Server-base系統(tǒng)
? 速度不是重要指標(biāo)
? 存儲量也不是重要指標(biāo)
? 跨平臺不是設(shè)計指標(biāo)(對比2000 java的崛起)
? 功能齊全不是設(shè)計目的
2.3 定位:為單一APP服務(wù)的數(shù)據(jù)庫
SQLite是自己自足Self contained的關(guān)系數(shù)據(jù)庫管理系統(tǒng),直接服務(wù)某應(yīng)用某塊。此概念與現(xiàn)在流行的microservices有類似之處。
SQLite面臨的不是提高Informix鏈接數(shù),復(fù)雜的鏈接池算法,或者斷點續(xù)連的問題。而是面向的是每一個控制模塊需要惡劣環(huán)境下,甚至出現(xiàn)物理切割的情況下,單模塊系統(tǒng)依然可以對立運行,完成大部分設(shè)計功能。特別明確一下,這里的模塊指代某個硬軟件一體的工業(yè)模塊,不是數(shù)據(jù)庫內(nèi)部的純軟件模塊。
讓我們做一個業(yè)務(wù)對比:現(xiàn)在中國的銀行系統(tǒng)是采用中心體系的,每次一個支行或柜員機(jī)的業(yè)務(wù)操作是與總行數(shù)據(jù)中心連接完成的。好處是用戶可以跨區(qū)域跨分行操作,異地存儲轉(zhuǎn)賬,不足是如果與總行的線路出現(xiàn)問題,分行是癱瘓的。而SQLite的定位是,在正常情況下與總樞紐指揮中心聯(lián)絡(luò),通訊通道異常時,比如前炮臺,后輪機(jī),均需要獨立完成90%以上的職責(zé)。
2.4 特點(優(yōu)點):NOT Faster, Better, Cheaper
咬文嚼字的說,優(yōu)點是銷售詞匯,產(chǎn)品設(shè)計角度應(yīng)該強(qiáng)調(diào)的是特點。特點在適合的場景中才是優(yōu)勢。SQLite,不是最快最大最全的數(shù)據(jù)庫,恰恰相反它是最小的標(biāo)準(zhǔn)數(shù)據(jù)庫RDBMS。
SQLite的特點是如此明顯的,所以宣傳它不用那些看不出產(chǎn)品特點的片兒湯話。事實上SQLite的早期成功同商務(wù)宣傳沒有半毛錢關(guān)系。它為一個特殊的細(xì)分市場提供了具有基礎(chǔ)數(shù)據(jù)庫能力的嵌入式系統(tǒng),這個細(xì)分市場在短短幾年跳躍進(jìn)龐大的智能手機(jī)時代,而SQLite的生命力強(qiáng)大到輕輕松松的站在時代的浪尖。
2.4.1 小:Small and Simple
通過C編寫,在正式發(fā)布5年之后,向Google/Andriod的推廣時,SQLite的binary也不過250KB。出世20多年過程中,添加了全文檢索,CTE,JSON等高級功能后,SQLite的發(fā)布版也只有小小的700KB。
今日頭條( andriod版)的安裝后大小161MB,1:200的關(guān)系。對了,今日頭條APP中很可能也用了SQLite(請字節(jié)同學(xué)確認(rèn),同樣問題拋給阿里淘寶,騰訊微信)
SQLite其實很"大",3.33.0(2020GA)可以最大支持281TB的數(shù)據(jù)。其系統(tǒng)測試分四大類,幾百萬測試case。即使最小的,為開發(fā)程序員日常check in的把關(guān)的“very quick”的Tcl 測試,也有30萬個。它對產(chǎn)品質(zhì)量的重視,是否可以讓許多大廠的號稱企業(yè)級的系統(tǒng)測試汗顏了[^9]。
2.4.2 標(biāo)準(zhǔn)數(shù)據(jù)庫
1. 支持?jǐn)?shù)據(jù)庫最重要的事務(wù)ACID。
2. 兼容標(biāo)準(zhǔn)的SQL-92,第一版SQLite 1.0使用PostgreSQL6.5語法。
3. C/C++ interface作為原始編程語言接口,為后期衍生開發(fā)提供可擴(kuò)展的鏈接
2.4.3 嵌入式
大家熟悉數(shù)據(jù)庫系統(tǒng),Oracle, DB2, MySQL等,是存在于應(yīng)用程序之外的獨立系統(tǒng),一個Oracle為多個應(yīng)用服務(wù)。還以銀行系統(tǒng)為例,應(yīng)用(application)包括存取(強(qiáng)事務(wù)write),流水單(單儲戶Read Only),儲戶留存分析(月底報表, BI Report),都可以在同一個Oracle集群上操作。
SQLite是嵌入式的數(shù)據(jù)庫,作為應(yīng)用(APP)的一個部件,同時安裝,同應(yīng)用和用戶常常都是一對一關(guān)系。SQLlite的小賦予了它可以被嵌入的能力。
2.4.4 利用文件系統(tǒng)
定位決定了特殊性:并發(fā)少,權(quán)限管理簡單,性能要求不高。
SQLite不用類似系統(tǒng)級數(shù)據(jù)庫,深度管理定制的存儲管理系統(tǒng),比如MySQL 開發(fā)自己的innoDB, TiDB 采用TiKV和RocksDB。SQLite依賴操作系統(tǒng)自帶的文件系統(tǒng),讀寫自己DB file,并且繼承文件系統(tǒng)的權(quán)限管理。
此設(shè)計理念簡化系統(tǒng)復(fù)雜度,但也并不是沒有缺陷。并發(fā)讀寫就是SQLite的明顯短板之一。因為整個數(shù)據(jù)庫是一個大文件,依靠文件鎖來控制讀寫沖突。只有在后期(2010)實現(xiàn)WAL后,才提供了并發(fā)功能,當(dāng)然也是有代價的。
2.4.5 Serverless
大家常常混淆了“Serverless”這個技術(shù),與云Serverless Computing 這個技術(shù)+業(yè)務(wù)手段,比如[Serverless Database] (https://en.wikipedia.org/wiki/Serverless_computing#Serverless_databases),其實還是client/server的服務(wù)架構(gòu),準(zhǔn)確的說是有服務(wù)器(Server)的。
Serverless作為一個技術(shù),其經(jīng)典定義(現(xiàn)在比較小眾了)就是紙面意思:沒有服務(wù)器/no server。SQLite是Serverless,因為它與應(yīng)用程序的同一個進(jìn)程內(nèi)運行,公用共享同一塊內(nèi)存空間,相互之間直接讀寫,而不通過消息協(xié)議(比如RPC call)和網(wǎng)絡(luò)交互。
2.4.6 "官方"認(rèn)證
美國國會圖書館,又稱美國國家圖書館(Library of Congress) 推薦的獨立于平臺的開放格式的四種數(shù)據(jù)存儲格式之一。
此官方認(rèn)證與國內(nèi)的政府認(rèn)證,語音類似,差距很大。
3. 馬后炮,評英雄
《成功學(xué)》最重要的優(yōu)勢就在于:面對一個已經(jīng)成功的產(chǎn)品,項目,人或者團(tuán)隊,總結(jié)(堆砌)其英明決策。
現(xiàn)實世界是黑白多變的,歷史偶然性多于必然性,尤其是具體的人和事。回頭看SQLite, 也是可以總結(jié)一些契機(jī)和事后方知的因素,促成了它的今天。
3.1 項目 vs. 產(chǎn)品
SQLite肯定不是某領(lǐng)導(dǎo)英明決策的結(jié)果。本來是個項目(解決Informix掉鏈問題),Hipp閑的無聊把它作成了產(chǎn)品。
反觀許多產(chǎn)品團(tuán)隊打著產(chǎn)品的名號做項目。在短期業(yè)務(wù)壓力下,或者是因為大廠內(nèi)部競爭,或者因為初創(chuàng)企業(yè)生存壓力。團(tuán)隊早期做有生命力有世界水平數(shù)據(jù)庫的夢想,很快向現(xiàn)實環(huán)境低頭了。被甲方爸爸或領(lǐng)導(dǎo)指揮左右,對自己的產(chǎn)品拔苗助長。項目也許拿下了的代價是產(chǎn)品做殘了。
3.2 開源
SQLite從第一天就是開源的,特別要明確一下,不是開源項目。
Hipp一個人開發(fā),開源的。他沒有想到SQLite二十年后支持了現(xiàn)代人的分分秒秒的日常生活。甚至在頭幾年,Hipp都不知道誰使用,搞笑的是他之所以了解到通用電氣和日立青睞SQLite,是因為出口管制需要走法律流程時,兩個大廠不得不找Hipp了解情況。他才知道已經(jīng)被白嫖多年。
很幸運的是,Hipp這個工程師得到一個有法務(wù)背景的IT商人, Mitchell Baker, CEO of Mozilla Foundation,指導(dǎo)和幫助。SQLite才真正成為一個項目SQLite聯(lián)盟 ,有了穩(wěn)定的資金,同時又保留了開發(fā)者主導(dǎo)決策產(chǎn)品的發(fā)展的權(quán)利。
3.3 Google和Andriod
SQLite唯一獲得的獎項是2005 Google O’Reilly Open Source Award。
當(dāng)iphone/智能手機(jī)被業(yè)界認(rèn)為是后PC革命的時候,smartphone已經(jīng)開始使用SQLite, Symbian(Nokia)屬于最早的之一。
Google/Andriod在iphone獲得早期風(fēng)光之后,也走進(jìn)了掌上的舞臺。他們選中了SQLite。于是所有的Andriod APP, 都用SQLite作為默認(rèn)的數(shù)據(jù)庫管理。實際情況是APP開發(fā)者并不了解數(shù)據(jù)庫,也沒有動力去選型。APP使用SQLite因為Google/Andriod是選擇(平臺作用),也是所有APP教程的選擇(生態(tài)作用)。
3.4 測試
SQLite突然直面了百萬的用戶,各種bug如雨后春筍一般暴露出來。Hipp花了整整一年時間寫測試用例。大多數(shù)產(chǎn)品在GA,商業(yè)化之后,很難有時間和機(jī)會專門提供測試覆蓋和產(chǎn)品質(zhì)量。Hipp是幸運的,在關(guān)鍵時刻等到認(rèn)可和資助;SQLite是幸運的,它是開發(fā)者的孩子而不是簡單的賺錢的工具。SQLite像是成長中的少年,等到了機(jī)會,吸收了營養(yǎng),長大成人。
4. 一點感觸
4.1 業(yè)務(wù)引導(dǎo)技術(shù)方向 - 國內(nèi)和國際不同的實踐
技術(shù)服務(wù)業(yè)務(wù),是行內(nèi)比較普遍的認(rèn)知,合乎邏輯。但當(dāng)我們看到細(xì)節(jié)的時候,會發(fā)現(xiàn)國際和國內(nèi)的明顯不同。
中國和歐美IT技術(shù)開發(fā)既有相似處,比如美國為聯(lián)邦政府提供IT軟件服務(wù)也有類似中國的認(rèn)證流程,本著對納稅人負(fù)責(zé)的態(tài)度,嚴(yán)謹(jǐn)?shù)菜腊澹瑫r政府也常常是重要的金主甲方。不同點是,中國政府可以集中力量辦大事,遠(yuǎn)的高鐵,近期的芯片和新能源汽車,政府的方向性是明確清晰的。國際上,技術(shù)革新的大方向常常是技術(shù)公司和商業(yè)引導(dǎo)的,比如說Telsa/SpaceX的跨時代的突破,基本上沒有政府的引導(dǎo),更準(zhǔn)確的說是Telsa引導(dǎo)(游說)政府給以免稅政策。
具體到SQLite這個國家圖書館的“官方”認(rèn)證,說起來很有力,其實對于SQLite的成敗影響力就非常有限了。
一點感想吧,如果讀者的產(chǎn)品計劃進(jìn)軍國際市場,個人建議:
? 業(yè)務(wù)銷售人員要積極關(guān)注政府合規(guī)認(rèn)證;
? 技術(shù)開發(fā)人員專注設(shè)計前沿和產(chǎn)品實現(xiàn),切忌迎合。
4.2 描述產(chǎn)品的片兒湯話
產(chǎn)品常見的商業(yè)口號同質(zhì)化嚴(yán)重,基本上是快好省的衍生詞匯。
比如:"與 MySQL 和 PostgreSQL 兼容的關(guān)系數(shù)據(jù)庫,專為云而打造。性能和可用性與商用數(shù)據(jù)庫相當(dāng),成本只有其 1/10" , 2022年9月13日摘抄AWS Aurora 官網(wǎng)。如果是某個領(lǐng)域的先行者,比如Aurora,倒也罷了,因為是采用了某個突破性新技術(shù),可以擔(dān)當(dāng)快好省的評價。之后的追隨者,也如此定位宣傳,就有些東施效顰的偷懶和尷尬了。
PPT/膠片是技術(shù)產(chǎn)品人員常常使用的工具,評價一個材料的好壞,用心與否,可以把PPT中的產(chǎn)品名字蓋住,用模版的把顏色和字符統(tǒng)一一下,是否還能看出是哪一個大廠的哪一款產(chǎn)品?粗略估計,80%的產(chǎn)品描述過不了此關(guān)。
5. 八卦篇
阿波羅登月
提到小而精的經(jīng)典程序,必須跪拜一下阿波羅登月計劃中的AGC系統(tǒng),提供登月過程中航天器的制導(dǎo)、導(dǎo)航和控制。全部系統(tǒng)安裝在72KB的只讀ROM里(頭條APP的2千分之一),運行空間是4KB(byte) RAM(約為本篇Markdown文本的四分之一)。
友情奉送Github打卡地址,膜拜一下阿波羅 11 號導(dǎo)航軟件AGC中指令模塊(Comanche055)和登月模塊(Luminary099)原碼。
當(dāng)然再牛的軟件都有bug, 如果論如果論驚險性,AGC的1202肯定是歷史前10的。有興趣的同學(xué),可以移步[代碼1202,50年前的阿波羅登月給自動駕駛汽車留下寶貴一課],或英文原版[Apollo 11's Infamous Landing Error Code 1202 Offers Earthly Lessons For Self-Driving Cars]。
花無百日紅
諷刺的是SQLite當(dāng)年并沒有被GD采納,因為決策者還是保守的使用成熟且風(fēng)險小的Informix。
SQLite的設(shè)計也沒有考慮到現(xiàn)在強(qiáng)烈的端(手機(jī))和云之間的數(shù)據(jù)協(xié)同/同步需求。加上SQLite不隸屬于大廠,商業(yè)競爭過程中漸漸被同類產(chǎn)品壓迫。比如Google大力扶持的firebase 端云系統(tǒng),MongoDB并購了Realme也是為此服務(wù)。業(yè)界比較成功的云原生的時序數(shù)據(jù)庫TDengine也在接口了除SQLite以外的多個端側(cè)數(shù)據(jù)采集模塊。
隨著手機(jī)市場的成熟,IoT和智能汽車的發(fā)展,SQLite的強(qiáng)力競爭者將越來越多。SQLite步入軟件的中年危機(jī),我們拭目以待,期望它老而彌堅吧。
6. 信息來源
由于平臺對應(yīng)引用鏈接的限制,無法準(zhǔn)確標(biāo)注信息來源。需要了解,請參考原文
審核編輯 黃昊宇
-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3893瀏覽量
65704 -
SQlite
+關(guān)注
關(guān)注
0文章
81瀏覽量
16295
發(fā)布評論請先 登錄
SEGGER emFile支持大型數(shù)據(jù)庫
嵌入式和單片機(jī)的區(qū)別?一文簡單明了的給你講透兩者的技術(shù)本質(zhì)!

樹莓派CM5可以用來做什么?工業(yè)控制的瑞士軍刀!

樹莓派5 + Hailo AI加速器:工業(yè)級數(shù)值數(shù)據(jù)處理實戰(zhàn),打通SQLite與機(jī)器學(xué)習(xí)全鏈路

深入HarmonyOS NEXT開發(fā)中的ArkData操作SQLite數(shù)據(jù)庫
適用于SQLite的dbExpress數(shù)據(jù)庫驅(qū)動程序
SQLite數(shù)據(jù)訪問組件

點火器的種類及其特點介紹 電子點火器與傳統(tǒng)點火器的比較
華為云 Flexus 云服務(wù)器 X 實例之 openEuler 系統(tǒng)下部署 SQLite 數(shù)據(jù)庫瀏覽器 sqlite-web

云數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?
什么是嵌入式操作系統(tǒng)?
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

評論