正當(dāng)SQL和no-SQL各自的擁躉們討論他們各自的優(yōu)缺點(diǎn)時(shí),我所遇到的一些情況讓我不自覺發(fā)問:難道就沒有第三選擇嗎?
有些時(shí)候,我連關(guān)系數(shù)據(jù)庫都不想用。
這種情況是,用戶數(shù)據(jù)就是一些獨(dú)立文檔或表單,而且這些數(shù)據(jù)并沒有和平行的其它數(shù)據(jù)有邏輯上的關(guān)聯(lián)。而這種情況下,關(guān)系數(shù)據(jù)庫似乎不是必須的選擇。既然不是一定要用數(shù)據(jù)庫,那么我們是否可以打開思路,想象一些更適合我們業(yè)務(wù)需求的更好的場景。
我最先想到了Git。
下面舉幾個(gè)例子說明使用Git做為服務(wù)器的好處。
GIT的好處
1)Blog
用戶寫的文章可以在服務(wù)端查詢到每一次的版本變化,而存數(shù)據(jù)庫要么太冗余,要么會(huì)丟掉版本信息。
2)51job
用戶的簡歷的修改在后臺(tái)都記錄。
3)金融貸款申請(qǐng)
用戶提交的任何數(shù)據(jù)都有記錄,特別是金融類應(yīng)用一般都強(qiáng)調(diào)WORM(Write Once Read Many),Git更是天生的完美支持。
4)Git同步
備份都是非常的成熟,方便。
5)Git有成熟的客戶端庫和通信協(xié)議支持
當(dāng)我開始想demo一下,去Github上找點(diǎn)素材的時(shí)候,才發(fā)現(xiàn)我的想法一點(diǎn)都不新奇。上面各種Git的客戶端,瀏覽器上運(yùn)行的庫都有,我列出幾個(gè)給大家參考一下,看看會(huì)不會(huì)有些靈感。
GIT客戶端
JS客戶端JS-Git(2790?stargazers)
Java客戶端?gitblit(968?stargazers)
https://github.com/search?utf8=%E2%9C%93&q=git+language%3AJava&type=Repositories&ref=searchresults
Objective-C客戶端GitUp?(4772?stargazers)
當(dāng)然,一個(gè)服務(wù)端應(yīng)用肯定不止是存儲(chǔ)客戶端的數(shù)據(jù)而已,它一定還要包含以下幾個(gè)方面的功能。
其他功能
1)鑒別用戶,并授權(quán)
Bitbucket,Gitlab對(duì)這一塊的支持都是完美的,也支持單點(diǎn)登錄,可以無修改的接入現(xiàn)有業(yè)務(wù)系統(tǒng)。
2)對(duì)客戶端提交的數(shù)據(jù)做出一些判斷,并可能觸發(fā)一些邏輯業(yè)務(wù)
Bitbucketet和Gitlab就有完整的API接口,可以支持你做幾乎所有的功能擴(kuò)展,包括條件觸發(fā),定時(shí)任務(wù)等。
GitLab?APIhttp://doc.gitlab.com/ce/api/
Bitbucket??APIhttps://developer.atlassian.com/bitbucket/server/docs/latest/reference/java-api.html
3)在業(yè)務(wù)擴(kuò)大的時(shí)候能支持?jǐn)U展和性能的優(yōu)化
在我們前面預(yù)設(shè)的幾個(gè)場景下,Git的本地repo都將大顯身手。
遺憾的是服務(wù)端的Git查詢似乎永遠(yuǎn)沒有redis,mongoDB查詢快,但ParallelGit(https://github.com/beijunyi/ParallelGit) 可以解決你這方面的憂慮。
結(jié)語
我可以預(yù)見,如果真要開始做這樣一種實(shí)踐,還會(huì)遇到各種各樣未曾想到的坑。然而值得安慰的是,前面已經(jīng)有無數(shù)人趟了過去,并留下了寶貴的經(jīng)驗(yàn),并形成了一股從SQL到no-SQL到no-no-SQL的潮流。
本文編譯:劉國平(點(diǎn)融黑幫),資深軟件開發(fā)工程師,跨平臺(tái)開發(fā)框架hero作者,是最早的一批移動(dòng)開發(fā)者, 同時(shí)對(duì)android,H5,NodeJS等技術(shù)比較關(guān)注。