構建大資料庫
Ⅰ 怎樣建立一個大型資料庫
建立一個資料庫當你想建立一個表時,你必須按照以下的步驟先建立一個資料庫:在sql Enterprise Manager中,選擇你的資料庫的名字。從Manage菜單中選擇Databases選項。管理資料庫的窗口就出現了。在工具條上點擊新建資料庫的按鈕,就會出現新建資料庫的對話框(如圖3.5所示)。注意</B>現在版本的SQL Server(version 6.5)最多能有32,767個資料庫。每個資料庫的最小容量是1MB,最大容量是ITB。在SQL Enterprise Manager對話框中的新建資料庫對話框。 填寫你的資料庫所要使用的名字(不能有空格)。 然後,填寫你要建立的資料庫所在的資料庫設備(例如,他就是你在前面一步建立的資料庫設備)。 這個新建資料庫的對話框會以圖形的方式顯示所有資料庫設備的已經使用和沒有使用的空間。 當你建立一個資料庫時,你可以選擇去建立事務日誌。為了建立事務日誌,你需要指定一個log device(日誌資料庫設備)。在新建資料庫對話框中,打開標有LogDevice的下拉式框,然後選擇一個資料庫設備和用於日誌的空間大小。注意</B>每個資料庫都有它自己的事務處理日誌,它記錄了對資料庫每一個請求(modify,insert,delete)。日誌文件是對資料庫的內部處理過程的一種監視。它允許你對資料庫執行updates, inserts, deletes等操作。所以在需要的時候,你也可以取消這些操作的結果。在系統沒有正確地關閉,而只是停機或重新啟動時,這些事務處理的日誌是很有用的-在重新啟動時,SQL Server會根據事務處理日誌來恢復數據。注意</B>當你把事務處理日誌向一個mp 資料庫傾倒時,你的事務處理日誌會被截短。你也可以強制地使你的事務日誌縮短。如果你想知道有關事務日誌的更多的信息,請查詢SQL 在線幫助文件,用關鍵字transaction log查找。6當你完成在新建資料庫的對話框中的這些問題的回答,點擊Create Now 按鈕。你的資料庫就會在Databases文件夾下顯示出來。
Ⅱ 如何建立一個資料庫
MySQL安裝完成後,要想將數據存儲到資料庫的表中,首先要創建一個資料庫。創建資料庫就是在資料庫系統中劃分一塊存儲數據的空間。在MySQL中,創建資料庫的基本語法格式如下所示:
CREATE DATABASE 資料庫名稱;
在上述語法格式中,「CREATE DATABASE」是固定的SQL語句,專門用來創建資料庫。「資料庫名稱」是唯一的,不可重復出現。
例如下面我們創建一個名稱為itcast的資料庫,SQL語句如下所示:
CREATE DATABASE itcast;
執行結果如下所示:
上述執行結果顯示出了資料庫itcast的創建信息,例如,資料庫itcast的編碼方式為utf-8。
Ⅲ 搭建大數據平台的具體步驟是什麼
1、操作體系的挑選
操作體系一般使用開源版的RedHat、Centos或許Debian作為底層的構建渠道,要根據大數據渠道所要建立的數據剖析東西能夠支撐的體系,正確的挑選操作體系的版本。
2、建立Hadoop集群
Hadoop作為一個開發和運行處理大規模數據的軟體渠道,實現了在大量的廉價計算機組成的集群中對海量數據進行分布式計算。Hadoop結構中最核心的規劃是HDFS和MapRece,HDFS是一個高度容錯性的體系,合適布置在廉價的機器上,能夠供給高吞吐量的數據訪問,適用於那些有著超大數據集的應用程序;MapRece是一套能夠從海量的數據中提取數據最終回來成果集的編程模型。在生產實踐應用中,Hadoop非常合適應用於大數據存儲和大數據的剖析應用,合適服務於幾千台到幾萬台大的伺服器的集群運行,支撐PB級別的存儲容量。
3、挑選數據接入和預處理東西
面臨各種來源的數據,數據接入便是將這些零散的數據整合在一起,歸納起來進行剖析。數據接入首要包括文件日誌的接入、資料庫日誌的接入、關系型資料庫的接入和應用程序等的接入,數據接入常用的東西有Flume,Logstash,NDC(網易數據運河體系),sqoop等。
4、數據存儲
除了Hadoop中已廣泛應用於數據存儲的HDFS,常用的還有分布式、面向列的開源資料庫Hbase,HBase是一種key/value體系,布置在HDFS上,與Hadoop一樣,HBase的目標首要是依靠橫向擴展,通過不斷的添加廉價的商用伺服器,添加計算和存儲才能。同時hadoop的資源管理器Yarn,能夠為上層應用供給統一的資源管理和調度,為集群在利用率、資源統一等方面帶來巨大的優點。
5、挑選數據挖掘東西
Hive能夠將結構化的數據映射為一張資料庫表,並供給HQL的查詢功能,它是建立在Hadoop之上的數據倉庫根底架構,是為了削減MapRece編寫工作的批處理體系,它的出現能夠讓那些通曉SQL技術、可是不熟悉MapRece、編程才能較弱和不擅長Java的用戶能夠在HDFS大規模數據集上很好的利用SQL言語查詢、匯總、剖析數據。
6、數據的可視化以及輸出API
關於處理得到的數據能夠對接主流的BI體系,比如國外的Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網易有數(可免費試用)等,將成果進行可視化,用於決策剖析;或許迴流到線上,支撐線上業務的開展。
Ⅳ 大型資料庫的設計原則與開發技巧
隨著計算機技術越來越廣泛地應用於國民經濟的各個領域 在計算機硬體不斷微型化的同時 應用系統向著復雜化 大型化的方向發展 資料庫是整個系統的核心 它的設計直接關系系統執行的效率和系統的穩定性 因此在軟體系統開發中 資料庫設計應遵循必要的資料庫範式理論 以減少冗餘 保證數據的完整性與正確性 只有在合適的資料庫產品上設計出合理的資料庫模型 才能降低整個系統的編程和維護難度 提高系統的實際運行效率 雖然對於小項目或中等規模的項目開發人員可以很容易地利用範式理論設計出一套符合要求的資料庫 但對於一個包含大型資料庫的軟體項目 就必須有一套完整的設計原則與技巧
一 成立數據小組
大型資料庫數據元素多 在設計上有必要成立專門的數據小組 由於資料庫設計者不一定是使用者 對系統設計中的數據元素不可能考慮周全 資料庫設計出來後 往往難以找到所需的庫表 因此數據小組最好由熟悉業務的項目骨幹組成
數據小組的職能並非是設計資料庫 而是通過需求分析 在參考其他相似系統的基礎上 提取系統的基本數據元素 擔負對資料庫的審核 審核內容包括審核新的資料庫元素是否完全 能否實現全部業務需求 對舊資料庫(如果存在舊系統)的分析及數據轉換 資料庫設計的審核 控制及必要調整
二 設計原則
規范命名 所有的庫名 表名 域名必須遵循統一的命名規則 並進行必要說明 以方便設計 維護 查詢
控制欄位的引用 在設計時 可以選擇適當的資料庫設計管理工具 以方便開發人員的分布式設計和數據小組的集中審核管理 採用統一的命名規則 如果設計的欄位已經存在 可直接引用 否則 應重新設計
庫表重復控制 在設計過程中 如果發現大部分欄位都已存在 開發人員應懷疑所設計的庫表是否已存在 通過對欄位所在庫表及相應設計人員的查詢 可以確認庫表是否確實重復
並發控制 設計中應進行並發控制 即對於同一個庫表 在同一時間只有一個人有控制權 其他人只能進行查詢
必要的討論 資料庫設計完成後 數據小組應與相關人員進行討論 通過討論來熟悉資料庫 從而對設計中存在的問題進行控制或從中獲取資料庫設計的必要信息
數據小組的審核 庫表的定版 修改最終都要通過數據小組的審核 以保證符合必要的要求
頭文件處理 每次數據修改後 數據小組要對相應的頭文件進行修改(可由管理軟體自動完成) 並通知相關的開發人員 以便進行相應的程序修改
三 設計技巧
分類拆分數據量大的表 對於經常使用的表(如某些參數表或代碼對照表) 由於其使用頻率很高 要盡量減少表中的記錄數量 例如 銀行的戶主賬表原來設計成一張表 雖然可以方便程序的設計與維護 但經過分析發現 由於數據量太大 會影響數據的迅速定位 如果將戶主賬表分別設計為活期戶主賬 定期戶主賬及對公戶主賬等 則可以大大提高查詢效率
索引設計 對於大的資料庫表 合理的索引能夠提高整個資料庫的操作效率 在索引設計中 索引欄位應挑選重復值較少的欄位 在對建有復合索引的欄位進行檢索時 應注意按照復合索引欄位建立的順序進行 例如 如果對一個 萬多條記錄的流水表以日期和流水號為序建立復合索引 由於在該表中日期的重復值接近整個表的記錄數 用流水號進行查詢所用的時間接近 秒 而如果以流水號為索引欄位建立索引進行相同的查詢 所用時間不到 秒 因此在大型資料庫設計中 只有進行合理的索引欄位選擇 才能有效提高整個資料庫的操作效率
數據操作的優化 在大型資料庫中 如何提高數據操作效率值得關注 例如 每在資料庫流水表中增加一筆業務 就必須從流水控製表中取出流水號 並將其流水號的數值加一 正常情況下 單筆操作的反應速度尚屬正常 但當用它進行批量業務處理時 速度會明顯減慢 經過分析發現 每次對流水控製表中的流水號數值加一時都要鎖定該表 而該表卻是整個系統操作的核心 有可能在操作時被其他進程鎖定 因而使整個事務操作速度變慢 對這一問題的解決的辦法是 根據批量業務的總筆數批量申請流水號 並對流水控製表進行一次更新 即可提高批量業務處理的速度 另一個例子是對插表的優化 對於大批量的業務處理 如果在插入資料庫表時用普通的Insert語句 速度會很慢 其原因在於 每次插表都要進行一次I/O操作 花費較長的時間 改進後 可以用Put語句等緩沖區形式等滿頁後再進行I/O操作 從而提高效率 對大的資料庫表進行刪除時 一般會直接用Delete語句 這個語句雖然可以進行小表操作 但對大表卻會因帶來大事務而導致刪除速度很慢甚至失敗 解決的方法是去掉事務 但更有效的辦法是先進行Drop操作再進行重建
資料庫參數的調整 資料庫參數的調整是一個經驗不斷積累的過程 應由有經驗的系統管理員完成 以Informix資料庫為例 記錄鎖的數目太少會造成鎖表的失敗 邏輯日誌的文件數目太少會造成插入大表失敗等 這些問題都應根據實際情況進行必要的調整
必要的工具 在整個資料庫的開發與設計過程中 可以先開發一些小的應用工具 如自動生成庫表的頭文件 插入數據的初始化 數據插入的函數封裝 錯誤跟蹤或自動顯示等 以此提高資料庫的設計與開發效率
避免長事務 對單個大表的刪除或插入操作會帶來大事務 解決的辦法是對參數進行調整 也可以在插入時對文件進行分割 對於一個由一系列小事務順序操作共同構成的長事務(如銀行交易系統的日終交易) 可以由一系列操作完成整個事務 但其缺點是有可能因整個事務太大而使不能完成 或者 由於偶然的意外而使事務重做所需的時間太長 較好的解決方法是 把整個事務分解成幾個較小的事務 再由應用程序控制整個系統的流程 這樣 如果其中某個事務不成功 則只需重做該事務 因而既可節約時間 又可避免長事務
適當超前 計算機技術發展日新月異 資料庫的設計必須具有一定前瞻性 不但要滿足當前的應用要求 還要考慮未來的業務發展 同時必須有利於擴展或增加應用系統的處理功能
lishixin/Article/program/SQL/201311/16498
Ⅳ 建大資料庫需要多少投資資料庫db
oracle 資料庫 要買台伺服器 ,加oracle資料庫軟體
小投資10來萬也行 ,資料庫伺服器牛的上百萬也有
Ⅵ 大型資料庫設計原則
一個好的資料庫產品不等於就有一個好的應用系統 如果不能設計一個合理的資料庫模型 不僅會增加客戶端和伺服器段程序的編程和維護的難度 而且將會影響系統實際運行的性能 一般來講 在一個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