⑴ 分布式資料庫與資料庫集群的區別到底是什麼哪位高手幫忙解惑下~~~~~~~~~~跪求
(1)另外一位博主的觀點(http://blog.csdn.net/bluishglc/article/details/5483162)
博主有對他的表述有作一點修改補充,方便各位猿友明了他的意思。
簡單說,分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
例如:
如果一個任務由10個子任務組成,每個子任務單獨執行需1小時,則在一台伺服器上執行改任務需10小時。
採用分布式方案,提供10台伺服器,每台伺服器只負責處理一個子任務,不考慮子任務間的依賴關系,執行完這個任務只需一個小時。(這種工作模式的一個典型代表就是Hadoop的Map/Rece分布式計算模型)
而採用集群方案,同樣提供10台伺服器,每台伺服器都能獨立處理這個任務。假設有10個任務同時到達,10個伺服器將同時工作,10小後,10個任務同時完成,這樣,整身來看,還是平均1小時完成一個任務!(注意這里的任務和子任務的區別)
(2)知乎(https://www.hu.com/question/20004877)
這個猿友描述得很簡單明了:
分布式:一個業務分拆多個子業務,部署在不同的伺服器上
集群:同一個業務,部署在多個伺服器上
另外一位猿友從另外一個角度去表述:
集群是個物理形態,分布式是個工作方式。
這位猿友的描述也很簡潔,但是比較抽象:
按照我的理解,集群是解決高可用的,而分布式是解決高性能、高並發的
(3)網路(http://ke..com/view/4804677.htm、http://ke..com/view/3022776.htm)
集群:
集群是一組相互獨立的、通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的伺服器。集群配置是用於提高可用性和可縮放性。
分布式:
一種基於網路的計算機處理技術,與集中式相對應。由於個人計算機的性能得到極大的提高及其使用的普及,使處理能力分布到網路上的所有計算機成為可能。分布式計算是和集中式計算相對立的概念,分布式計算的數據可以分布在很大區域。
看完這些是不是有種似懂非懂的感覺?博主也是一樣!所以我們接下來繼續了解。
上面博主有說過自己有接觸過分布式服務框架Dubbo,那麼我們看看它為什麼說自己是分布式服務架構?(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%83%8C%E6%99%AF)
分布式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
此時,用於提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。
偶然之間,有發現據說「Git就是分布式版本控制系統」,為什麼它是分布式的呢?
Git就是分布式版本控制系統,對應的是集中式的版本控制如SVN。簡單的說,分布式的版本控制就是每個人都可以創建一個獨立的代碼倉庫用於管理,各種版本控制的操作都可以在本地完成。每個人修改的代碼都可以推送合並到另外一個代碼倉庫中。而像SVN這樣,只有一個中央控制,所有的開發人員都必須依賴於這個代碼倉庫。每次版本控制的操作也必須鏈接到伺服器才能完成。很多公司喜歡用集中式的版本控制是為了更好的控制代碼。如果個人開發,就可以選擇Git這種分布式的。
從一般開發者的角度來看,git有以下功能:
1、從伺服器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
2、在自己的機器上根據不同的開發目的,創建分支,修改代碼。
3、在單機上自己創建的分支上提交代碼。
4、在單機上合並分支。
5、把伺服器上最新版的代碼fetch下來,然後跟自己的主分支合並。
6、生成補丁(patch),把補丁發送給主開發者。
7、看主開發者的反饋,如果主開發者發現兩個一般開發者之間有沖突(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然後再由其中一個人提交。如果主開發者可以自己解決,或者沒有沖突,就通過。
8、一般開發者之間解決沖突的方法,開發者之間可以使用pull 命令解決沖突,解決完沖突之後再向主開發者提交補丁。
看了分布式服務框架Dubbo和分布式版本控制系統Git的這些描述後,細想一下,似乎和上面的「分布式:一個業務分拆多個子業務,部署在不同的伺服器上,集群:同一個業務,部署在多個伺服器上」的觀點些相似。
Dubbo將核心業務抽取出來,作為獨立的服務模塊,各個模塊之間只需要依賴介面,介面實現分離,那麼開發人員可以各自完成自己負責的服務模塊,最後完成一個完整的系統。他們的目標是完成一個系統,而各個子服務模塊相當於子業務。Git也類似。
事實上,分布式很多時候都開不了集群的,在Dubbo、Hadoop、Elasticsearch都有體現。
現在分布式概念可能我們相對比較清晰了,集群概念可能還比較模糊。另外,集群是如何跟分布式配合的呢,接下來我們繼續了解集群。
集群主要分成三大類 (高可用集群, 負載均衡集群,科學計算集群)
高可用集群( High Availability Cluster)
負載均衡集群(Load Balance Cluster)
科學計算集群(High Performance Computing Cluster)
1、高可用集群(High Availability Cluster)
常見的就是2個節點做成的HA集群,有很多通俗的不科學的名稱,比如」雙機熱備」, 「雙機互備」, 「雙機」。
高可用集群解決的是保障用戶的應用程序持續對外提供服務的能力。 (請注意高可用集群既不是用來保護業務數據的,保護的是用戶的業務程序對外不間斷提供服務,把因軟體/硬體/人為造成的故障對業務的影響降低到最小程度)。
2、負載均衡集群(Load Balance Cluster)
負載均衡系統:集群中所有的節點都處於活動狀態,它們分攤系統的工作負載。一般Web伺服器集群、資料庫集群和應用伺服器集群都屬於這種類型。
負載均衡集群一般用於相應網路請求的網頁伺服器,資料庫伺服器。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的伺服器,並把請求轉到這些伺服器上。從檢查其他伺服器狀態這一點上看,負載均衡和容錯集群很接近,不同之處是數量上更多。
3、科學計算集群(High Performance Computing Cluster)
高性能計算(High Perfermance Computing)集群,簡稱HPC集群。這類集群致力於提供單個計算機所不能提供的強大的計算能力。
高性能計算分類:
3.1、高吞吐計算(High-throughput Computing)
有一類高性能計算,可以把它分成若干可以並行的子任務,而且各個子任務彼此間沒有什麼關聯。象在家搜尋外星人( SETI@HOME – Search for Extraterrestrial Intelligence at Home )就是這一類型應用。
這一項目是利用Internet上的閑置的計算資源來搜尋外星人。SETI項目的伺服器將一組數據和數據模式發給Internet上參加SETI的計算節點,計算節點在給定的數據上用給定的模式進行搜索,然後將搜索的結果發給伺服器。伺服器負責將從各個計算節點返回的數據匯集成完整的 數據。因為這種類型應用的一個共同特徵是在海量數據上搜索某些模式,所以把這類計算稱為高吞吐計算。
所謂的Internet計算都屬於這一類。按照 Flynn的分類,高吞吐計算屬於SIMD(Single Instruction/Multiple Data)的范疇。
3.2、分布計算(Distributed Computing)
另一類計算剛好和高吞吐計算相反,它們雖然可以給分成若干並行的子任務,但是子任務間聯系很緊密,需要大量的數據交換。按照Flynn的分類,分布式的高性能計算屬於MIMD(Multiple Instruction/Multiple Data)的范疇。
下面說說這幾種集群的應用場景:
高可用集群這里不多作說明。
想Dubbo是比較偏向於負載均衡集群,用過的猿友應該知道(不知道的可以自行了解一下),Dubbo同一個服務是可以有多個提供者的,當一個消費者過來,它要消費那個提供者,這里是有負載均衡機制在裡面的。
搜索引擎Elasticsearch比較偏向於科學計算集群的分布計算。
而到這里,可能不少猿友都知道,集群的一些術語:集群容錯、負載均衡。
我們以Dubbo為例:
集群容錯(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99)
Dubbo提供了這些容錯策略:
集群容錯模式:
可以自行擴展集群容錯策略,參見:集群擴展
Failover Cluster
失敗自動切換,當出現失敗,重試其它伺服器。(預設)
通常用於讀操作,但重試會帶來更長延遲。
可通過retries="2"來設置重試次數(不含第一次)。
Failfast Cluster
快速失敗,只發起一次調用,失敗立即報錯。
通常用於非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現異常時,直接忽略。
通常用於寫入審計日誌等操作。
Failback Cluster
失敗自動恢復,後台記錄失敗請求,定時重發。
通常用於消息通知操作。
Forking Cluster
並行調用多個伺服器,只要一個成功即返回。
通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。
可通過forks="2"來設置最大並行數。
Broadcast Cluster
廣播調用所有提供者,逐個調用,任意一台報錯則報錯。(2.1.0開始支持)
通常用於通知所有提供者更新緩存或日誌等本地資源信息。
負載均衡(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)
Dubbo提供了這些負載均衡策略:
Random LoadBalance
隨機,按權重設置隨機概率。
在一個截面上碰撞的概率高,但調用量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。
RoundRobin LoadBalance
輪循,按公約後的權重設置輪循比率。
存在慢的提供者累積請求問題,比如:第二台機器很慢,但沒掛,當請求調到第二台時就卡在那,久而久之,所有請求都卡在調到第二台上。
LeastActive LoadBalance
最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差。
使慢的提供者收到更少請求,因為越慢的提供者的調用前後計數差會越大。
ConsistentHash LoadBalance
一致性Hash,相同參數的請求總是發到同一提供者。
當某一台提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。
演算法參見:http://en.wikipedia.org/wiki/Consistent_hashing。
預設只對第一個參數Hash,如果要修改,請配置<bbo:parameter key="hash.arguments" value="0,1" />
預設用160份虛擬節點,如果要修改,請配置<bbo:parameter key="hash.nodes" value="320" />
還有比較好奇它們是怎麼通信的?
像早期版本的Elasticsearch的話,自動發現節點機制,ES是一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通信,同時也支持點對點的交互。
而Dubbo是有個注冊中心,它支持多個注冊中心,但是推薦使用ZooKeeper。關於ZooKeeper可以自行了解,很多集群相關的框架都有使用到它。當然像Elasticsearch是自己有相應的機制實現的。
⑵ 什麼是資料庫事務
資料庫事務,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。
一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。事務是資料庫運行中的邏輯工作單位,由DBMS中的事務管理子系統負責事務的處理。
企業級的資料庫管理系統(DBMS)都有責任提供一種保證事務的物理完整性的機制。就常用的SQL Server2000系統而言,它具備鎖定設備隔離事務、記錄設備保證事務持久性等機制。因此,我們不必關心資料庫事務的物理完整性,而應該關注在什麼情況下使用資料庫事務、事務對性能的影響,如何使用事務等等。
事務有三種模型:
1、隱式事務是指每一條數據操作語句都自動地成為一個事務,事務的開始是隱式的,事務的結束有明確的標記。
2、顯式事務是指有顯式的開始和結束標記的事務,每個事務都有顯式的開始和結束標記。
3、自動事務是系統自動默認的,開始和結束不用標記。
⑶ 數據建模是什麼意思
問題一:什麼是數據建模 數據建模指的是對現實世界各類數據的抽象組織,確定資料庫需管轄的范圍、數據的組織形式等直至轉化成現實的資料庫。
將經過系統分析後抽象出來的概念模型轉化為物理模型後,在visio或erwin等工具建立資料庫實體以及各實體之間關系的過程・(實體一般是表)。
ke./view/1452242
問題二:根據數據建立分析模型是什麼意思 這是數據分析的一般思路。
但是通常都是在建立分析模型前,一般都是有預先假設的,比如說我假設 銷售人員的學歷、工作經驗、薪資待遇、年齡這幾個方面會對其銷售額產生影響。
之後我就會根據我的假設來收集數據,然後針對數據進行分析,找出一個合適的數據模型,比如說是線性模型的的話 就用線性回歸,如果是非線性模型的話,則建立相應的非線性模型。然後通過模型創建 可以驗證假設中哪些是正確的,同時可以找出影響因素的影響大小等
問題三:數據模型是什麼? 數據(data)是描述事物的符號記錄。模型(Model)是現實世界的抽象。數據模型(Data Model)是數據特徵的抽象,是資料庫管理的教學形式框架。
數據模型所描述的內容包括三個部分:數據結構、數據操作、數據約束。
1)數據結構:數據模型中的數據結構主要描述數據的類型、內容、性質以及數據間的聯系等。數據結構是數據模型的基礎,數據操作和約束都建立在數據結構上。不同的數據結構具有不同的操作和約束。
2)數據操作:數據模型中數據操作主要描述在相應的數據結構上的操作類型和操作方式。
3)數據約束:數據模型中的數據約束主要描述數據結構內數據間的語法、詞義聯系、他們之間的制約和依存關系,以及數據動態變化的規則,以保證數據的正確、有效和相容。
數據模型按不同的應用層次分成三種類型:分別是概念數據模型、邏輯數據模型、物理數據模型。
1、概念數據模型(Conceptual Data Model):簡稱概念模型,是面向資料庫用戶的實現世界的模型,主要用來描述世界的概念化結構,它使資料庫的設計人員在設計的初始階段,擺脫計算機系統及DBMS的具體技術問題,集中精力分析數據以及數據之間的聯系等,與具體的數據管理系統(Database Management System,簡稱DBMS)無關。概念數據模型必須換成邏輯數據模型,才能在DBMS中實現。
2、邏輯數據模型(Logical Data Model):簡稱數據模型,這是用戶從資料庫所看到的模型,是具體的DBMS所支持的數據模型,如網狀數據模型(Network Data Model)、層次數據模型(Hierarchical Data Model)等等。此模型既要面向用戶,又要面向系統,主要用於資料庫管理系統(DBMS)的實現。
3、物理數據模型(Physical Data Model):簡稱物理模型,是面向計算機物理表示的模型,描述了數據在儲存介質上的組織結構,它不但與具體的DBMS有關,而且還與操作系統和硬體有關。每一種邏輯數據模型在實現時都有起對應的物理數據模型。DBMS為了保證其獨立性與可移植性,大部分物理數據模型的實現工作又系統自動完成,而設計者只設計索引、聚集等特殊結構。
在概念數據模型中最常用的是E-R模型、擴充的E-R模型、面向對象模型及謂詞模型。在邏輯數據類型中最常用的是層次模型、網狀模型、關系模型。
問題四:數據模型的含義是什麼?為什麼要建立數據模型 模型是對現實世界的抽象。在資料庫技術中,表示實體類型及實體類型間聯系的模型稱為「數據模型」。 數據模型是資料庫管理的教學形式框架,是用來描述一組數據的概念和定義,包括三個方面: 1、概念數據模型(Conceptual Data Model):這是面向數...
問題五:建模是什麼意思? 分類別 是數學建模還是三維建模
數學建模個人理解就是建立一種關系式:比如一個函數sum(a) = a*a;
該函數就可以是一種模型,輸入a,輸出a*a。
三維建模,就是做出一些虛擬的、可見的模型,比如虛擬的一個杯子,一張桌子....
問題六:數學建模是什麼意思 數學模型就是對實際問題的一種數學表述。 具體一點說:數學模型是關於部分現實世界為某種目的的一個抽象的簡化的數學結構。 更確切地說:數學模型就是對於一個特定的對象為了一個特定目標,根據特有的內在規律,做出一些必要的簡化假設,運用適當的數學工具,得到的一個數學結構。數學結構可以是數學公式,演算法、表格、圖示等。 數學建模就是建立數學模型,建立數學模型的過程就是數學建模的過程(見數學建模過程流程圖)。 數學建模是一種數學的思考方法,是運用數學的語言和方法,通過抽象、簡化建立能近似刻劃並解決實際問題的一種強有力的數學手段。
問題七:什麼是數據建模?數據建模有什麼優點和缺點? 樓上說的到真的是,可以引用虛擬資料庫里的元素,這樣做的一個優點之一是可以降低開發的難度,因為不用要求開發人員了解數據結構就能開發了,變相的也提高了 開發效率,其二是將業務層與物理層,即需求和存儲切分開來,使系統的架構更易讀、合理。
缺點嘛,因為多了一層,所以在系統運行時會多一層解析,理論上說會降低系統的速度,但實際上也影響不大,其 二是這種手段適用於大中型系統的開發,對數據結構簡單,就用到幾張資料庫表的小系統而言,難免會有畫蛇添足 之嫌。
貼一個我正在做的數據建模圖片。
問題八:java中的建模是什麼? 建模 1、使用計算機描述一個系統的行為。例如,電子表格程序可以用來處理財務數據,代表公司的行為;開發商業計劃;評估公司經營改變可能造成的影響。請參閱 simulation,spreadsheet program。【英】The use of putersto describe the behavior of a system. Spreadsheet programs, for example, can be used to manipulate financial data,representing the activity of a pany; to develop business projections; or to evaluate the impact of proposedchan激es on the pany』s operations.
2、使用計算機以數學方法描述物體和它們之間的空間關系。例如,計算機輔助設計 (CAD) 程序可在屏幕上生成物體,使用方程式產生直線和形狀,依據它們相互之間及與所在的二維或三維空間的關系精確放置。
3、應用程序和數據建模是為應用程序確定、記錄和實現數據和進程要求的過程。這包括查看現有的數據模型和進程,以確定它們是否可被重復使用,並創建新數據模型和進程,以滿足應用程序的獨特要求。
建模過程中的主要活動包括:
確定數據及其相關過程(如實地銷售人員需要查看在線產品目錄並提交新客戶訂單)。
定義數據(如數據類型、大小和默認值)。
確保數據的完整性(使用業務規則和驗證檢查)。
定義操作過程(如安全檢查和備份)。
選擇數據存儲技術(如關系、分層或索引存儲技術)。
一定要知道建模通常會以意想不到的方式涉及公司的管理。例如,當對哪些數據元素應由哪些組織來維護有新的見解時,數據所有權(以及數據維護、准確性和及時性的隱含責任)通常會遭到質疑。數據設計常常促使公司認識到企業數據系統是如何相互依存的,並且鼓勵公司抓住協調後的數據規劃所帶來的效率提高、成本節約和戰略性機遇。
在結束建模時,您已經完全定義了應用程序的要求,確定了可能被其他企業級應用程序重復使用的數據和服務,並為將來擴展奠定了強有力的基礎。