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