資料庫發展架構
『壹』 LBS資料庫的架構是怎樣的
架構的話有很多嘗試,傳統的Oracle和 Postgre用的比較廣泛, 很多架構在此基礎上同時應用 Nosql。因為大多數LBS並不涉及更復雜的空間數據存儲,例如多邊形或者三維數據,因此,大多數generic的資料庫架構都可以應用。但是,從產品核心的設計以及發展來看,如果像FourSquare(4SQ)進行數據挖掘並提供收費的數據分析服務,那麼基於空間的利用文件數據結構,以空間POI為基礎的NoSQL,是比較好的選擇。除了其他人介紹的很多LBS,比如街旁和4SQ,應用的Mongo DB, 還有Couch DB, 根據之前來講課的澳洲政府的一個大型空間資料庫項目(集成了多種現有的空間資料庫)的構架師介紹,這個項目應用了Couch DB。雖然理論上Graphic的NoSQL對於存儲空間數據也有很大優勢,但是畢竟相對不成熟,所以實際應用中的NoSQL還是以doc結構的Mongo和Couch為主。
如何提高命中率關鍵是對存儲的空間數據認識程度和對用戶query的類型的統計分析,並在此基礎上開發出適合的演算法,建立緩存或者對傳統的空間索引進行組合,例如應用一些refine-filter策略。空間數據的索引與傳統的索引不同,但是又部分基於傳統索引的基礎之上的。這里只介紹一些簡單的空間索引入門演算法,最後簡單談一下緩存建立的策略。
『貳』 什麼是資料庫
資料庫是存放數據的倉庫。它的存儲空間很大,可以存放百萬條、千萬條、上億條數據。但是資料庫並不是隨意地將數據進行存放,是有一定的規則的,否則查詢的效率會很低。當今世界是一個充滿著數據的互聯網世界,充斥著大量的數據。即這個互聯網世界就是數據世界。數據的來源有很多,比如出行記錄、消費記錄、瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。
資料庫是一個按數據結構來存儲和管理數據的計算機軟體系統。資料庫的概念實際包括兩層意思:
(1)資料庫是一個實體,它是能夠合理保管數據的「倉庫」,用戶在該「倉庫」中存放要管理的事務數據,「數據」和「庫」兩個概念結合成為資料庫。
(2)資料庫是數據管理的新方法和技術,它能更合適的組織數據、更方便的維護數據、更嚴密的控制數據和更有效的利用數據。
發展現狀
在資料庫的發展歷史上,資料庫先後經歷了層次資料庫、網狀資料庫和關系資料庫等各個階段的發展,資料庫技術在各個方面的快速的發展。特別是關系型資料庫已經成為目前資料庫產品中最重要的一員,80年代以來, 幾乎所有的資料庫廠商新出的資料庫產品都支持關系型資料庫,即使一些非關系資料庫產品也幾乎都有支持關系資料庫的介面。這主要是傳統的關系型資料庫可以比較好的解決管理和存儲關系型數據的問題。隨著雲計算的發展和大數據時代的到來,關系型資料庫越來越無法滿足需要,這主要是由於越來越多的半關系型和非關系型數據需要用資料庫進行存儲管理,以此同時,分布式技術等新技術的出現也對資料庫的技術提出了新的要求,於是越來越多的非關系型資料庫就開始出現,這類資料庫與傳統的關系型資料庫在設計和數據結構有了很大的不同, 它們更強調資料庫數據的高並發讀寫和存儲大數據,這類資料庫一般被稱為NoSQL(Not only SQL)資料庫。 而傳統的關系型資料庫在一些傳統領域依然保持了強大的生命力。
資料庫管理系統
編輯
資料庫管理系統是為管理資料庫而設計的電腦軟體系統,一般具有存儲、截取、安全保障、備份等基礎功能。資料庫管理系統可以依據它所支持的資料庫模型來作分類,例如關系式、XML;或依據所支持的計算機類型來作分類,例如伺服器群集、行動電話;或依據所用查詢語言來作分類,例如SQL、XQuery;或依據性能沖量重點來作分類,例如最大規模、最高運行速度;亦或其他的分類方式。不論使用哪種分類方式,一些DBMS能夠跨類別,例如,同時支持多種查詢語言。
『叄』 什麼叫做資料庫的「三層架構」
三層架構可以說是一種設置模式,他的作用只是讓我們更加有效的利用資源,有利於以後的修改和查看,依次分為視圖層,邏輯層,數據層;
試圖層顧名思義就是我們所看到的,他的原代碼並沒有關於處理和連庫等代碼,只是簡單的跳轉頁面,我們沒有辦法看到真正的代碼;
邏輯層就是我們從頁面層發回的問題等請求,從字面意思來看,你可以將他視為一個過渡層,只是連接是圖層和數據層;進行一些連庫,刪除數據等操作了;從試圖層跳轉過來的問題在這里進行處理,並提交給數據層,再返回頁面層共讀者查看;
數據層就不用說了吧!這里存放著所有的數據也就是一個工程的大本營一樣;
三層架構已經不僅僅屬於.net了,他是一種設計形式,從某種意義上來說,所有的開發設計幾乎都已經以三層架構為基礎,三層架構及有效的處理問題,將數據和試圖也有效的分開,這樣防止耦合度過高,有利於處理和修改,(你不會是想將代碼全部寫在視圖頁面上,這樣有一個小小的變動,我們就要翻看幾十萬句代碼,從中找出,那我要替你的眼睛抱不平了)當你將程序做好後,從這台機子移動到另一台機子時,大大減少了出錯的問題;
通俗一點就是,這樣看上去很有層次感,我們查看時,可以減少時間的浪費,也不用在代碼堆里翻來覆去找不到北
『肆』 資料庫架構選型與落地,看這篇就夠了
隨著時間和業務的發展,資料庫中的數據量增長是不可控的,庫和表中的數據會越來越大,隨之帶來的是更高的 磁碟 、 IO 、 系統開銷 ,甚至 性能 上的瓶頸,而單台伺服器的 資源終究是有限 的。
因此在面對業務擴張過程中,應用程序對資料庫系統的 健壯性 , 安全性 , 擴展性 提出了更高的要求。
以下,我從資料庫架構、選型與落地來讓大家入門。
資料庫會面臨什麼樣的挑戰呢?
業務剛開始我們只用單機資料庫就夠了,但隨著業務增長,數據規模和用戶規模上升,這個時候資料庫會面臨IO瓶頸、存儲瓶頸、可用性、安全性問題。
為了解決上述的各種問題,資料庫衍生了出不同的架構來解決不同的場景需求。
將資料庫的寫操作和讀操作分離,主庫接收寫請求,使用多個從庫副本負責讀請求,從庫和主庫同步更新數據保持數據一致性,從庫可以水平擴展,用於面對讀請求的增加。
這個模式也就是常說的讀寫分離,針對的是小規模數據,而且存在大量讀操作的場景。
因為主從的數據是相同的,一旦主庫宕機的時候,從庫可以 切換為主庫提供寫入 ,所以這個架構也可以提高資料庫系統的 安全性 和 可用性 ;
優點:
缺點:
在資料庫遇到 IO瓶頸 過程中,如果IO集中在某一塊的業務中,這個時候可以考慮的就是垂直分庫,將熱點業務拆分出去,避免由 熱點業務 的 密集IO請求 影響了其他正常業務,所以垂直分庫也叫 業務分庫 。
優點:
缺點:
在資料庫遇到存儲瓶頸的時候,由於數據量過大造成索引性能下降。
這個時候可以考慮將數據做水平拆分,針對數據量巨大的單張表,按照某種規則,切分到多張表裡面去。
但是這些表還是在同一個庫中,所以庫級別的資料庫操作還是有IO瓶頸(單個伺服器的IO有上限)。
所以水平分表主要還是針對 數據量較大 ,整體業務 請求量較低 的場景。
優點:
缺點:
四、分庫分表
在資料庫遇到存儲瓶頸和IO瓶頸的時候,數據量過大造成索引性能下降,加上同一時間需要處理大規模的業務請求,這個時候單庫的IO上限會限制處理效率。
所以需要將單張表的數據切分到多個伺服器上去,每個伺服器具有相應的庫與表,只是表中數據集合不同。
分庫分表能夠有效地緩解單機和單庫的 性能瓶頸和壓力 ,突破IO、連接數、硬體資源等的瓶頸。
優點:
缺點:
註:分庫還是分表核心關鍵是有沒有IO瓶頸 。
分片方式都有什麼呢?
RANGE(范圍分片)
將業務表中的某個 關鍵欄位排序 後,按照順序從0到10000一個表,10001到20000一個表。最常見的就是 按照時間切分 (月表、年表)。
比如將6個月前,甚至一年前的數據切出去放到另外的一張表,因為隨著時間流逝,這些表的數據被查詢的概率變小,銀行的交易記錄多數是採用這種方式。
優點:
缺點:
HASH(哈希分片)
將訂單作為主表,然後將其相關的業務表作為附表,取用戶id然後 hash取模 ,分配到不同的數據表或者資料庫上。
優點:
缺點:
講到這里,我們已經知道資料庫有哪些架構,解決的是哪些問題,因此, 我們在日常設計中需要根據數據的特點,數據的傾向性,數據的安全性等來選擇不同的架構 。
那麼,我們應該如何選擇資料庫架構呢?
雖然把上面的架構全部組合在一起可以形成一個強大的高可用,高負載的資料庫系統,但是架構選擇合適才是最重要的。
混合架構雖然能夠解決所有的場景的問題,但是也會面臨更多的挑戰,你以為的完美架構,背後其實有著更多的坑。
1、對事務支持
分庫分表後(無論是垂直還是水平拆分),就成了分布式事務了,如果依賴資料庫本身的分布式事務管理功能去執行事務,將付出高昂的性能代價(XA事務);如果由應用程序去協助控制,形成程序邏輯上的事務,又會造成編程方面的負擔(TCC、SAGA)。
2、多庫結果集合並 (group by,order by)
由於數據分布於不同的資料庫中,無法直接對其做分頁、分組、排序等操作,一般應對這種多庫結果集合並的查詢業務都需要採用數據清洗、同步等其他手段處理(TIDB、KUDU等)。
3、數據延遲
主從架構下的多副本機制和水平分庫後的聚合庫都會存在主數據和副本數據之間的延遲問題。
4、跨庫join
分庫分表後表之間的關聯操作將受到限制,我們無法join位於不同分庫的表(垂直),也無法join分表粒度不同的表(水平), 結果原本一次查詢就能夠完成的業務,可能需要多次查詢才能完成。
5、分片擴容
水平分片之後,一旦需要做擴容時。需要將對應的數據做一次遷移,成本代價都極高的。
6、ID生成
分庫分表後由於資料庫獨立,原有的基於資料庫自增ID將無法再使用,這個時候需要採用其他外部的ID生成方案。
一、應用層依賴類(JDBC)
這類分庫分表中間件的特點就是和應用強耦合,需要應用顯示依賴相應的jar包(以Java為例),比如知名的TDDL、當當開源的 sharding-jdbc 、蘑菇街的TSharding等。
此類中間件的基本思路就是重新實現JDBC的API,通過重新實現 DataSource 、 PrepareStatement 等操作資料庫的介面,讓應用層在 基本 不改變業務代碼的情況下透明地實現分庫分表的能力。
中間件給上層應用提供熟悉的JDBC API,內部通過 sql解析 、 sql重寫 、 sql路由 等一系列的准備工作獲取真正可執行的sql,然後底層再按照傳統的方法(比如資料庫連接池)獲取物理連接來執行sql,最後把數據 結果合並 處理成ResultSet返回給應用層。
優點
缺點
二、中間層代理類(Proxy)
這類分庫分表中間件的核心原理是在應用和資料庫的連接之間搭起一個 代理層 ,上層應用以 標準的MySQL協議 來連接代理層,然後代理層負責 轉發請求 到底層的MySQL物理實例,這種方式對應用只有一個要求,就是只要用MySQL協議來通信即可。
所以用MySQL Navicat這種純的客戶端都可以直接連接你的分布式資料庫,自然也天然 支持所有的編程語言 。
在技術實現上除了和應用層依賴類中間件基本相似外,代理類的分庫分表產品必須實現標準的MySQL協議,某種意義上講資料庫代理層轉發的就是MySQL協議請求,就像Nginx轉發的是Http協議請求。
比較有代表性的產品有開創性質的Amoeba、阿里開源的Cobar、社區發展比較好的 Mycat (基於Cobar開發)等。
優點
缺點
JDBC方案 :無中心化架構,兼容市面上大多數關系型資料庫,適用於開發高性能的輕量級 OLTP 應用(面向前台)。
Proxy方案 :提供靜態入口以及異構語言的支持,適用於 OLAP 應用(面向後台)以及對分片資料庫進行管理和運維的場景。
混合方案 :在大型復雜系統中存在面向C端用戶的前台應用,也有面向企業分析的後台應用,這個時候就可以採用混合模式。
JDBC 採用無中心化架構,適用於 Java 開發的高性能的輕量級 OLTP 應用;Proxy 提供靜態入口以及異構語言的支持,適用於 OLAP 應用以及對分片資料庫進行管理和運維的場景。
ShardingSphere是一套開源的分布式資料庫中間件解決方案組成的生態圈,它由 Sharding-JDBC 、 Sharding-Proxy 和 Sharding-Sidecar (計劃中)這3款相互獨立的產品組成,他們均提供標准化的數據分片、分布式事務和資料庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。
ShardingSphere提供的核心功能:
Sharding-Proxy
定位為透明化的 資料庫代理端 ,提供封裝了 資料庫二進制協議的服務端版本 ,用於完成對 異構語言的支持 。
目前已提供MySQL版本,它可以使用 任何兼容MySQL協議的訪問客戶端 (如:MySQL Command Client, MySQL Workbench, Navicat等)操作數據,對DBA更加友好。
向 應用程序完全透明 ,可直接當做MySQL使用。
適用於任何兼容MySQL協議的客戶端。
Sharding-JDBC
定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為 增強版的JDBC驅動,完全兼容JDBC和各種ORM框架 。
以電商SaaS系統為例,前台應用採用Sharding-JDBC,根據業務場景的差異主要分為三種方案。
分庫(用戶)
問題解析:頭部企業日活高並發高,單獨分庫避免干擾其他企業用戶,用戶數據的增長緩慢可以不分表。
拆分維度:企業ID分庫
拆分策略:頭部企業單獨庫、非頭部企業一個庫
分庫分表(訂單)
問題解析:訂單數據增長速度較快,在分庫之餘需要分表。
拆分維度:企業ID分庫、用戶ID分表
拆分策略:頭部企業單獨庫、非頭部企業一個庫,分庫之後用戶ID取模拆分表
單庫分表(附件)
問題解析:附件數據特點是並發量不大,只需要解決數據增長問題,所以單庫IO足以支撐的情況下分表即可。
拆分維度:用戶ID分表
拆分策略:用戶ID取模分表
問題一:分布式事務
分布式事務過於復雜也是分布式系統最難處理的問題,由於篇幅有限,後續會開篇專講這一塊內容。
問題二:分布式ID
問題三:跨片查詢
舉個例子,以用戶id分片之後,需要根據企業id查詢企業所有用戶信息。
sharding針對跨片查詢也是能夠支持的,本質上sharding的跨片查詢是採用同時查詢多個分片的數據,然後聚合結果返回,這個方式對資源耗費比較大,特別是對資料庫連接資源的消耗。
假設分4個資料庫,8個表,則sharding會同時發出32個SQL去查詢。一下子消耗掉了32個連接;
特別是針對單庫分表的情況要注意,假設單庫分64個表,則要消耗64個連接。如果我們部署了2個節點,這個時候兩個節點同時查詢的話,就會遇到資料庫連接數上限問題(mysql默認100連接數)
問題四:分片擴容
隨著數據增長,每個片區的數據也會達到瓶頸,這個時候需要將原有的分片數量進行增加。由於增加了片區,原先的hash規則也跟著變化,造成了需要將舊數據做遷移。
假設原先1個億的數據,hash分64個表,現在增長到50億的數據,需要擴容到128個表,一旦擴容就需要將這50億的數據做一次遷移,遷移成本是無法想像的。
問題五:一致性哈希
首先,求出每個 伺服器的hash值 ,將其配置到一個 0~2^n 的圓環上 (n通常取32)
其次,用同樣的方法求出待 存儲對象的主鍵 hash值 ,也將其配置到這個圓環上。
然後,從數據映射到的位置開始順時針查找,將數據分布到找到的第一個伺服器節點上。
一致性hash的優點在於加入和刪除節點時只會影響到在哈希環中相鄰的節點,而對其他節點沒有影響。
所以使用一致性哈希在集群擴容過程中可以減少數據的遷移。
好了,這次分享到這里,我們日常的實踐可能只會用到其中一種方案,但它不是資料庫架構的全貌,打開技術視野,才能更好地把存儲工具利用起來。
老規矩,一鍵三連,日入兩千,點贊在看,年薪百萬!
本文作者:Jensen
7年Java老兵,小米主題設計師,手機輸入法設計師,ProcessOn特邀講師。
曾涉獵航空、電信、IoT、垂直電商產品研發,現就職於某知名電商企業。
技術公眾號 【架構師修行錄】 號主,專注於分享日常架構、技術、職場干貨,Java Goals:架構師。
交個朋友,一起成長!
『伍』 資料庫-架構和資料庫-管理指的是什麼
資料庫架構:
下面是基於SQLserver資料庫來談的。
SQLServer經過這些年的發展,其實已經有很多很好的技術可以使用,如Replication、SSB、Cluster、Mirroring等(可以參考我在SQLServer DBA 三十問和SQLServer 高可用、高性能和高保護延伸 中的一些技術方面的知識),而且這些技術在可靠性方面已經通過了市場的認可,有很多公司在為提高其程序的可靠性、安全性和高效性等方面或多或少的採用了其中的某些技術,以下就我接觸過的這些技術方面的應用,主要針對網站這種流量很大,讀多寫少的應用,就資料庫架構方面做些探討,希望對各位有所幫助,如有不對的地方,歡迎大家指正和交流。
資料庫架構需要考慮的問題:
數據可靠和一致性;
數據容災;
當數據量和訪問壓力變大時,方便擴充;
高度可用,出問題時能及時恢復,無單點故障;
不應因為某一台機器出現問題,導致整網性能的急劇下降;
方便維護。
資料庫管理:
資料庫管理(Database Manager)是有關建立、存儲、修改和存取資料庫中信息的技術,是指為保證資料庫系統的正常運行和服務質量,有關人員須進行的技術管理工作。負責這些技術管理工作的個人或集體稱為資料庫管理員(DBA)。資料庫管理的主要內容有:資料庫的調優、資料庫的重組、資料庫的重構、資料庫的安全管控、報錯問題的分析和匯總和處理、資料庫數據的日常備份. 資料庫的建立:資料庫的設計只是提供了數據的類型、邏輯結構、聯系、約束和存儲結構等有關數據的描述。這些描述稱為數據模式。
『陸』 oracle資料庫的架構是什麼
oracle 資料庫架構本質上是C/S結構的。 伺服器與客戶端是分開的,即時伺服器和客戶端是在同一機器上,他們也是按照客戶端/伺服器模式運行的,他們之間的進程是分開的。 希望能幫助你。
『柒』 「資料庫」的主要架構有幾種
「資料庫」主要有資料庫外部體系結構、內部體系結構兩種。
從資料庫最終用戶角度看,資料庫系統的結構分為單用戶結構、主從式結構、分布式結構、客戶/伺服器、瀏覽器/應用伺服器/資料庫伺服器多層結構,這是資料庫外部體系結構。
物理存儲結構、邏輯存儲結構、內存結構和實例進程結構,這是內部體系結構。
『捌』 資料庫發展呈現三個主要特徵
資料庫發展呈現三個主要特徵
資料庫(Databases,簡稱DB)是指長期保存在計算機的存儲設備上、並按照某種模型組織起來的、可以被各種用戶或應用共享的數據的集合。資料庫管理系統(Database Management Systems,簡稱DBMS)是指提供各種數據管理服務的計算機軟體系統,這種服務包括數據對象定義、數據存儲與備份、數據訪問與更新、數據統計與分析、數據安全保護、資料庫運行管理以及資料庫建立和維護等。
由於企業信息化的目的就是要以現代信息技術為手段,對伴隨著企業生產和經營過程而產生的數據進行收集、加工、管理和利用,以改善企業生產經營的整體效率,增強企業的競爭力。所以,資料庫是企業信息化不可缺少的工具,是絕大部分企業信息系統的核心。
縱觀資料庫發展,三大資料庫巨頭公司紛紛推出其最新產品,資料庫市場競爭日益加劇。從最新的IDC報告顯示,在關系資料庫管理系統(RDBMS)軟體市場上,Oracle繼續領先對手IBM和微軟,但是微軟在2006年取得了更快的銷售增長率……
根據對資料庫發展的技術趨勢不難看出,整個資料庫發展呈現出了三個主要特徵:
(1)、支持XML數據格式
IBM公司在它新推出的DB2 9版本中,直接把對XML的支持作為其新產品的最大賣點,號稱是業內第一個同時支持關系型數據和XML數據的混合資料庫,無需重新定義XML數據的格式,或將其置於資料庫大型對象的前提下,IBM DB2 9允許用戶無縫管理普通關系數據和純XML數據。
對於傳統關系型數據與層次型數據的混合應用已經成為了新一代資料庫產品所不可或缺的特點。除了IBM,Oracle和微軟也同時宣傳了它們的產品也可以實現高性能XML存儲與查詢,使現有應用更好的與XML共存。
(2)、商業智能成重點
為應對日益加劇的商業競爭,企業不斷增加內部IT及信息系統,使企業的商業數據成幾何數量級不斷遞增,如何能夠從這些海量數據中獲取更多的信息,以便分析決策將數據轉化為商業價值,就成為目前資料庫廠商關注的焦點。各資料庫廠商在新推出的產品中,紛紛表示自己的產品在商業智能方面有很大提高。如:微軟最新版SQL Server 2005就集成了完整的商業智能套件,包括數據倉庫、數據分析、ETL工具、報表及數據挖掘等,並有針對性的做了一些優化。如何更好的支持商業智能將是未來資料庫產品發展的主要趨勢之一。
(3)、SOA架構支持
SOA已經成為目前IT業內的一個大的發展趨勢,最初IBM和BEA是該理念的主要推動者,後來有越來越多的企業加入,開始宣稱支持SOA,其中包括Oracle,而微軟開始並不是非常贊同SOA的,但是,隨著時間的發展,目前國內主流的資料庫廠商都開始宣稱他們的產品是完全支持SOA架構的,包括微軟的SQL Server 2005,從微軟態度的轉變可以看出,未來IT業的發展與融合,SOA正在成長為一個主流的趨勢。
資料庫管理系統已經成為軟體產業的重要組成部分,是信息化過程中最重要的技術基礎之一。我國要振興軟體產業,就必須發展自己的資料庫軟體產業。這已經獲得了廣泛的共識,目前要解決的關鍵問題是如何能夠「做得出、用得上、賣得掉」。我們認為,資料庫軟體的發展將仍然是關系系統內核基礎上進行擴展的技術路線。
『玖』 資料庫架構怎麼劃分
資料庫的架構,如果你不清楚怎麼劃分的話,說明你的技術還有待提高,可以查看一下相關的書本書名或者是自己看一看。
『拾』 mysql資料庫管理系統基本系統架構擁有哪4大模塊
客戶端、連接層、服務層、引擎層