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

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

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

深入HarmonyOS NEXT開發(fā)中的ArkData操作SQLite數(shù)據(jù)庫
儀表機(jī)房和配電室應(yīng)配備什么類型的滅火器?
適用于SQLite的dbExpress數(shù)據(jù)庫驅(qū)動(dòng)程序
SQLite數(shù)據(jù)訪問組件

點(diǎn)火器的種類及其特點(diǎn)介紹 電子點(diǎn)火器與傳統(tǒng)點(diǎn)火器的比較
華為云 Flexus 云服務(wù)器 X 實(shí)例之 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ù)庫

評(píng)論