集群?內存數據庫:關系數據庫
徒弟問“要內存數據庫干什么? 我們設備本地不是都有內存數據緩存嗎?”
答曰“內存數據庫的價值在于其強大的保護備份(容災保護)、同時支持集群、很方便支持在線擴容、在線縮容。這是我的理解?!?/p>
PS: 文中內存數據庫是指分布式內存數據庫
1、關系型數據庫的特點
關系型數據庫(RDBMS Relational Database Management System)
a、可獲取持久化的數據
b、通過事物來支持并發
c、數據共享(共享同一服務器上的一份數據提供多個APP使用)
d、支持標準的SQL及模式(標準SQL使得關系數據庫的通用性極強)
模式:也就是預定義結構來向數據庫說明:需要哪些表格,表中有哪些列,每列存放何種類型數據。必現先定義好模式,然后才能存放數據。
2、關系型數據庫的致命弱點:不能適應 云、大數據的需求
關系型數據庫的設計決定了他無法支持好數據庫集群,關系型數據庫的不同數據分在不同的表中,某一個業務(用戶)操作,可能需要訪問不同的表才能完成它的操作,而此時需要訪問的表可能分布在不同的數據節點上(甚至不同的數據中心),表之間有Relation,這樣業務操作的時延是將問題(大數據時更明顯),更重要的是跨節點、跨數據中心的表數據分布使得關系型數據庫很難支持數據操作的ACID。
數據庫的基本特征要求:ACID
Atomicity 原子性
Consistency 一致性
Isolation 隔離性
Durability 持久性
3、內存數據庫:為集群而生,成功分一杯羹
內存數據庫特征:
a、不用關系模型(無模式,即數據庫本身不涉及模式,其實是把模式的定義上移到了上層APP)
b、可在集群中運行
c、可隨APP一起部署
要支持集群,首先要拋棄關系模型,所以內存數據庫采用了面向聚合的模型,需要聚合的信息由APP來決定,相當于把關系模式上移到APP,而不是在數據庫側。
面向聚合模型的思路是把這些聚合信息放到同有一個節點,使得APP采集數據時所需要訪問的數據節點降至最低,以降低時延。
所以聚合體是作為數據分布的一個最小單元存在,支撐服務器集群橫向擴展(橫向擴展:通過新增數據節點來擴容,而不是在單機上不斷增加內存條)。
舉例說明下我對聚合的理解:
學生管理系統,學生的信息包含了其 名字、班級、年齡、性別、班主任等等信息。采用關系數據庫:學生的信息被分在不同的表中存貯,表間建有Relation,當我們要查詢某學生的所有信息時,通過SQL獲取所有表中相關的信息。這種模式,要查詢的數據是分離的,在不同的表中。
采用內存數據庫:以k-v模型(key value模型)的內存數據庫為例,把某學生所有的信息聚合放到v中,再給學生分一個ID作為k。 APP通過ID即可一次性獲取某學生的所有信息。這種模式要查詢的數據在一個表中。系統中學生的信息會分布在不同的數據節點或數據中心,當某個數據節點掛掉,只會影響一部分數據的訪問,容災性好。
4、內存數據庫不足及技術難點
a、“無模式”的靈活性僅限于聚合內部,如果改動了聚合邊界,那么數據遷移工作和關系數據庫一樣,都非常復雜。所以,要用好內存數據庫,APP要根據自身業務特征設計好聚合體,盡量避免未來聚合體在未來頻繁變化。
b、集群的數據分布方案中主要涉及數據節點間的數據復制和數據分片,技術難點在如何保證主備數據的一致性 和 復制、分片的可靠性。
數據復制:是為了產生備份數據
數據分片:是把一個表的數據分布在不同的數據節點,降低因某個節點掛掉導致同一個表上所有數據不可用
轉載請注明出處:華為云博客 https://portal.hwclouds.com/blogs
數據庫 互聯網
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。