mycat中的概念
資料庫中介軟體
前面講了mycat是乙個開源的分布式資料庫系統,但是由於真正的資料庫需要儲存引擎,而mycat並沒有儲存引擎,所以並不是
完全意義的分布式資料庫系統。
那麼mycat是什麼?mycat是資料庫中介軟體,就是介於資料庫與應用之間,進行資料處理與互動的中間服務。由於前面講的對數
據進行分片處理之後,從原有的乙個庫,被切分為多個分片資料庫,所有的分片資料庫集群構成了整個完整的資料庫儲存。
如上圖所表示,資料被分到多個分片資料庫後,應用如果需要讀取資料,就要需要處理多個資料來源的資料。如果沒有資料庫中間
件,那麼應用將直接面對分片集群,資料來源切換、事務處理、資料聚合都需要應用直接處理,原本該是專注於業務的應用,將會
花大量的工作來處理分片後的問題,最重要的是每個應用處理將是完全的重複造輪子。
所以有了資料庫中介軟體,應用只需要集中與業務處理,大量的通用的資料聚合,事務,資料來源切換都由中介軟體來處理,中介軟體的
效能與處理能力將直接決定應用的讀寫效能,所以一款好的資料庫中介軟體至關重要。
邏輯庫(schema)
邏輯庫(schema)
前面一節講了資料庫中介軟體,通常對實際應用來說,並不需要知道中介軟體的存在,業務開發人員只需要知道資料庫的概念,所以
資料庫中介軟體可以被看做是乙個或多個資料庫集群構成的邏輯庫。
在雲計算時代,資料庫中介軟體可以以多租戶的形式給乙個或多個應用提供服務,每個應用訪問的可能是乙個獨立或者是共享的物
理庫,常見的如阿里雲資料庫伺服器rds。
邏輯表(table)
邏輯表既然有邏輯庫,那麼就會有邏輯表,分布式資料庫中,對應用來說,讀寫資料的表就是邏輯表。邏輯表,可以是資料切分後,分
布在乙個或多個分片庫中,也可以不做資料切分,不分片,只有乙個表構成。
分片表分片表,是指那些原有的很大資料的表,需要切分到多個資料庫的表,這樣,每個分片都有一部分資料,所有分片構成了完整的
資料。例如在mycat配置中的t_node就屬於分片表,資料按照規則被分到dn1,dn2兩個分片節點(datanode)上。
非分片表
乙個資料庫中並不是所有的表都很大,某些表是可以不用進行切分的,非分片是相對分片表來說的,就是那些不需要進行資料切
分的表。
如下配置中t_node,只存在於分片節點(datanode)dn1上。
er表關係型資料庫是基於實體關係模型(entity-relationship model)之上,通過其描述了真實世界中事物與關係,mycat中的er表
即是**於此。根據這一思路,提出了基於e-r關係的資料分片策略,子表的記錄與所關聯的父表記錄存放在同乙個資料分片
上,即子表依賴於父表,通過表分組(table group)保證資料join不會跨庫操作。
表分組(table group)是解決跨分片資料join的一種很好的思路,也是資料切分規劃的重要一條規則。
全域性表乙個真實的業務系統中,往往存在大量的類似字典表的表,這些表基本上很少變動,字典表具有以下幾個特性:
• 變動不頻繁
• 資料量總體變化不大
• `資料規模不大,很少有超過數十萬條記錄。
對於這類的表,在分片的情況下,當業務表因為規模而進行分片以後,業務表與這些附屬的字典表之間的關聯,就成了比較棘手
的問題,所以mycat中通過資料冗餘來解決這類表的join,即所有的分片都有乙份資料的拷貝,所有將字典表或者符合字典表特
性的一些表定義為全域性表。
資料冗餘是解決跨分片資料join的一種很好的思路,也是資料切分規劃的另外一條重要規則。
分片節點(datanode)
分片節點(datanode)
資料切分後,乙個大表被分到不同的分片資料庫上面,每個表分片所在的資料庫就是分片節點(datanode)。
節點主機(datahost)
資料切分後,每個分片節點(datanode)不一定都會獨佔一台機器,同一機器上面可以有多個分片資料庫,這樣乙個或多個分片
節點(datanode)所在的機器就是節點主機(datahost),為了規避單節點主機併發數限制,盡量將讀寫壓力高的分片節點
(datanode)均衡的放在不同的節點主機(datahost).
分片規則(rule)
分片規則
前面講了資料切分,乙個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則把資料分到某個分片的規則就是
分片規則,資料切分選擇合適的分片規則非常重要,將極大的避免後續資料處理的難度。
全域性序列號(sequence)
全域性序列號(sequence)
資料切分後,原有的關聯式資料庫中的主鍵約束在分布式條件下將無法使用,因此需要引入外部機制保證資料唯一性標識,這種保
證全域性性的資料唯一標識的機制就是全域性序列號(sequence)。
多租戶多租戶
多租戶技術或稱多重租賃技術,是一種軟體架構技術,它是在**與實現如何於多使用者的環境下共用相同的系統或程式元件,並
且仍可確保各使用者間資料的隔離性。在雲計算時代,多租戶技術在共用的資料中心以單一系統架構與服務提供多數客戶端相同甚
至可定製化的服務,並且仍然可以保障客戶的資料隔離。目前各種各樣的雲計算服務就是這類技術範疇,例如阿里雲資料庫服務
(rds)、阿里雲伺服器等等。
多租戶在資料儲存上存在三種主要的方案,分別是
1.獨立資料庫
這是第一種方案,即乙個租戶乙個資料庫,這種方案的使用者資料隔離級別最高,安全性最好,但成本也高。
優點:為不同的租戶提供獨立的資料庫,有助於簡化資料模型的擴充套件設計,滿足不同租戶的獨特需求;
如果出現故障,恢復資料比較簡單。
缺點:增大了資料庫的安裝數量,隨之帶來維護成本和購置成本的增加。
這種方案與傳統的乙個客戶、一套資料、一套部署類似,差別只在於軟體統一部署在運營商那裡。如果面對的是銀行、醫院等需
要非常高資料隔離級別的租戶,可以選擇這種模式,提高租用的定價。如果定價較低,產品走低價路線,這種方案一般對運營商
來說是無法承受的。
2.共享資料庫,隔離資料架構
這是第二種方案,即多個或所有租戶共享database,但乙個tenant乙個schema。
優點:為安全性要求較高的租戶提供了一定程度的邏輯資料隔離,並不是完全隔離;每個資料庫可以支援更多的租戶數量。
缺點:如果出現故障,資料恢復比較困難,因為恢復資料庫將牽扯到其他租戶的資料;
如果需要跨租戶統計資料,存在一定困難。
3.共享資料庫,共享資料架構
這是第三種方案,即租戶共享同乙個database、同乙個schema,但在表中通過tenantid區分租戶的資料。這是共享程度最高、
隔離級別最低的模式。
優點:三種方案比較,第三種方案的維護和購置成本最低,允許每個資料庫支援的租戶數量最多。
缺點:隔離級別最低,安全性最低,需要在設計開發時加大對安全的開發量;
資料備份和恢復最困難,需要逐表逐條備份和還原。
如果希望以最少的伺服器為最多的租戶提供服務,並且租戶接受以犧牲隔離級別換取降低成本,這種方案最適合。
第四章 繼承
一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...
第四章 物件
三個特性 身份 型別 值 每個物件都有唯一的身份來標識自己,使用內建函式id 得到。例子 usr bin env python coding utf 8 a 32 print a b a print id a id b 結果 d python27 python.exe e workp python ...
第四章 其他
sizeof和strlen 區別sizeof以位元組為單位給出資料的大小,strlen 函式以字元為單位給出字串的長度。使用strlen 函式要加 include標頭檔案。sizeof計算字元時會將標誌字串結束的不可見的空字元計算在內。定義符號常量 方法一 define name value 優點 ...