Peter+Wayner
編譯 楊勇
數(shù)據(jù)庫(kù)多年來一直是由行和列組成的表格,現(xiàn)在看來還會(huì)這樣下去。
什么是數(shù)據(jù)庫(kù)?很久以前,這很簡(jiǎn)單。數(shù)據(jù)庫(kù)是一個(gè)現(xiàn)代的Bob Cratchit(狄更斯筆下的人物),把數(shù)據(jù)放在由非常直的列組成的表格中,每一列的每一行都有一個(gè)輸入。漫長(zhǎng)而無盡的矩形顯示的信息會(huì)一直延伸下去。
關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)成為現(xiàn)代計(jì)算的基礎(chǔ)。絕大多數(shù)網(wǎng)站都只是涂抹在SQL之上的一堆CSS。能讓我們感到有所不同的不過是在一張大表中又增加了一行。
隨著開發(fā)人員逐漸意識(shí)到并不是所有的東西都適合放到一張簡(jiǎn)單的表中,人們對(duì)大矩陣式表格的熱情正在慢慢消退。而且開發(fā)人員非常聰明,熱衷于為每一需求尋找解決方案,他們開始創(chuàng)建更好、更新的方式來存儲(chǔ)信息。過去的幾年里,我們存儲(chǔ)數(shù)據(jù)的其他機(jī)制出現(xiàn)了爆炸式的增長(zhǎng)。
這些非常棒的新選擇還是數(shù)據(jù)庫(kù)嗎?還是要把數(shù)據(jù)放到一些大的矩陣中才能成為數(shù)據(jù)庫(kù)嗎?有些人喜歡用“數(shù)據(jù)存儲(chǔ)”這個(gè)詞來區(qū)分現(xiàn)代機(jī)制,因?yàn)椤皵?shù)據(jù)庫(kù)”這個(gè)詞在我們的頭腦中已經(jīng)根深蒂固,認(rèn)為它就是一種舊的表結(jié)構(gòu)。讓我們把這些留給哲學(xué)家們吧。我們只是輸入數(shù)據(jù),然后得到答案。
這里介紹了以新形式和新表格重塑數(shù)據(jù)庫(kù)的8種方法。
GPU計(jì)算
很久以前,開發(fā)了視頻卡來為孩子們的游戲描繪出精美的場(chǎng)景,而現(xiàn)在所謂的圖形處理單元能夠進(jìn)行大量的非圖形處理任務(wù)。數(shù)據(jù)搜索只是這些處理單元能夠勝任的非圖形操作任務(wù)之一。挖掘大量的數(shù)據(jù)來尋找匹配,其本質(zhì)上就是并行操作,包括了很多重復(fù)數(shù)百萬(wàn)次的基本的工作(測(cè)試等式)。因此,把工作交給GPU的數(shù)千個(gè)處理器,完成起來就會(huì)非常簡(jiǎn)單。
最成功之處不是在于回答每一查詢(顯然要快很多倍),而是在準(zhǔn)備工作中,因?yàn)閹缀醪恍枰A(yù)處理。很多數(shù)據(jù)庫(kù)通過維護(hù)索引來節(jié)省時(shí)間,這實(shí)際上是針對(duì)每個(gè)可能搜索的預(yù)先計(jì)算結(jié)果。如果這個(gè)索引損壞了或者被破壞了,重建它可能需要幾個(gè)小時(shí)、幾天,甚至幾個(gè)月的時(shí)間。不過,如果數(shù)據(jù)可以放在GPU的內(nèi)存中,通常不需要索引就能夠得到數(shù)據(jù)。如果數(shù)據(jù)變化很快,大部分索引從未使用過,那么跳過預(yù)處理就能夠提高效率。
非易失性存儲(chǔ)器(NVRAM)
程序員50年前小試牛刀的時(shí)候就很容易做到這一點(diǎn)。他們不必采用精心設(shè)計(jì)的協(xié)議來處理RAM和硬盤之間的數(shù)據(jù),以確保一致性。這是因?yàn)楫?dāng)時(shí)的記憶體是鐵芯,當(dāng)電源關(guān)閉時(shí)數(shù)據(jù)并沒有被清除。這些好時(shí)光可能很快又會(huì)回來,因?yàn)樾酒圃焐陶谟懻撚肗VRAM,即非易失性存儲(chǔ)器來取代RAM。
對(duì)于數(shù)據(jù)庫(kù)程序員來說,這極大的改變了游戲規(guī)則,因?yàn)樗麄冏畲蟮奶魬?zhàn)(甚至是他們能繼續(xù)工作下去的最大原因)正在消失。有些人建議,數(shù)據(jù)庫(kù)可以更快一些,因?yàn)闀?huì)話語(yǔ)義能更簡(jiǎn)單些。而有些人的想法則是在數(shù)據(jù)寫入介質(zhì)之后構(gòu)建恢復(fù)日志,而不是在寫入之前。
沒有人知道什么時(shí)候能塵埃落定。如果人們不再需要永久記錄,他們還會(huì)使用數(shù)據(jù)庫(kù)嗎?還是因?yàn)樾枰阉骱退饕俅问褂脭?shù)據(jù)庫(kù)?需要重新思考所有的算法和所有的架構(gòu)。今后未來十年左右,我們會(huì)知道使用NVRAM的最好方式。
擴(kuò)展SQL
當(dāng)NoSQL開始大規(guī)模應(yīng)用的時(shí)候,一個(gè)很大的特點(diǎn)是能夠把您的數(shù)據(jù)存儲(chǔ)擴(kuò)展到多個(gè)節(jié)點(diǎn)上。像Cassandra和MongoDB這樣的NoSQL數(shù)據(jù)庫(kù),看起來具有所有大規(guī)模存儲(chǔ)的優(yōu)點(diǎn),意味著人們可能會(huì)放棄以前習(xí)慣了的SQL環(huán)境。
在現(xiàn)實(shí)中,這也不需要付出什么代價(jià)。雖然前期很容易在大型數(shù)據(jù)庫(kù)中進(jìn)行一些試驗(yàn)——因?yàn)樯釛壛薙QL的所有負(fù)擔(dān),但卻不能解釋SQL為什么不能在大規(guī)模運(yùn)行的多臺(tái)機(jī)器上正常工作。事實(shí)上,Oracle這樣的企業(yè)已經(jīng)做了很多年。
最新的大型數(shù)據(jù)庫(kù)允許您運(yùn)用所有SQL知識(shí),方便地使用分布在大集群上的一組數(shù)據(jù)。例如,CockroachDB提供了一個(gè)標(biāo)準(zhǔn)的SQL查詢引擎,可以訪問多個(gè)節(jié)點(diǎn)上復(fù)制的數(shù)據(jù),并能夠保證ACID。是的,您需要為實(shí)現(xiàn)數(shù)據(jù)一致性的基本支持而付一些費(fèi)用,但比您預(yù)期的少很多。
地理空間數(shù)據(jù)庫(kù)
傳統(tǒng)的數(shù)據(jù)庫(kù)是建立在一維數(shù)據(jù)集上的,不支持含有地理信息的二維坐標(biāo)。您可以進(jìn)行模擬,使用標(biāo)準(zhǔn)數(shù)據(jù)庫(kù),參照地理坐標(biāo)來完成基本任務(wù)。如果您一定要把經(jīng)度和緯度放在不同的列中,那么并不難搜索由一系列經(jīng)度和緯度定義的框架中的所有行。但是,一旦您想超越這個(gè)基本框架,標(biāo)準(zhǔn)SQL查詢就無能為力了。
地理空間數(shù)據(jù)庫(kù)增加了一些額外的功能,簡(jiǎn)化了在二維空間中的搜索、排序和交叉。例如,空間索引一般通過在坐標(biāo)空間上添加一個(gè)網(wǎng)格來進(jìn)行工作,以便更快地搜索二維和三維環(huán)境中相鄰的行。
這些索引支持使用“包含”、“重疊”、甚至“觸摸”等操作以及由多邊形定義的集合來編寫查詢。所有這一切都使得對(duì)現(xiàn)實(shí)世界的推理更有效。
圖形數(shù)據(jù)庫(kù)
表是很多數(shù)據(jù)結(jié)構(gòu)很好的存儲(chǔ)庫(kù),但卻不適合對(duì)一個(gè)巨大的、新興的數(shù)據(jù)結(jié)構(gòu)進(jìn)行建模,這一數(shù)據(jù)結(jié)構(gòu)推動(dòng)了互聯(lián)網(wǎng)網(wǎng)絡(luò)過去10年的發(fā)展。當(dāng)所謂的“社交圖”爆發(fā)時(shí),我們的計(jì)算機(jī)中有越來越多的節(jié)點(diǎn),并在它們之間建立了鏈接。節(jié)點(diǎn)之間的鏈接通常比其中的數(shù)據(jù)更重要。當(dāng)然,很容易在經(jīng)典關(guān)系型數(shù)據(jù)庫(kù)中存儲(chǔ)和檢索一對(duì)節(jié)點(diǎn)之間的鏈接,但卻難以進(jìn)行更復(fù)雜的查詢。在一個(gè)友誼網(wǎng)絡(luò)中,Bob經(jīng)過兩跳或者三跳就能到達(dá)Chris嗎?Mary在和她的一個(gè)朋友約會(huì)嗎?
圖形數(shù)據(jù)庫(kù)更容易進(jìn)行這樣的查詢。由于查詢知道怎樣查找鏈接指定的鄰域,因此,不會(huì)沒完沒了的去查找表。Neo4J、OrientDB和DataStax等工具便是眾多選擇中的一些實(shí)例。它們也有自己的查詢語(yǔ)言。
云數(shù)據(jù)庫(kù)
最大的變化之一在于我們?cè)鯓淤?gòu)買數(shù)據(jù)庫(kù)軟件。過去,我們購(gòu)買自己的機(jī)器,簽署許可協(xié)議,在我們自己的機(jī)器上運(yùn)行軟件。而現(xiàn)在,云公司提供服務(wù),把數(shù)據(jù)存儲(chǔ)在我們看不見也摸不著的地方。他們只是說,當(dāng)我們想要的時(shí)候,就會(huì)有數(shù)據(jù)。endprint
優(yōu)點(diǎn)是顯而易見的,不需要維護(hù)服務(wù)器,也不需要放置服務(wù)器的機(jī)房。沒有必要擔(dān)心許可、配置或者安裝補(bǔ)丁,讓別人去處理這些頭痛的問題。而且解決方案也很便宜——特別是如果您沒有存儲(chǔ)大量數(shù)據(jù)的話,服務(wù)通常按字節(jié)收費(fèi)。
但也有風(fēng)險(xiǎn)。其他人能訪問數(shù)據(jù)嗎?服務(wù)器是否受到保護(hù),不受電源浪涌、閃電風(fēng)暴或者洪水的影響?數(shù)據(jù)是否備份到一個(gè)可信的異地位置?您不得不信任云供應(yīng)商所做的一切。
谷歌、微軟和亞馬遜等主要的云服務(wù)提供商提供了一長(zhǎng)串的數(shù)據(jù)庫(kù)服務(wù)。現(xiàn)在,Oracle、MongoDB和DataStax也支持在云中提供數(shù)據(jù)庫(kù)。
人工智能(AI)
有人說,人工智能只是最新一代的研究成果,剛剛從實(shí)驗(yàn)室里出來投入生產(chǎn)。如果是這樣的話,有一些新產(chǎn)品和解決方案都有著“機(jī)器學(xué)習(xí)”、“神經(jīng)網(wǎng)絡(luò)”和“深度學(xué)習(xí)”等這樣的流行詞。這些看起來不像數(shù)據(jù)庫(kù),但您的確向其填入數(shù)據(jù),問它們問題。為什么不是呢?人工智能解決方案的好消息是,您不需要知道您正在尋找什么。您可以揮動(dòng)您的手,問一些模糊的問題,比如“最有趣的”或者“最親密的”。沒有必要使用正確的關(guān)鍵字,也就是客服人員總是要求您寫下的那些煩人的參考數(shù)字。
壞消息是您不知道是否得到了正確的答案,因?yàn)槟鷽]有精確地設(shè)定問題。這篇博客真的是最有趣的嗎?谷歌之所以成功,最大的秘訣就是沒有絕對(duì)正確的答案。如果您要求個(gè)大概,那么沒有人會(huì)抱怨。
有太多太多的機(jī)器學(xué)習(xí)工具包。您可以問問您最喜歡的搜索引擎,“最有趣”的人工智能是什么。
區(qū)塊鏈(Blockchain)
區(qū)塊鏈這個(gè)詞涉及到比特幣復(fù)雜的經(jīng)濟(jì)和政治問題,但在所有關(guān)于貨幣的討論中,其基礎(chǔ)都是極其穩(wěn)定和實(shí)用的分布式數(shù)據(jù)存儲(chǔ)。每個(gè)人都有機(jī)會(huì)更新長(zhǎng)表中的數(shù)據(jù),每個(gè)人都可以分享答案。最令人興奮的是,每個(gè)人都可以分享相同的答案。這可能適合那些狂熱于比特幣的企業(yè)。
一些開發(fā)人員更進(jìn)一步,討論了“智能合同”,這是另一種說法,即數(shù)據(jù)庫(kù)中的信息是可信的,足以讓人們將其作為所有權(quán)之類的法律問題的基礎(chǔ)。您不能用一個(gè)普通的數(shù)據(jù)庫(kù)來做這件事,因?yàn)槿魏斡泄芾頇?quán)限的人都可以修改它。
但也有缺點(diǎn)。每個(gè)用戶必須有一個(gè)加密密鑰,所有的會(huì)話都必須經(jīng)過數(shù)字簽名。如果丟失或者忘記了密鑰,那些行中的數(shù)據(jù)會(huì)被永遠(yuǎn)凍結(jié)。如果密鑰被盜,那一切都完了。換句話說,區(qū)塊鏈?zhǔn)遣煌昝赖模葮?biāo)準(zhǔn)模型可靠。
R3、Ripple和IBM只是探索這一領(lǐng)域的眾多競(jìng)爭(zhēng)者中的三家企業(yè)。很多大銀行都有自己的內(nèi)部項(xiàng)目。它們自己還有比特幣和山寨幣公司,這也是生態(tài)支持系統(tǒng)的主要組成。
Peter Wayner是InfoWorld的特約編輯,他撰寫了16本各種主題的書籍,包括開源軟件、自動(dòng)汽車、增強(qiáng)隱私計(jì)算、數(shù)字交易和信息加密等。
原文網(wǎng)址:
http://www.infoworld.com/article/3226045/database/8-technologies-transforming-the-database.htmlendprint