天天看點

《解讀NoSQL》——2.1 保持元件簡單以促進重用

本節書摘來自異步社群出版社《解讀nosql》一書中的第2章,第2.1節,作者: 【美】dan mccreary(丹•麥克雷) , ann kelly(安•凱利),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

如果你和關系型資料庫打交道,那麼你應該知道它們是多麼複雜。一開始,它們是一個簡單的系統,當被請求時,從單一的平面檔案傳回一個被選擇的行即可。随着時間的遷移,它們需要管理不止一張表、執行連接配接操作、對查詢進行優化、複制事務、運作存儲過程、設定觸發器、保證安全性、維護索引等。對于這些複雜的問題,nosql系統另辟蹊徑,通過在網絡中建構簡單的分布式應用來滿足不同次元的需求。保持架構級别的元件簡單使得在不同的應用中可以重用這些元件,幫助開發人員了解和測試,而且應用的架構遷移也變得更容易。

nosql的觀點認為,簡單就是好的。建構一個應用時,并不需要在一個軟體中包含所有的功能,應用的功能可以被分發到多個nosql(或者sql)資料庫上完成,這些系統由許多簡單工具組成并具有簡單的接口和清晰定義的功能。nosql産品遵循的原則是做好幾件事。為了說明這一點,我們來看看系統是如何通過清晰定義的功能建構而成,并關注基于這些功能組合成新的功能是多麼地容易。

如果你對unix作業系統熟悉的話,你應該對unix管道的概念不陌生。unix管道是一組互相連接配接的程序,前一個程序的輸出正好是下一個程序的輸入。與 unix 管道類似,nosql 系統由許多協同工作的功能子產品構成。如圖2-1所示,這是一個由一些小功能通過unix管道連接配接用來統計書中出現·figure·單詞的次數。

《解讀NoSQL》——2.1 保持元件簡單以促進重用

圖2-1 unix管道是個複用一些簡單功能以實作新功能的例證。該圖顯示将一個目錄中的所有章節檔案連接配接起來并對所有章節的圖檔數量進行統計。通過使用unix管道,我們可以将3個簡單的指令拼接成一個字元串:連接配接(·cat·)、搜尋函數(·grep·)和單詞計數(·wc·)。沒有多餘的代碼,每一個函數接受前一個函數的輸出并進行處理

這個例子的顯著特點是通過鍵入 40 來個字元你就可以建立一個有用的函數。如果是在不支援unix風格函數的系統中,情況就困難得多。事實上,在原生xml資料庫上執行的查詢可能還會比這條指令更短,但這并不是通用的。

許多nosql系統都遵循利用協同工作的子產品化元件這一思想。為了取代單一的大型資料庫層,它們經常采用通過重新組合許多更加簡單的子產品的方法來滿足不同應用的需求。例如,某一個功能允許通過記憶體(或者是memcache)共享對象,另一個功能負責運作批處理作業(如mapreduce作業),還有一個功能負責存儲二進制文檔(以鍵值對的方式存儲)。我們注意到大多數unix管道的設計宗旨是在單一的處理器之上通過拼接線性的管道來達到傳輸面向行的資料流。而nosql的元件,盡管子產品化,卻不僅僅是一系列的線性管道元件。它們專注于那些常用于增強分布式web服務的高效的資料服務。nosql系統可以是文檔、消息、消息存儲、檔案存儲或者是通過通用的api提供基于rest、json或xml的web服務,它們還提供裝載、驗證、轉換和輸出海量資料的工具,而unix管道實際上是被設計成隻能在單處理器之上工作。

标準觀察:用來處理結構化資料的通用管道

關于nosql系統的簡單功能的概念将是反複出現的主題。哪怕是nosql系統不能在單一系統中滿足所有的需求,也要敢于建議使用或者真正去使用nosql系統。可以把它們看作是工具的集合,如果對它們的組合使用方法了解越多,它們會變得越有用。接下來,我們将來看到這個簡單的概念對于基于nosql的應用層的開發的重要性。