資料庫的橫向擴展
1. Mysql資料庫橫向擴展和縱向擴展的區別哪位大神有MySql架構之類的電子書籍,能發給我一份么跪謝
橫向是在表寬度上做優化,將部分表進行折分
縱向是在表數據深度上做優化,將數據進行折分
2. 常用的關系型資料庫有哪些
Nosql的全稱是Not Only Sql,這個概念很早就有人提出。Nosql指的是非關系型資料庫,而我們常用的都是關系型資料庫。就像我們常用的mysql,oralce、sqlserver等一樣,這些資料庫一般用來存儲重要信息,應對普通的業務是沒有問題的。但是,隨著互聯網的高速發展,傳統的關系型資料庫在應付超大規模,超大流量以及高並發的時候力不從心。而就在這個時候,Nosql應運而生。
上面說的是NOSQL 的定義.Nosql和關系型資料庫的區別,這里我說明一比較重要的區別。
存儲格式: 關系型資料庫是表格式的,存儲在表的行和列中。他們之間很容易關聯協作存儲,提取數據很方便。而Nosql資料庫則與其相反,他是組合在一起。通常存儲在數據集中,就像文檔、鍵值對或者圖結構。舉個例子,例如在游戲裡面玩家的背包數據,我們都知道一個游戲裡面的道具是很多,而且不確定玩家什麼時候獲取什麼道具,這個時候如果想在關系資料庫裡面存儲數據,這個表怎麼建立就是一個很大的問題,如果你把所有的道具ID 當做表頭 ,那麼後續每增加一個道具,就需要修改這張表。如果你的表結構是 :
用戶ID|道具ID|道具數量|道具特殊屬性
那麼可以想像一下 這張表隨著用戶的增多會變的多麼的龐大。所以這個時候我們就需要一個能直接像操作玩家對象一樣的資料庫,這里比較代表性的就是mongo ,通過這個我們就可以看出nosql 資料庫更適合存儲結構不確定的數據。
存儲擴展:這可能是兩者之間最大的區別,關系型資料庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機。因為數據存儲在關系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服。雖然有很大的擴展空間,但是最終會達到縱向擴展的上限。而Nosql資料庫是橫向擴展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通資料庫伺服器來分擔負載。
上面的的例子已經說明了這個問題。在現代互聯網時代大家都是希望能橫線擴展服務。這樣付出的代價是最小的。
對於上面關系型資料庫和NOSQL 資料庫的區別其實還有很多。我相信大家在用的都會感覺到。上面列出的只是我感覺區別最大的。
那麼NOSQL 這么好用,是不是都可以用了呢,顯示不是這樣,NOSQL 對於聚合查詢顯示不是他的強項。這個時候就需要關系型資料庫。我是這樣建議,對於結構統一,應該存儲於關系型資料庫,對於結構不統一的可以存儲到NOSQL資料庫例如mongo 。但是這個不是絕對的,在實際的項目的開發過程中,需要根據的自己的業務,仔細揣摩一下,做好最合適的劃分。
常見關系型資料庫通常有SQL Server,Mysql,Oracle等。主流的Nosql資料庫有Redis,Memcache,MongoDb。大多數的關系型資料庫都是付費的並且價格昂貴,成本較大,而Nosql資料庫通常都是開源的。在互聯網行業用大多也是免費的MYSQL(這里偷笑一下)。
在實際的項目中大家的項目都是如何選擇的呢?大家可以關注我,私信或者在評論區留言。
3. 如何對SQL Server資料庫進行橫向擴展
一般人們會選擇縱向擴展(scale up)SQL Server資料庫,而非橫向擴展(scale out)。縱向擴展很容易:增加硬體、處理能力、內存、磁碟和提高網路速度。其原理就是仍然在一台伺服器上運行資料庫,但是增加了伺服器的處理能力和資源。這種方法很昂貴,但是非常簡單直接。
採用雲技術
有時候,最簡單的方法就是將問題交由其他人處理。微軟的Windows Azure雲服務包含一個基於雲的SQL Server版本SQL Azure.這在技術上並非真正意義的橫向擴展,因為它是一種無限縱向擴展方法。所以,轉移到Azure並不需要對您的應用程序進行大改動。實際上,您只需要將應用程序遷移到SQL Azure,然後支付存儲、處理和數據傳輸費用。這些都是收費服務,但是您不需要再擔心擴展問題。
復制
SQL Server原生復制是一種支持橫向擴展的解決方案,與資料庫的創建和使用方式有關。您只需要在多台伺服器上復制多個資料庫副本,然後將不同的用戶指向各台伺服器。這種方法通常最適合支持地理位置分散的用戶,如亞洲辦公室的用戶使用伺服器1,而北美辦公室的用戶則使用伺服器2.每一台伺服器都擁有完整的數據副本,並且會復制夥伴伺服器的所有修改。
這種方法不支持自動負載均衡,並且最適合用在用戶固定只使用一部分數據的情況。換而言之,如果亞洲用戶只需要編輯與他們辦公室相關的數據--例如,主要是亞洲客戶的信息,那麼復制能夠保證其他資料庫副本也包含這些記錄的副本。如果所有用戶都需要編輯完整的數據集,那麼復制就變得有一些復雜,因為SQL Server必須在支持用戶的同時,編輯位於不同伺服器的同一個數據。
SQL Server的合並復制能夠處理這種沖突,但是您必須進行一些自定義合並編程,這意味著您的開發人員必須開發一些演算法,確定用戶並發訪問數據時誰獲取編輯許可權。客戶應用程序也需要增加編程;使它們不僅向資料庫提交數據修改,也要循環檢查這些修改是否被其他並發用戶重寫。用戶也需要重新培訓,因為客戶端應用程序可能會提示:"您正在編程的數據已經發生變化。您需要重新檢查,確定您的編輯是否仍然有效。"
聯合資料庫
另一個重要的橫向擴展方法是聯合。通過這種方法,您可以將資料庫劃分到多台伺服器上。垂直分割將同一個表的不同行保存到不同的伺服器上。同時,地理分區是最常用的方法:將所有亞洲數據記錄保存在一台伺服器上,而所有歐洲數據則保存在另一台伺服器上。這種方法不同於整體復制:每一個位置的伺服器都不具備完整的資料庫,而只擁有該位置的數據。通過實現一種SQL Server分布式分區視圖而形成完整的表,用戶就可以瀏覽一個"聯合"或組合的數據視圖。水平分割則將表的欄位保存在不同的伺服器上,因此各台伺服器一起協作構成組合的表。
這些資料庫的創建並不簡單,其中涉及一種整體操作。您需要掌握關於數據訪問和使用的詳細信息,才能夠實現正確的部署。此外,您還需要一位SQL Server資料庫架構師,他應該全面理解這些技術,分析您的業務情況,並且能夠正確地創建這些組件。
在一些情況中,實現這種橫向擴展對客戶端應用程序的改動很小。對於本身在設計上大量使用視圖和存儲過程進行數據訪問的應用程序,更是如此。因為這些元素只是是在後台抽象,在客戶端上不會發生變化。但是,這些應用程序並不常見;通常,實現橫向擴展都需要修改客戶端程序,使客戶端與後台結構分離。
橫向擴展並不簡單
毫無疑問,實現SQL Server橫向擴展非常復雜--這也是Azure等雲資料庫系統流行的原因之一。此外,有一些第三方供應商能夠幫助實現橫向擴展技術,而不需要完全依賴SQL Server的原生特性。您需要自己下功夫了解這些方法,理解數據訪問和使用方法,這樣才能夠選擇最符合您要求的方法。
4. 大數據的存儲
⼤數據的存儲⽅式是結構化、半結構化和⾮結構化海量數據的存儲和管理,輕型資料庫⽆法滿⾜對其存儲以及復雜的數據挖掘和分析操作,通常使⽤分布式⽂件系統、No SQL 資料庫、雲資料庫等。
結構化、半結構化和⾮結構化海量數據的存儲和管理,輕型資料庫⽆法滿⾜對其存儲以及復雜的數據挖掘和分析操作,通常使⽤分布式⽂件系統、No SQL 資料庫、雲資料庫等。
1 分布式系統:分布式系統包含多個⾃主的處理單元,通過計算機⽹絡互連來協作完成分配的任務,其分⽽治之的策略能夠更好的處理⼤規模數據分析問題。
主要包含以下兩類:
1)分布式⽂件系統:存儲管理需要多種技術的協同⼯作,其中⽂件系統為其提供最底層存儲能⼒的⽀持。分布式⽂件系統 HDFS 是⼀個⾼度容錯性系統,被設計成適⽤於批量處理,能夠提供⾼吞吐量的的數據訪問。
2)分布式鍵值系統:分布式鍵值系統⽤於存儲關系簡單的半結構化數據。典型的分布式鍵值系統有 Amazon Dynamo,以及獲得⼴泛應⽤和關注的對象存儲技術(Object Storage)也可以視為鍵值系統,其存儲和管理的是對象⽽不是數據塊。
2 Nosql 資料庫:關系資料庫已經⽆法滿⾜ Web2.0 的需求。主要表現為:⽆法滿⾜海量數據的管理需求、⽆法滿⾜數據⾼並發的需求、⾼可擴展性和⾼可⽤性的功能太低。No SQL 資料庫的優勢:可以⽀持超⼤規模數據存儲,靈活的數據模型可以很好地⽀持 Web2.0 應⽤,具有強⼤的橫向擴展能⼒等,典型的 No SQL 資料庫包含以下⼏種:
3 雲資料庫:雲資料庫是基於雲計算技術發展的⼀種共享基礎架構的⽅法,是部署和虛擬化在雲計算環境中的資料庫。
5. 傳統關系型資料庫與MapRece的比較中,橫向擴展的非線性和線性是怎樣的含義
線性擴展的意思,簡單的理解,就是:
獲得的擴展能力和增加的資源成比例。
例如:原有2個tasktracker節點,每個可以運行20個task。現在計算能力不夠了,新增加一個節點,資源相當於增加了50%,那麼,你獲得的擴展了的計算能力,也增加到原來的150%。這是MapRece的擴展能力。
對於傳統關系型資料庫來說,都是單節點的,例如原來用一個mysql來處理,當你覺得計算能力不夠的時候,你沒辦法說我新增一台同樣配置的機器,就把計算能力提高到原來的200%。一般需要更換原來的硬體,才能提高計算能力,那樣就是不是橫向擴展了。