當前位置:首頁 » 數據倉庫 » 大數據資料庫設計方案
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

大數據資料庫設計方案

發布時間: 2023-02-09 09:15:05

❶ 在系統設計中,對資料庫的設計應考慮哪些設計原則

資料庫是整個軟體應用的根基,是軟體設計的起點,它起著決定性的質變作用,因此我們必須對資料庫設計高度重視起來,培養設計良好資料庫的習慣,是一個優秀的軟體設計師所必須具備的基本素質條件!
那麼我們要做到什麼程度才是對的呢?下面就說說資料庫設計的原則:
1、資料庫設計最起碼要佔用整個項目開發的40%以上的時間
資料庫是需求的直觀反應和表現,因此設計時必須要切實符合用戶的需求,要多次與用戶溝通交流來細化需求,將需求中的要求和每一次的變化都要一一體現在資料庫的設計當中。如果需求不明確,就要分析不確定的因素,設計表時就要事先預留出可變通的欄位,正所謂「有備無患」。
2、資料庫設計不僅僅停留於頁面demo的表面
頁面內容所需要的欄位,在資料庫設計中只是一部分,還有系統運轉、模塊交互、中轉數據、表之間的聯系等等所需要的欄位,因此資料庫設計絕對不是簡單的基本數據存儲,還有邏輯數據存儲。
3、資料庫設計完成後,項目80%的設計開發在你腦海中就已經完成了
每個欄位的設計都是有他必要的意義的,你在設計每一個欄位的同時,就應該已經想清楚程序中如何去運用這些欄位,多張表的聯系在程序中是如何體現的。換句話說,你完成資料庫設計後,程序中所有的實現思路和實現方式在你的腦海中就已經考慮過了。如果達不到這種程度,那當進入編碼階段後,才發現要運用的技術或實現的方式資料庫無法支持,這時再改動資料庫就會很麻煩,會造成一系列不可預測的問題。
4、資料庫設計時就要考慮到效率和優化問題
一開始就要分析哪些表會存儲較多的數據量,對於數據量較大的表的設計往往是粗粒度的,也會冗餘一些必要的欄位,已達到盡量用最少的表、最弱的表關系去存儲海量的數據。並且在設計表時,一般都會對主鍵建立聚集索引,含有大數據量的表更是要建立索引以提供查詢性能。對於含有計算、數據交互、統計這類需求時,還要考慮是否有必要採用存儲過程。
5、添加必要的(冗餘)欄位
像「創建時間」、「修改時間」、「備注」、「操作用戶IP」和一些用於其他需求(如統計)的欄位等,在每張表中必須都要有,不是說只有系統中用到的數據才會存到資料庫中,一些冗餘欄位是為了便於日後維護、分析、拓展而添加的,這點是非常重要的,比如黑客攻擊,篡改了數據,我們便就可以根據修改時間和操作用戶IP來查找定位。
6、設計合理的表關聯
若多張表之間的關系復雜,建議採用第三張映射表來關聯維護兩張表之間的關系,以降低表之間的直接耦合度。若多張表涉及到大數據量的問題,表結構盡量簡單,關聯也要盡可能避免。
7、設計表時不加主外鍵等約束性關聯,系統編碼階段完成後再添加約束性關聯
這樣做的目的是有利於團隊並行開發,減少編碼時所遇到的問題,表之間的關系靠程序來控制。編碼完成後再加關聯並進行測試。不過也有一些公司的做法是乾脆就不加表關聯。
8、選擇合適的主鍵生成策略

❷ 大數據下的地質資料信息存儲架構設計

頡貴琴 胡曉琴

(甘肅省國土資源信息中心)

摘要 為推進我國地質資料信息服務集群化產業化工作,更大更好地發揮地質資料信息的價值,本文針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,基於現有系統的存儲架構,設計了一種大數據下的地質資料信息存儲架構,以便於我國地質資料信息服務集群化產業化工作能夠適應大數據時代的數據存儲。

關鍵詞 大數據 地質資料 存儲 Nosql 雙資料庫

0 引言

新中國成立60多年來,我國形成了海量的地質資料信息,為國民經濟和社會發展提供了重要支撐。但在地質資料管理方面長期存在資料信息分散、綜合研究不夠、數字化信息化程度不高、服務渠道不暢、服務能力不強等問題,使地質資料信息的巨大潛在價值未能得到充分發揮。為進一步提高地質工作服務國民經濟和社會發展的能力,充分發揮地質資料信息的服務功能,擴大服務領域,國土資源部根據國內外地質工作的先進經驗,做出了全面推進地質資料信息服務集群化產業化工作的部署。

目前,全國各省地質資料館都在有條不紊地對本省成果、原始和實物地質資料進行清理,並對其中重要地質資料進行數字化和存儲工作。然而,由於我國地質資源豐富,經過幾十年的積累,已經形成了海量的地質資料,數據量早已經超過了幾百太位元組(TB)。在進行地質資料信息服務集群化工作中,隨著共享數據量的不斷增大,傳統的數據存儲方式和管理系統必然會展現出存儲和檢索方面的不足以及系統管理方面的缺陷。為了解決該問題,需要設計更加先進的數據存儲架構來實現海量地質資料的存儲。

而大數據(Big Data)作為近年來在雲計算領域中出現的一種新型數據,科技工作者在不斷的研究中,設計了適合大數據存儲管理的非關系型資料庫NoSQL進行大數據的存儲和管理。本文將針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,利用大數據存儲管理模式的思想,提出一種海量地質資料存儲架構,改進現有系統存儲架構,以便於我國全面推進地質資料信息服務集群化產業化工作。

1 工作現狀

1.1 國內外地質資料信息的存儲現狀

在美國,主要有兩大地質資料公共服務平台,分別是地球科學信息中心(ESIC)、地球資源觀測和科學中心(EROS),其目的是通過為社會和政府提供更加便利、快速的地質信息服務。20世紀90年代初,澳大利亞出台了國家地球科學填圖協議,採用先進的科學方法和技術進行數據存儲,從而形成了第二代澳大利亞陸地地質圖。

目前,我國地質資料信息服務集群化產業化工作剛剛起步,雖然國土資源部信息中心已經開發了地質資料信息集群化共享服務平台,並倡導各地方用戶使用該系統。但由於各個地方早期的工作背景不一致,因此各地方所使用的存儲系統也不盡相同,主要有Access、SQL Server、Oracle、MySQL等系統。本文以國土資源部信息中心開發的地質資料信息集群化共享服務平台的存儲系統MySQL為例說明。該系統是基於關系資料庫管理系統MySQL的一套分布式存儲檢索系統。該系統的部署使得我國地質資料信息服務集群化產業化工作取得了重大進展,同時也為我國建立標准統一的地質資料信息共享服務平台和互聯互通的網路服務體系奠定了堅實的基礎。然而,該系統的研發並沒有考慮到地質資料信息進一步集群化以及在未來地質資料信息進入大數據時代的信息共享和存儲管理問題,也沒有給出明確的解決方案。

1.2 大數據的存儲架構介紹

大數據是近年在雲計算領域中出現的一種新型數據,具有數據量大、數據結構不固定、類型多樣、查詢分析復雜等特點。傳統關系型資料庫管理系統在數據存儲規模、檢索效率等方面已不再適合大數據存儲。NoSQL(Not Only SQL)是與關系資料庫相對的一類資料庫的總稱。這些資料庫放棄了對關系資料庫的支持,轉而採用靈活的、分布式的數據存儲方式管理數據,從而可以滿足大數據存儲和處理的需求。NoSQL基於非關系型數據存儲的設計理念,以鍵值對進行存儲,採用的數據字的結構不固定,每一個元組可以有不一樣的欄位,且每個元組可以根據自己的需要增加一些自己的鍵值對,可以減少一些檢索時間和存儲空間。目前,應用廣泛的 NoSQL 資料庫有 Google BigTable、HBase、MongoDB、Neo4 j、Infinite Graph等。

2 大數據下的地質資料信息存儲架構設計

根據國土資源部做出的全面推進地質資料信息服務集群化產業化工作的部署,國土資源部倡導全國地質資料館使用國土資源部信息中心開發的地質資料信息集群化共享服務平台,實現地質資料信息的存儲和共享。該系統採用了資料庫管理系統MySQL作為數據存儲系統。

為了與現有系統和現有的工作進行對接,並為將來地質資料進入大數據時代後的存儲工作做准備,本文設計了一種能用於海量地質資料信息存儲並且兼容MySQL的分布式的數據存儲架構(圖1)。

整個系統可以根據不同的用戶等級分為不同的用戶管理層,由於圖幅限制,在圖1 中僅僅展示了3級:國家級管理層(即共享服務平台用戶層)、省級管理層以及市級管理層(可根據實際需要延伸至縣級)。

每級管理層的每個用戶可以單獨管理一個伺服器。如國土資源部信息中心可以單獨管理一個伺服器;甘肅省國土資源信息中心可以單獨管理一個伺服器,陝西省國土資源信息中心可以單獨管理一個伺服器;甘肅的若干個市級國土資源局可以根據需要分別管理各自的伺服器。

在伺服器上分別安裝兩套資料庫管理系統,一套是原有的MySQL資料庫管理系統,另一套是為大數據存儲而配備的NoSQL型資料庫管理系統。在伺服器上還專門開發一個資料庫管理器中間件,用於進行用戶層和資料庫的通信以及兩套資料庫之間的通信。

由於各個管理層都各自維護自己的資料庫和數據。當用戶需要進行數據存儲時,他所影響的資料庫僅僅是本地資料庫,存儲效率較高;當用戶需要從多個資料庫讀取數據時,頂層的共享服務平台會根據用戶需求進行任務分解,將任務分發給下層的管理層進行資料庫讀取,由於各個資料庫並行讀取,從而提高了資料庫讀取效率。

圖1 大數據下的地質資料信息存儲架構框圖

2.1 用戶管理層

用戶管理層根據許可權范圍,分為多層(本文以3層為例)。

位於頂層的國家級管理層(共享服務平台用戶層)負責用戶訪問許可權的分配、與其直接關聯的資料庫的訪問、下級管理層任務的分配等工作。

用戶訪問許可權的分配是指為訪問本共享服務平台的個人用戶和單位用戶分配數據的使用許可權、安全性的設計等。

與其直接關聯的資料庫訪問是指直接存儲在其本地資料庫上的數據的訪問。在該資料庫中不僅要存儲所需要的地質資料,還要存儲注冊用戶信息等數據。

下級管理層任務分配是指如果用戶需要訪問多個下層資料庫,用戶只需要輸入查詢這幾個下層資料庫的命令,而如何查找下層資料庫則由該功能來完成。例如某用戶要查找甘肅、陝西、上海、北京的鐵礦分布圖,則用戶只需要輸入這幾個地方及鐵礦等查詢條件,系統將自動把各個省的資料庫查詢任務分派到下級管理層。

同理,位於下層的省級管理層和市級管理層除了沒有用戶訪問許可權功能外,其餘功能與國家級管理層是相同的。各層之間的資料庫通過互聯網相互連接成分布式的資料庫系統。

2.2 MySQL和NoSQL的融合

MySQL是關系型資料庫,它支持SQL查詢語言,而NoSQL是非關系型資料庫,它不支持SQL查詢語言。用戶要想透明地訪問這兩套資料庫,必須要設計資料庫管理器中間件,作為用戶訪問資料庫的統一入口和兩套資料庫管理系統的通信平台。本文所設計的資料庫管理器簡單模型如圖2所示。

圖2 資料庫管理器模型

伺服器管理器通過用戶程序介面與應用程序進行通訊,通過MySQL資料庫介面與MySQL伺服器通訊,通過NoSQL資料庫介面與NoSQL資料庫介面通訊。當應用程序介面接收到一條資料庫訪問命令之後,交由資料庫訪問命令解析器進行命令解析,從而形成MySQL訪問命令或者NoSQL訪問命令,通過相應的資料庫介面訪問資料庫;資料庫返回訪問結果後經過匯總,由應用程序介面返回給應用程序。

兩套資料庫可以通過雙資料庫通信協議進行相互的通信和互訪。此通信協議的建立便於地質工作人員將已經存入MySQL資料庫的不適合結構化存儲的數據轉存到NoSQL資料庫中,從而便於系統的升級和優化。

2.3 系統的存儲和檢索模式

在本存儲框架設計中,系統採用分布式網路存儲模式,即採用可擴展的存儲結構,利用分散在全國各地的多台獨立的伺服器進行數據存儲。這種方式不僅分擔了伺服器的存儲壓力,提高了系統的可靠性和可用性,還易於進行系統擴展。另外,由於地質資料信息存儲的特殊性,各地方用戶的數據存儲工作基本都是在本地伺服器進行,很少通過網路進行遠程存儲,所以數據存儲效率較高。

在一台資料庫伺服器上安裝有MySQL和NoSQL型兩套資料庫管理系統,分別用於存儲地質資料信息中的結構化數據和非結構化數據。其中,NoSQL型資料庫作為主資料庫,用於存儲一部分結構化數據和全部的非結構化數據;而MySQL資料庫作為輔助資料庫,用於存儲一部分結構化的數據,以及舊系統中已經存儲的數據。使用兩套資料庫不僅可以存儲結構化數據而且還可以適用於大數據時代地質資料信息的存儲,因此系統具有很好的適應性和靈活性。

2.4 安全性設計

地質資料信息是國家的機密,地質工作人員必須要保證它的安全。地質資料信息進入數字化時代之後,地質資料常常在計算機以及網路上進行傳輸,地質資料信息的安全傳輸和保存更是地質工作人員必須關注和解決的問題。在本存儲架構的設計中設計的安全問題主要有資料庫存儲安全、數據傳輸安全、數據訪問安全等問題。

資料庫設計時採用多邊安全模型和多級安全模型阻止資料庫中信息和數據的泄露來提高資料庫的安全性能,以保障地質信息在資料庫中的存儲安全;當用戶登錄系統訪問資料庫時,必須進行用戶甄別和實名認證,這主要是對用戶的身份進行有效的識別,防止非法用戶訪問資料庫;在對地質資料進行網路傳輸時,應該首先將數據進行加密,然後再進行網路傳輸,以防止地質信息在傳輸過程中被竊取。

3 結語

提高地質資料數字化信息化水平,是國外地質工作強國的普遍做法。為推進我國地質資料信息服務集群化產業化工作,本文針對我國現有的地質資料信息集群化共享服務平台存在的缺陷和問題,利用大數據存儲管理模式的思想,基於現有系統的存儲架構,設計了一種大數據下的地質資料信息存儲架構,以便於我國地質資料信息服務集群化產業化工作能夠適應大數據時代的數據存儲。該存儲架構的設計只涉及了簡單模型的構建,具體詳細復雜的功能設計和軟體實現還需要在進一步的研究工作中完成。

參考文獻

[1]吳金朋.一種大數據存儲模型的研究與應用[D].北京:北京郵電大學計算機學院,2012.

[2]吳廣君,王樹鵬,陳明,等.海量結構化數據存儲檢索系統[J].計算機研究與發展,2012,49(Suppl):1~5.

[3]黃

,易曉東,李姍姍,等.面向高性能計算機的海量數據處理平台實現與評測[J].計算機研究與發展,2012,49(Suppl):357~361.

❸ 大數據量高並發訪問資料庫結構的設計

大數據量高並發訪問資料庫結構的設計
如果不能設計一個合理的資料庫模型,不僅會增加客戶端和伺服器段程序的編程和維護的難度,而且將會影響系統實際運行的性能。所以,在一個系統開始實施之前,完備的資料庫模型的設計是必須的。
在一個系統分析、設計階段,因為數據量較小,負荷較低。我們往往只注意到功能的實現,而很難注意到性能的薄弱之處,等到系統投入實際運行一段時間後,才發現系統的性能在降低,這時再來考慮提高系統性能則要花費更多的人力物力,而整個系統也不可避免的形成了一個打補丁工程。
所以在考慮整個系統的流程的時候,我們必須要考慮,在高並發大數據量的訪問情況下,我們的系統會不會出現極端的情況。(例如:對外統計系統在7月16日出現的數據異常的情況,並發大數據量的的訪問造成,資料庫的響應時間不能跟上數據刷新的速度造成。具體情況是:在日期臨界時(00:00:00),判斷資料庫中是否有當前日期的記錄,沒有則插入一條當前日期的記錄。在低並發訪問的情況下,不會發生問題,但是當日期臨界時的訪問量相當大的時候,在做這一判斷的時候,會出現多次條件成立,則資料庫里會被插入多條當前日期的記錄,從而造成數據錯誤。),資料庫的模型確定下來之後,我們有必要做一個系統內數據流向圖,分析可能出現的瓶頸。
為了保證資料庫的一致性和完整性,在邏輯設計的時候往往會設計過多的表間關聯,盡可能的降低數據的冗餘。(例如用戶表的地區,我們可以把地區另外存放到一個地區表中)如果數據冗餘低,數據的完整性容易得到保證,提高了數據吞吐速度,保證了數據的完整性,清楚地表達數據元素之間的關系。而對於多表之間的關聯查詢(尤其是大數據表)時,其性能將會降低,同時也提高了客戶端程序的編程難度,因此,物理設計需折衷考慮,根據業務規則,確定對關聯表的數據量大小、數據項的訪問頻度,對此類數據表頻繁的關聯查詢應適當提高數據冗餘設計但增加了表間連接查詢的操作,也使得程序的變得復雜,為了提高系統的響應時間,合理的數據冗餘也是必要的。設計人員在設計階段應根據系統操作的類型、頻度加以均衡考慮。
另外,最好不要用自增屬性欄位作為主鍵與子表關聯。不便於系統的遷移和數據恢復。對外統計系統映射關系丟失(******************)。
原來的表格必須可以通過由它分離出去的表格重新構建。使用這個規定的好處是,你可以確保不會在分離的表格中引入多餘的列,所有你創建的表格結構都與它們的實際需要一樣大。應用這條規定是一個好習慣,不過除非你要處理一個非常大型的數據,否則你將不需要用到它。(例如一個通行證系統,我可以將USERID,USERNAME,USERPASSWORD,單獨出來作個表,再把USERID作為其他表的外鍵)
表的設計具體注意的問題:
1、數據行的長度不要超過8020位元組,如果超過這個長度的話在物理頁中這條數據會佔用兩行從而造成存儲碎片,降低查詢效率。
2、能夠用數字類型的欄位盡量選擇數字類型而不用字元串類型的(電話號碼),這會降低查詢和連接的性能,並會增加存儲開銷。這是因為引擎在處理查詢和連接回逐個比較字元串中每一個字元,而對於數字型而言只需要比較一次就夠了。
3、對於不可變字元類型char和可變字元類型varchar都是8000位元組,char查詢快,但是耗存儲空間,varchar查詢相對慢一些但是節省存儲空間。在設計欄位的時候可以靈活選擇,例如用戶名、密碼等長度變化不大的欄位可以選擇CHAR,對於評論等長度變化大的欄位可以選擇VARCHAR。

4、欄位的長度在最大限度的滿足可能的需要的前提下,應該盡可能的設得短一些,這樣可以提高查詢的效率,而且在建立索引的時候也可以減少資源的消耗。
5、基本表及其欄位之間的關系, 應盡量滿足第三範式。但是,滿足第三範式的資料庫設計,往往不是最好的設計。為了提高資料庫的運行效率,常常需要降低範式標准:適當增加冗餘,達到以空間換時間的目的。
6、若兩個實體之間存在多對多的關系,則應消除這種關系。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一個多對多的關系,現在變為兩個一對多的關系。要將原來兩個實體的屬性合理地分配到三個實體中去。這里的第三個實體,實質上是一個較復雜的關系,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關系,但能處理多對多的關系。
7、主鍵PK的取值方法,PK是供程序員使用的表間連接工具,可以是一無物理意義的數字串, 由程序自動加1來實現。也可以是有物理意義的欄位名或欄位名的組合。不過前者比後者好。當PK是欄位名的組合時,建議欄位的個數不要太多,多了不但索引佔用空間大,而且速度也慢。
8、主鍵與外鍵在多表中的重復出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重復出現, 才是數據冗餘!而且是一種低級冗餘,即重復性的冗餘。高級冗餘不是欄位的重復出現,而是欄位的派生出現。
〖例4〗:商品中的「單價、數量、金額」三個欄位,「金額」就是由「單價」乘以「數量」派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是為了提高處理速度。只有低級冗餘才會增加數據的不一致性,因為同一數據,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重復性冗餘)。
9、中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉庫除外)。臨時表是程序員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程序員自己用程序自動維護。
10、防止資料庫設計打補丁的方法是「三少原則」
(1) 一個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了重復的多餘的實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;
(2) 一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外鍵,所以組合主鍵的欄位個數少了,不僅節省了運行時間,而且節省了索引存儲空間;
(3) 一個表中的欄位個數越少越好。只有欄位的個數少了,才能說明在系統中不存在數據重復,且很少有數據冗餘,更重要的是督促讀者學會「列變行」,這樣就防止了將子表中的欄位拉入到主表中去,在主表中留下許多空餘的欄位。所謂「列變行」,就是將主表中的一部分內容拉出去,另外單獨建一個子表。這個方法很簡單,有的人就是不習慣、不採納、不執行。
資料庫設計的實用原則是:在數據冗餘和處理速度之間找到合適的平衡點。「三少」是一個整體概念,綜合觀點,不能孤立某一個原則。該原則是相對的,不是絕對的。「三多」原則肯定是錯誤的。試想:若覆蓋系統同樣的功能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性)的E--R圖,要好得多。
提倡「三少」原則,是叫讀者學會利用資料庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全局綜合資料庫。集成的程度越高,數據共享性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。
提倡「三少」原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的「垃圾堆」,或資料庫表的「大雜院」,最後造成資料庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。
「三多」原則任何人都可以做到,該原則是「打補丁方法」設計資料庫的歪理學說。「三少」原則是少而精的原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用「打補丁方法」設計資料庫的理論依據。
11、在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:
(1) 在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。
(2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在資料庫外面,以文件系統方式用編程語言計算處理完成之後,最後才入庫追加到表中去。
(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
(5) 在使用面向數據的SQL語言進行程序設計時,盡量採取優化演算法。
總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程序實現級優化,這三個層次上同時下功夫。
主鍵設計:
1、不建議用多個欄位做主鍵,單個表還可以,但是關聯關系就會有問題,主鍵自增是高性能的。
2、一般情況下,如果有兩個外鍵,不建議採用兩個外鍵作為聯合住建,另建一個欄位作為主鍵。除非這條記錄沒有邏輯刪除標志,且該表永遠只有一條此聯合主鍵的記錄。
3、一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處於葉子部位的實體, 可以定義主鍵,也可以不定義主鍵(因為它無子孫), 但必須要有外鍵(因為它有父親)。
主鍵與外鍵的設計,在全局資料庫的設計中,佔有重要地位。當全局資料庫的設計完成以後,有個美國資料庫設計專家說:「鍵,到處都是鍵,除了鍵之外,什麼也沒有」,這就是他的資料庫設計經驗之談,也反映了他對信息系統核心(數據模型)的高度抽象思想。因為:主鍵是實體的高度抽象,主鍵與、外鍵的配對,表示實體之間的連接。

❹ 大數據量的資料庫表設計技巧

大數據量的資料庫表設計技巧
即使是一個非常簡單的資料庫應用系統,它的數據量增加到一定程度也會引起發一系列問題。如果在設計資料庫的時候,就提前考慮這些問題,可以避免由於系統反映遲緩而引起的用戶抱怨。
技巧1:盡量不要使用代碼。比如性別這個欄位常見的做法:1代表男,0代表女。這樣的做法意味著每一次查詢都需要關聯代碼表。
技巧2:歷史數據中所有欄位與業務表不要有依賴關系。如保存列印發票的時候,不要只保留單位代碼,而應當把單位名稱也保存下來。
技巧3:使用中間表。比如職工工資,可以把每一位職工工資的合計保存在一張中間表中,當職工某一工資項目發生變化的時候,同時對中間表的數據做相應更新。
技巧4:使用統計表。需要經常使用的統計數據,生成之後可以用專門的表來保存。
技巧5:分批保存歷史數據。歷史數據可以分段保存,比如2003年的歷史數據保存在 《2003表名》中,而2004年的歷史數據則保存在《2004表名》中。
技巧6:把不常用的數據從業務表中移到歷史表。比如職工檔案表,當某一職工離開公司以後,應該把他的職工檔案表中的信息移動到《離職職工檔案表》中。
1、經常查詢的和不常用的分開幾個表,也就是橫向切分
2、把不同類型的分成幾個表,縱向切分
3、常用聯接的建索引
4、伺服器放幾個硬碟,把數據、日誌、索引分盤存放,這樣可以提高IO吞吐率
5、用優化器,優化你的查詢
6、考慮冗餘,這樣可以減少連接
7、可以考慮建立統計表,就是實時生成總計表,這樣可以避免每次查詢都統計一次
8、用極量數據測試一下數據
速度,影響它的因數太多了,且數據量越大越明顯。
1、存儲將硬碟分成NTFS格式,NTFS比FAT32快,並看你的數據文件大小,1G以上你可以採用多資料庫文件,這樣可以將存取負載分散到多個物理硬碟或磁碟陣列上。
2、tempdbtempdb也應該被單獨的物理硬碟或磁碟陣列上,建議放在RAID0上,這樣它的性能最高,不要對它設置最大值讓它自動增長
3、日誌文件日誌文件也應該和數據文件分開在不同的理硬碟或磁碟陣列上,這樣也可以提高硬碟I/O性能。
4、分區視圖就是將你的數據水平分割在集群伺服器上,它適合大規模OLTP,SQL群集上,如果你資料庫不是訪問特別大不建議使用。
5、簇索引你的表一定有個簇索引,在使用簇索引查詢的時候,區塊查詢是最快的,如用between,應為他是物理連續的,你應該盡量減少對它的updaet,應為這可以使它物理不連續。
6、非簇索引非簇索引與物理順序無關,設計它時必須有高度的可選擇性,可以提高查詢速度,但對表update的時候這些非簇索引會影響速度,且佔用空間大,如果你願意用空間和修改時間換取速度可以考慮。
7、索引視圖如果在視圖上建立索引,那視圖的結果集就會被存儲起來,對與特定的查詢性能可以提高很多,但同樣對update語句時它也會嚴重減低性能,一般用在數據相對穩定的數據倉庫中。
8、維護索引你在將索引建好後,定期維護是很重要的,用dbccshowcontig來觀察頁密度、掃描密度等等,及時用dbccindexdefrag來整理表或視圖的索引,在必要的時候用dbccdbreindex來重建索引可以受到良好的效果。
不論你是用幾個表1、2、3點都可以提高一定的性能,5、6、8點你是必須做的,至於4、7點看你的需求,我個人是不建議的。

❺ 如何搭建大數據分析平台

本人為大數據技術員,可以分享一些心得體驗給題主:
其實題主需要搞清楚以下幾個問題,搞清楚了,其實問題的答案也就有了:
1、是從個人學習成長的角度想搭建平台自學?還是現在的公司需要大數據技術進行分析?——如果是從個人學習成長的角度,建議直接按照Hadoop或者Spark的官網教程安裝即可,建議看官網(英文),在大數據技術領域,英語的掌握是非常重要的,因為涉及到組件選型、日後的安裝、部署、運維,所有的任務運行信息、報錯信息都是英文的,包括遇到問題的解答,所以還是非常重要的。如果是公司需要進行大數據分析,那麼還要研究以下幾個問題:為什麼需要搭建大數據分析平台?要解決什麼業務問題?需要什麼樣的分析?數據量有多少?是否有實時分析的需求?是否有BI報表的需求?——這里舉一個典型的場景:公司之前採用Oracle或MySQL搭建的業務資料庫,而且有簡單的數據分析,或者可能采購了BI系統,就是直接用業務系統資料庫進行支持的,現在隨著數據量越來越大,那麼就需要採用大數據技術進行擴容。
搞清楚需求之後,按照以下的步驟進行:
1、整體方案設計;整體方案設計時需要考慮的因素:數據量有多少:幾百GB?幾十TB?數據存儲在哪裡:存儲在MySQL中?Oracle中?或其他資料庫中?數據如何從現在的存儲系統進入到大數據平台中?如何將結果數據寫出到其他存儲系統中?分析主題是什麼:只有幾個簡單指標?還是說有很多統計指標,需要專門的人員去梳理,分組,並進行產品設計;是否需要搭建整體數倉?是否需要BI報表:業務人員有無操作BI的能力,或團隊組成比較簡單,不需要前後端人員投入,使用BI比較方便;是否需要實時計算?
2、組件選型;架構設計完成後就需要組件選型了,這時候最好是比較資深的架構師參與設計,選型包括:離線計算引擎:Hadoop、Spark、Tez……實時計算引擎:Storm、Flink、Samza、Spark Streaming……BI軟體:Tableau、QlikView、帆軟……
3、安裝部署;選型完成後,就可以進行安裝部署了,這部分其實是最簡單的,直接按照每個組件的部署要求安裝即可。
4、另一種選擇:採用商用軟體如果是企業需要搭建大數據平台,那麼還有一種選擇是直接採用商用的數據平台。市面上有很多成熟的商用大數據平台,Cloudera、星環、華為、亞信等等,都有對應的產品線,業內數據大咖袋鼠雲就有一款非常優秀的大數據平台產品:數棧。主要有以下幾個特點:
1.一站式。一站式數據開發產品體系,滿足企業建設數據中台過程中的多樣復雜需求。
2.兼容性強。支持對接多種計算引擎,使更多企業「半路上車」。
3.開箱即用。基於Web的圖形化操作界面,開箱即用,快速上手。
4.性價比高。滿足中小企業數據中台建設需求,降低企業投入成本。

❻ 資料庫設計的步驟有哪些

資料庫設計過程分為以下六個階段:

1、需求分析階段

准確理解和分析用戶需求(包括數據和處理),它是整個設計過程的基礎,也是最困難、最耗時的一步。

2、概念結構設計階段

是整個資料庫設計的關鍵,通過對用戶需求的集成、歸納和抽象,形成了一個獨立於特定資料庫管理系統的概念模型。

3、邏輯結構設計階段

將概念結構轉換為DBMS支持的數據模型,對其進行優化。

4、資料庫物理設計階段

為邏輯數據模型選擇最適合應用程序環境的物理結構(包括存儲結構和存取方法)。

5、資料庫實現階段

根據邏輯設計和物理設計的結果,使用資料庫管理系統提供的數據語言、工具和主機語言,建立資料庫,編寫調試應用程序,組織數據倉庫,並進行試運行。

6、資料庫運行維護階段

資料庫應用系統經試運行後可投入正式運行,在資料庫系統運行過程中,需要不斷地對其進行評估、調整和修改。

註:在設計過程中,將資料庫的設計與資料庫中數據處理的設計緊密結合起來,在每個階段同時對這兩個方面的要求進行分析、抽象、設計和實現,相互借鑒和補充,從而完善這兩個方面的設計。

(6)大數據資料庫設計方案擴展閱讀:

資料庫設計技術

1、清晰的用戶需求:作為計算機軟體開發的重要基礎,資料庫設計直接反映了用戶的需求。資料庫必須與用戶緊密溝通,緊密結合用戶需求。在定義了用戶開發需求之後,設計人員還需要反映具體的業務關系和流程。

2、注意數據維護:設計面積過大、數據過於復雜是資料庫設計中常見的問題,設計人員應注意數據維護。

3、增加命名規范化:命名資料庫程序和文件非常重要,不僅要避免重復的名稱,還要確保數據處於平衡狀態。為了降低檢索信息和資源的復雜度和難度,設計人員應了解資料庫程序與文件之間的關系,並靈活使用大小寫字母命名。

4、充分考慮資料庫的優化和效率:考慮到資料庫的優化和效率,設計人員需要對不同表的存儲數據採用不同的設計方法。在設計中,還應該使用最少的表和最弱的關系來實現海量數據的存儲。

5、不斷調整數據之間的關系:不斷調整和簡化數據之間的關系,可以有效減少設計與數據之間的聯系,進而為維護數據之間的平衡和提高數據讀取效率提供保障。

6、合理使用索引:資料庫索引通常分為聚集索引和非聚集索引,這樣可以提高數據搜索的效率。

參考資料來源:網路-資料庫設計

❼ 大數據分析系統平台方案有哪些

大數據分析系統平台方案有很多,其中就有廣州思邁特軟體Smartbi的大數據分析系統平台方案。大數據分析系統平台方案深度洞察用戶數據,幫企業用數據驅動產品改進及運營監控,思邁特軟體Smartbi是企業級商業智能和大數據分析品牌,經過多年持續自主研發,凝聚大量商業智能最佳實踐經驗,整合了各行業的數據分析和決策支持的功能需求。滿足最終用戶在企業級報表、數據可視化分析、自助探索分析、數據挖掘建模、AI智能分析等大數據分析需求。
Smartbi產品功能設計全面,涵蓋數據提取、數據管理、數據分析、數據共享四個環節,幫助客戶從數據的角度描述業務現狀,分析業務原因,預測業務趨勢,推動業務變革。
思邁特軟體Smartbi是國家認定的「高新技術企業」,廣東省認定的「大數據培育企業」, 廣州市認定的「兩高四新企業」,獲得了來自國家、地方政府、國內外權威分析機構、行業組織、知名媒體的高度關注和認可,斬獲「大數據百強企業」、「中國十佳商業智能方案商」、「中國科技創新企業100強」等100+榮譽獎項!
憑借NLP和數據挖掘功能入選Gartner「中國AI創業公司代表廠商(2020)」,憑借思邁特軟體Smartbi入選「Gartner?增強分析2020代表廠商」。

❽ 大型資料庫設計原則

一個好的資料庫產品不等於就有一個好的應用系統 如果不能設計一個合理的資料庫模型 不僅會增加客戶端和伺服器段程序的編程和維護的難度 而且將會影響系統實際運行的性能 一般來講 在一個MIS系統分析 設計 測試和試運行階段 因為數據量較小 設計人員和測試人員往往只注意到功能的實現 而很難注意到性能的薄弱之處 等到系統投入實際運行一段時間後 才發現系統的性能在降低 這時再來考慮提高系統性能則要花費更多的人力物力 而整個系統也不可避免的形成了一個打補丁工程 筆者依據多年來設計和使用資料庫的經驗 提出以下一些設計准則 供同仁們參考

命名的規范

不同的資料庫產品對對象的命名有不同的要求 因此 資料庫中的各種對象的命名 後台程序的代碼編寫應採用大小寫敏感的形式 各種對象命名長度不要超過 個字元 這樣便於應用系統適應不同的資料庫

游標(Cursor)的慎用

游標提供了對特定集合中逐行掃描的手段 一般使用游標逐行遍歷數據 根據取出的數據不同條件進行不同的操作 尤其對多表和大表定義的游標(大的數據集合)循環很容易使程序進入一個漫長的等特甚至死機 筆者在某市《住房公積金管理系統》進行日終帳戶滾積數計息處理時 對一個 萬個帳戶的游標處理導致程序進入了一個無限期的等特(後經測算需 個小時才能完成)(硬體環境 Alpha/ Mram Sco Unix Sybase ) 後根據不同的條件改成用不同的UPDATE語句得以在二十分鍾之內完成 示例如下

Declare Mycursor cursor for select count_no from COUNT

Open Mycursor

Fetch Mycursor into @vcount_no

While (@@sqlstatus= )

Begin

If @vcount_no= 條件

操作

If @vcount_no= 條件

操作

Fetch Mycursor into @vcount_no

End

改為

Update COUNT set 操作 for 條件

Update COUNT set 操作 for 條件

在有些場合 有時也非得使用游標 此時也可考慮將符合條件的數據行轉入臨時表中 再對臨時表定義游標進行操作 可時性能得到明顯提高 筆者在某地市〈電信收費系統〉資料庫後台程序設計中 對一個表( 萬行中符合條件的 多行數據)進行游標操作(硬體環境 PC伺服器 PII Mram NT Ms Sqlserver ) 示例如下

Create #tmp /* 定義臨時表 */

(欄位

欄位

)

Insert into #tmp select * from TOTAL where

條件 /* TOTAL中 萬行 符合條件只有幾十行 */

Declare Mycursor cursor for select * from #tmp

/*對臨時表定義游標*/

索引(Index)的使用原則

創建索引一般有以下兩個目的 維護被索引列的唯一性和提供快速訪問表中數據的策略 大型資料庫有兩種索引即簇索引和非簇索引 一個沒有簇索引的表是按堆結構存儲數據 所有的數據均添加在表的尾部 而建立了簇索引的表 其數據在物理上會按照簇索引鍵的順序存儲 一個表只允許有一個簇索引 因此 根據B樹結構 可以理解添加任何一種索引均能提高按索引列查詢的速度 但會降低插入 更新 刪除操作的性能 尤其是當填充因子(Fill Factor)較大時 所以對索引較多的表進行頻繁的插入 更新 刪除操作 建表和索引時因設置較小的填充因子 以便在各數據頁中留下較多的自由空間 減少頁分割及重新組織的工作

數據的一致性和完整性

為了保證資料庫的一致性和完整性 設計人員往往會設計過多的表間關聯(Relation) 盡可能的降低數據的冗餘 表間關聯是一種強制性措施 建立後 對父表(Parent Table)和子表(Child Table)的插入 更新 刪除操作均要佔用系統的開銷 另外 最好不要用Identify 屬性欄位作為主鍵與子表關聯 如果數據冗餘低 數據的完整性容易得到保證 但增加了表間連接查詢的操作 為了提高系統的響應時間 合理的數據冗餘也是必要的 使用規則(Rule)和約束(Check)來防止系統操作人員誤輸入造成數據的錯誤是設計人員的另一種常用手段 但是 不必要的規則和約束也會佔用系統的不必要開銷 需要注意的是 約束對數據的有效性驗證要比規則快 所有這些 設計人員在設計階段應根據系統操作的類型 頻度加以均衡考慮

事務的陷阱

事務是在一次性完成的一組操作 雖然這些操作是單個的操作 SQL Server能夠保證這組操作要麼全部都完成 要麼一點都不做 正是大型資料庫的這一特性 使得數據的完整性得到了極大的保證

眾所周知 SQL Server為每個獨立的SQL語句都提供了隱含的事務控制 使得每個DML的數據操作得以完整提交或回滾 但是SQL Server還提供了顯式事務控制語句

BEGIN TRANSACTION 開始一個事務

MIT TRANSACTION 提交一個事務

ROLLBACK TRANSACTION 回滾一個事務

事務可以嵌套 可以通過全局變數@@trancount檢索到連接的事務處理嵌套層次 需要加以特別注意並且極容易使編程人員犯錯誤的是 每個顯示或隱含的事物開始都使得該變數加 每個事務的提交使該變數減 每個事務的回滾都會使得該變數置 而只有當該變數為 時的事務提交(最後一個提交語句時) 這時才把物理數據寫入磁碟

資料庫性能調整

在計算機硬體配置和網路設計確定的情況下 影響到應用系統性能的因素不外乎為資料庫性能和客戶端程序設計 而大多數資料庫設計員採用兩步法進行資料庫設計 首先進行邏輯設計 而後進行物理設計 資料庫邏輯設計去除了所有冗餘數據 提高了數據吞吐速度 保證了數據的完整性 清楚地表達數據元素之間的關系 而對於多表之間的關聯查詢(尤其是大數據表)時 其性能將會降低 同時也提高了客 戶端程序的編程難度 因此 物理設計需折衷考慮 根據業務規則 確定對關聯表的數據量大小 數據項的訪問頻度 對此類數據表頻繁的關聯查詢應適當提高數據冗餘設計

數據類型的選擇

數據類型的合理選擇對於資料庫的性能和操作具有很大的影響 有關這方面的書籍也有不少的闡述 這里主要介紹幾點經驗

Identify欄位不要作為表的主鍵與其它表關聯 這將會影響到該表的數據遷移

Text 和Image欄位屬指針型數據 主要用來存放二進制大型對象(BLOB) 這類數據的操作相比其它數據類型較慢 因此要避開使用

日期型欄位的優點是有眾多的日期函數支持 因此 在日期的大小比較 加減操作上非常簡單 但是 在按照日期作為條件的查詢操作也要用函數 相比其它數據類型速度上就慢許多 因為用函數作為查詢的條件時 伺服器無法用先進的性能策略來優化查詢而只能進行表掃描遍歷每行

例如 要從DATA_TAB 中(其中有一個名為DATE的日期欄位)查詢 年的所有記錄

lishixin/Article/program/Oracle/201311/17929