參考文章:
1.效能無法預估:關聯型的資料模型定義了高度結構化的資料結構,以及對這些結構之間關係的嚴格定義。在這樣的資料模型上執行的查詢操作會比較侷限,而且可能會導致複雜的資料遍歷操作。資料結構的複雜性及查詢的複雜性,會導致系統產生如下的一些限制: 複雜導致不確定性。使用sql的乙個問題就是計算某個查詢的代價或者產生的負載幾乎是不可能的。查詢優化器通常比一般的資料庫使用者更聰明,但是有時候由於沒有充足的資訊或者系統模型過於簡單,也會導致查詢優化器不能得出最有效的操作方式。
2.資料模型太嚴格,對程式設計師不友好:對乙個問題建模有很多種方式。其中關聯型的資料模型是非常嚴格的一種:表結構的定義規定了表中每一行資料的儲存內容。如果你的資料結構化並沒有那麼強,或者對每一行資料的要求比較靈活,那可能關聯型的資料模型就太過嚴格了。類似的,應用層的開發人員可能對關聯型的資料結構並不滿意。比如很多應用程式是用物件導向的語言寫的,資料在這些語言中通常是以列表、佇列或集合的形式組織的,程式設計師們當然希望他們的資料儲存層也能和應用層的資料模型一致。
3.資料量過大會面臨新的要求:當資料量增長到一台機器已經不能容納,我們需要將不同的資料表分布到不同的機器。而為了避免在不同機器上的資料表在進行聯合查詢時需要跨網路進行。我們必須進行反正規化的資料庫設計,這種設計方式要求我們把需要一次性查詢到的資料儲存在一起。這樣做使得我們的系統變得就像乙個主鍵查詢系統一樣,於是我們開始思考,是否有其它更適合我們資料的資料模型。
1.通過在資料層捨棄一些複雜的操作來使效能可以預估:nosql系統捨棄了一些sql標準中的功能,取而代之的是一些簡單靈活的功能。nosql 的構建思想就是盡量簡化資料操作,盡量讓操作的執行效率可預估。在很多nosql系統裡,複雜的操作都是留給應用層來做的,這樣的結果就是我們對資料層進行的操作得到簡化,讓操作效率可預知。 nosql系統不僅捨棄了很多關聯式資料庫中的操作。
2.使用更加寬鬆的資料模型和操作模型:資料庫的資料模型指的是資料在資料庫中的組織方式,資料庫的操作模型指的是訪問這些資料的方式。通常資料模型包括關係模型、鍵值模型以及各種圖結構模型。操作語言可能包括sql、鍵值查詢及mapreduce等。nosql通常結合了多種資料模型和操作模型,提供了不一樣的架構方式。
3.注重效能和擴充套件性,而非事務機制:nosql
可能不具備關聯式資料庫以下的一些特性:比如通常銀行系統中要求的事務保證,一致性保證以及資料可靠性的保證等。事務機制提供了在執行多個命令時的all-or-nothing保證。一致性保證了如果乙個資料更新後,那麼在其之後的操作中都能看到這個更新。可靠性保證如果乙個資料被更新,它就會被寫到持久化的儲存裝置上(比如說磁碟),並且保證在資料庫崩潰後資料可恢復。 通過放寬對上述幾點特性的要求,nosql系統可以為一些非銀行類的業務提供以效能換穩定的策略。
而同時,對這幾點要求的放寬,又使得nosql系統能夠輕鬆的實現分片策略,將遠遠超出單機容量的大量資料分布在多台機器上的。
1. google的bigtable[cdg+06]提出了一種很有趣的資料模型,它將各列資料進行排序儲存。資料值按範圍分布在多台機器,資料更新操作有嚴格的一致性保證。
2. amazon的dynamo[dhj+07]使用的是另外一種分布式模型。dynamo的模型更簡單,它將資料按key進行hash儲存。其資料分片模型有比較強的容災性,因此它實現的是相對鬆散的弱一致性:最終一致性。
實際上在現實中這些思想經常是混搭使用的。比如像hbase及其它一些nosql系統他們在設計上更接受bigtable的模型,而像voldemort 系統它就和dynamo更像。同時還有像cassandra這種兩種特性都具備的實現(它的資料模型和bigtable類似,分片策略和一致性機制和dynamo類似)。
Hadoop生態系統
摘要 介紹hadoop生態系統,從hadoop生態系統有什麼成員,成員能做什麼和hadoop生態系統能夠提供大資料問題解決方案兩方面來認識。hadoop生態圖,通俗地說,就是hadoop核心模組和衍生的子專案。一幅hadoop生態圖,讓我想到了兩個問題。問題一 hadoop生態系統包括哪些成員?每個...
Docker生態系統
docker是以docker容器為資源分割和排程的基本單位,封裝軟體的執行時環境.用於快速構建,發布,執行分布式應用的平台。docker的執行時容器的本質是程序.在linux中,通過namespace進行資源隔離,cgroups進行資源限制,使docker容器看上去像是乙個執行在宿主機中的虛擬機器....
SOA生態系統
richard veryard在他的最近的一篇日誌裡提到 soa世界終於開始跟上一點生態系統的思想了.以生物性的方式來建立業務和軟體服務。根據richard的說法,這一方式與解決方案驅動的soa方式截然不同。在這種情況下,不是基於特定的解決方案來定義服務,而是基於它們所屬於的生態系統 可與 自頂向下...