資料庫設計大數據
Ⅰ 大數據量的系統的資料庫結構如何設計
1、把你表中經常查詢的和不常用的分開幾個表,也就是橫向切分
2、把不同類型的分成幾個表,縱向切分
3、常用聯接的建索引
4、伺服器放幾個硬碟,把數據、日誌、索引分盤存放,這樣可以提高IO吞吐率
5、用優化器,優化你的查詢
6、考慮冗餘,這樣可以減少連接
7、可以考慮建立統計表,就是實時生成總計表,這樣可以避免每次查詢都統計一次
mrzxc 等說的好,考慮你的系統,注意負載平衡,查詢優化,25 萬並不大,可以建一個表,然後按mrzxc 的3 4 5 7 優化。 速度,影響它的因數太多了,且數據量越大越明顯。
1、存儲 將硬碟分成NTFS格式,NTFS比FAT32快,並看你的數據文件大小,1G以上你可以採用多資料庫文件,這樣可以將存取負載分散到多個物理硬碟或磁碟陣列上。
2、tempdb tempdb也應該被單獨的物理硬碟或磁碟陣列上,建議放在RAID 0上,這樣它的性能最高,不要對它設置最大值讓它自動增長
3、日誌文件 日誌文件也應該和數據文件分開在不同的理硬碟或磁碟陣列上,這樣也可以提高硬碟I/O性能。
4、分區視圖 就是將你的數據水平分割在集群伺服器上,它適合大規模OLTP,SQL群集上,如果你資料庫不是訪問特別大不建議使用。
5、簇索引 你的表一定有個簇索引,在使用簇索引查詢的時候,區塊查詢是最快的,如用between,應為他是物理連續的,你應該盡量減少對它的updaet,應為這可以使它物理不連續。
6、非簇索引 非簇索引與物理順序無關,設計它時必須有高度的可選擇性,可以提高查詢速度,但對表update的時候這些非簇索引會影響速度,且佔用空間大,如果你願意用空間和修改時間換取速度可以考慮。
7、索引視圖 如果在視圖上建立索引,那視圖的結果集就會被存儲起來,對與特定的查詢性能可以提高很多,但同樣對update語句時它也會嚴重減低性能,一般用在數據相對穩定的數據倉庫中。
8、維護索引 你在將索引建好後,定期維護是很重要的,用dbcc showcontig來觀察頁密度、掃描密度等等,及時用dbcc indexdefrag來整理表或視圖的索引,在必要的時候用dbcc dbreindex來重建索引可以受到良好的效果。 不論你是用幾個表1、2、3點都可以提高一定的性能,5、6、8點你是必須做的,至於4、7點看你的需求,我個人是不建議的。打了半個多小時想是在寫論文,希望對你有幫助。
Ⅱ 利用MySQL資料庫如何解決大數據量存儲問題
mysql解決大數據量存儲問題的方法是分表。
1.如何去分表
根據什麼策略把現有表中的數據分到多個表中,並且還有考慮到以後的擴展性上。
建立一張索引表,用戶id與資料庫id對應,(這里他將相同結構的表分在了不同的資料庫中進一步減少壓力,但同時對於數據的同步也需要通過其他手段來解決),其本質也是分表了同時分庫了。這么做的好處是便於以後的擴展,但損耗一點性能,因為會多一次查詢。這樣索引表可能會成為新的瓶頸,除非用戶不會一直增長哈。
我的做法屬於另一種,寫了個演算法通過計算某列值,按照一定規律將數據大致均分在每個分表中。至於擴展性,寫演算法時候考慮進去了以後增加分表數的問題了。
選擇哪種策略,是要看自己的表的業務特點了,方法沒有絕對的優缺,還是要根據自己的需求選取。
2.分表之後主鍵的維護
分表之前,主鍵就是自動遞增的bigint型。所以主鍵的格式已經提早被確定了,像什麼uuid之類的就被直接pass掉了。
還有想過自己寫一個主鍵生成程序,利用Java 的Atomic原子量特性,但是考慮還需要增加工作量並且高並發下,這里很可能是個隱患。
還有就是通過應用層上管理主鍵,如redis中有原子性的遞增。
Ⅲ 怎樣設計一個良好大數據處理的解決方案
在園子裡面雖然待的時間不久,不過也有一年有餘了,遇到了問題,第一個想到的就是去園子裡面借鑒一些前輩們的經驗,以免自己走彎路。漸漸的自己也有了一定的獨立處理問題的能力,大神們不要噴我是標題黨,標題是疑問,小弟不才,遇到了一些數據同步問題或是解決方案錯誤的麻煩,需要求助大神們,如果您不是趕時間,幫忙看完這篇文章,留上兩句言就可以了,小弟不勝感激。好了,不多扯淡了,趕快說正事。1、項目介紹 下圖為目前項目的整體框架圖,大至如下:這是一個winform系統,採用了.NET Framework3.5和SQL Server2008編寫與存儲。這是一個某車輛監控管理系統,分為前端採集車輛信息,然後存儲到後台資料庫伺服器上,整個系統的大致流程是:前端採集的圖片數據,通過交換機統一介面,將數據傳入到負責存儲的中心服務軟體(以下簡稱為「服務軟體」),然後服務軟體將接收到的數據存入到資料庫中(資料庫為SQLServer2008),客戶端通過網路去訪問資料庫的信息,進行檢索等一些操作。這是一個大至流程,上圖中有N個分中心,每個點都部署了一樣的系統及軟體,流程一樣,然後將分中心的數據同步到總的伺服器上,主要同步的對象是從相機過來的照片(照片是轉換為二進制後存儲到資料庫某表中的)及一些相關數據,實現總點可以查看各個分點的數據信息。2、目前問題 由於圖片是存儲在資料庫表中的,由數據量過大,平均一天有20萬左右的信息需要存儲,峰值每秒達到了15-20條左右的記錄,圖片壓縮後為150KB左右的高清圖,伺服器為24*365天工作的,所以壓力比較大,目前的問題是伺服器的磁碟IO出現了瓶頸(伺服器採用了500G的硬碟做了磁碟陣列),伺服器的連接通訊管道出現了擁堵,寫入操作超時。這種情況偶爾會發生。3、個人的解決方案 經過研究發現,出現了該情況的最大問題在於伺服器的磁碟IO出現了瓶頸,頻繁的寫操作,導致寫入操作超時,於是我們就對證下葯,解決磁碟IO的壓力,由於之前圖片是存儲在資料庫表中的,在佔用了資料庫的大量空間的同時又減慢了客戶端訪問伺服器的速度。有些時候不是所有的事情軟體都能解決的,我們對硬體進行一個升級,同時改變一下系統的存儲策略,把圖片單獨存儲,解決伺服器的IO瓶頸,減輕伺服器寫操作的壓力。 4、遇到的問題 上圖的方案貌似是可以解決問題,但是問題來了,如果更好的把分中心的數據同步到總伺服器上(主要指圖片伺服器),目前圖片保存的格式是:年月日文件夾/相機IP文件夾/照片編號.JPG 如何在保證了可以快速的同步圖片至總伺服器的同時,又可以保證圖片數據的完整性,不會在同步過程中出現丟失或其它問題,曾經考慮過利用資料庫中記錄圖片的路徑,遠程訪問圖片信息,這樣倒省去了同步圖片的麻煩,可是效率過低,而且對網路要求過高;另外想到的一種方法就是利用FTP進行圖片同步,自己寫同步代碼,定製同步機制。5、求助 求助各位大神們,有遇到過類似問題或是有這方面經驗的,可以提一下自己的建議和看法,對於目前遇到的情況,不止是同步,包括這個解決方案的可行性給出一些意見和建議,在你們的不吝指教中,小弟或許會找到一些答案。 1、對上上述的方案,可否有更好的解決方案; 2、對於不同的方案,可否有更好的、詳細的解決辦法; 3、對於上述方案,關於存儲和同步是否有更好的意見和建議; 小弟在這里感謝各們園子裡面的兄弟姐妹了,希望你們踴躍發言,多一個人多一份力量,看到了就說上兩句,留個言吧。小弟在線等留言,感謝了!
Ⅳ 如何從資料庫調取數據形成大數據可視圖化柱狀圖設計代碼
1、excel表格裡面直接插入「圖表」,然後進行可視化圖表設置,優點:比較方內便,直接插入;缺點:操作容相對復雜,數據量大的情況下excel超級慢;
2、將excel數據導入BDP個人版,然後直接拖拽欄位後選擇可視化圖表類型即可;優點:操作簡單、性能支持數據大的文件、圖表類型多;缺點:要導入數據;
2種方式你都可以試試,自己評估下。。。
-
Ⅳ 如何設計企業級大數據分析平台
統企業的OLAP幾乎都是基於關系型資料庫,在面臨「大數據」分析瓶頸,甚至實時數據分析的挑戰時,在架構上如何應對?本文試擬出幾個大數據OLAP平台的設計要點,意在拋磚引玉。
突破設計原則
建設企業的大數據管理平台(Big Data Management Platform),第一個面臨的挑戰來自歷史數據結構,以及企業現有的資料庫設計人員的觀念、原則。數據關系、ACID在關系資料庫幾十年的統治時期是久得人心,不少開發人員都有過為文檔、圖片設計數據表,或將文檔、圖片序列化為二進制文件存入關系資料庫的經歷。在BDMP之上,我們需要對多種不同的格式的數據進行混合存儲,這就必須意識到曾經的原則已經不再適用——One size dosen』t fit all,新的原則——One size fits a bunch.
以下是我列出的一些NoSQL資料庫在設計上的模式:
文檔資料庫:數據結構是類JSON,可以使用嵌入(Embed)或文檔引用(Reference)的方式來為兩個不同的文檔對象建立關系;
列簇資料庫:基於查詢進行設計,有寬行(Wild Rows)和窄行(Skinny Rows)的設計決策;
索引資料庫:基於搜索進行設計,在設計時需要考慮對對每個欄位內容的處理(Analysis)。
搜索和查詢的區別在於,對返回內容的排序,搜索引擎側重於文本分析和關鍵字權重的處理上,而查詢通常只是對數據進行單列或多列排序返回即可。
數據存儲的二八原則
不少企業在解決海量數據存儲的問題上,要麼是把關系資料庫全部往Hadoop上一導入,要麼是把以前的非結構化數據如日誌、點擊流往NoSQL資料庫中寫入,但最後往往發現前者還是無法解決大數據分析的性能瓶頸,後者也無法回答數據如何發揮業務價值的問題。
在數據的價值和使用上,其實也存在著二八原則:
20%的數據發揮著80%的業務價值;
80%的數據請求只針對20%的數據。
目前來看,不管是數據存儲處理、分析還是挖掘,最完整和成熟的生態圈還是基於關系型資料庫,比如報表、聯機分析等工具;另外就是數據分析人員更偏重於查詢分析語言如SQL、R、Python數據分析包而不是編程語言。
企業大數據平台建設的二八原則是,將20%最有價值的數據——以結構化的形式存儲在關系型資料庫中供業務人員進行查詢和分析;而將80%的數據——以非結構化、原始形式存儲在相對廉價的Hadoop等平台上,供有一定數據挖掘技術的數據分析師或數據工程師進行下一步數據處理。經過加工的數據可以以數據集市或數據模型的形式存儲在NoSQL資料庫中,這也是後面要講到的「離線」與「在線」數據。
理解企業的數據處理需求
資料庫到數據倉庫,是事務型數據到分析型數據的轉變,分析型數據需要包括的是:分析的主題、數據的維度和層次,以及數據的歷史變化等等。而對大數據平台來說,對分析的需求會更細,包括:
查詢:快速響應組合條件查詢、模糊查詢、標簽
搜索:包括對非結構化文檔的搜索、返回結果的排序
統計:實時反映變化,如電商平台的在線銷售訂單與發貨計算出的庫存顯示
挖掘:支持挖掘演算法、機器學習的訓練集
針對不同的數據處理需求,可能需要設計不同的數據存儲,還需要考慮如何快速地將數據復制到對應的存儲點並進行合適的結構轉換,以供分析人員快速響應業務的需求。
離線數據與在線數據
根據不同的企業業務,對「離線」的定義其實不一樣,在這里離線數據特指在業務場景中適用於「歷史數據」的部分。常見的歷史數據查詢分析一般來自於特定時間段,設計上需要考慮的是將數據存入歷史庫中時,建立時間索引。另一種情況是某種業務問題的定位或分析,在數據量巨大的情況下,基於Hadoop或Spark等框架編寫分析演算法並直接在平台上運行,可以大大節約數據導出導入、格式轉換與各種分析工具對接的時間。
在線數據處理按照存儲和分析的先後順序,可分為批處理(先存儲後分析)和流處理(先分析後存儲)兩類。Cassandra資料庫的設計採用上數據追加寫入模式,可以支持實時批處理;流式計算平台則有Apache Storm、Yahoo S4等開源框架,商業平台有Amazon Kenisis(部署在雲端)。企業的實時分析需求往往有特定的應用場景,需要對業務和現行系統有深入的理解才能設計出一個合理的架構。
Ⅵ 大數據資料庫有哪些
分享10個超好用的資料庫:
1、CouchDB
CouchDB是一款完全擁抱互聯網的資料庫,它將數據存儲在文檔中,這種文檔可以通過Web瀏覽器來查詢,並且用JavaScript來處理。它易於使用,在分布式上網路上具有高可用性和高擴展性。支持的操作系統:Windows、Linux、OS X和安卓。
2、Blazegraph
Blazegraph是一種高度擴展、高性能的資料庫。它既有使用開源許可證的版本,也有使用商業許可證的版本。
3、Cassandra
Cassandra資料庫最初由Facebook開發,現已被1500多家企業組織使用,它能支持超大規模集群;比如 說,蘋果部署的Cassandra系統就包括75000多個節點,擁有的數據量超過10 PB。
4、FlockDB
FlockDB是一種非常快、擴展性非常好的圖形資料庫,擅長存儲社交網路數據。雖然這個項目的開源版已有一段時間沒有更新了,但它仍可用於下載。
5、Neo4j
Neo4j是速度快、擴展性佳的原生圖形資料庫,它具有大規模擴展性、快速的密碼查詢性能和經過改進的開發效率。支持的操作系統:Windows和Linux。
6、Pivotal Greenplum Database
Greenplum是同類中不錯的企業級分析資料庫,能夠非常快速地對龐大的海量數據進行功能強大的分析。它是Pivotal大資料庫套件的一部分。支持的操作系統:Windows、Linux和OS X。
7、Impala
Cloudera基於SQL的Impala資料庫是面向Apache Hadoop的開源分析資料庫。它可以作為一款獨立產品來下載,又是Cloudera的商業大數據產品的一部分。支持的操作系統:Linux和OS X。
8、InfoBright社區版
InfoBright為數據分析而設計,這是一種面向列的資料庫,具有很高的壓縮比。InfoBright.com提供基於同一代碼的收費產品,提供支持服務。支持的操作系統:Windows和Linux。
9、Hibari
這個基於Erlang的項目是一種分布式有序鍵值存儲系統,有很強的一致性。它最初是由Gemini Mobile Technologies開發的,現在已被歐洲和亞洲的幾家電信運營商所使用。支持的操作系統:與操作系統無關。
10、MongoDB
mongoDB的下載量已超過1000萬人次,是一款極其受歡迎的NoSQL資料庫。MongoDB.com上提供了企業版、支持、培訓及相關產品和服務。支持的操作系統:Windows、Linux、OS X和Solaris。
Ⅶ 大數據量的資料庫表設計技巧
大數據量的資料庫表設計技巧
即使是一個非常簡單的資料庫應用系統,它的數據量增加到一定程度也會引起發一系列問題。如果在設計資料庫的時候,就提前考慮這些問題,可以避免由於系統反映遲緩而引起的用戶抱怨。
技巧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點看你的需求,我個人是不建議的。
Ⅷ 如何設計資料庫 實現大數據分析
資料庫開發工程師抄的日常工作是襲設計、開發資料庫系統和資料庫應用軟體,因此與軟體研發的過程一樣,會覆蓋需求、設計、編程和測試四個階段:
需求:深入調研用戶市場需求,認清項目的應用場景,解決的問題,性能指標等,需要與資料庫系統使用方反復溝通,確定具體的需求。
設計:根據收集整理的需求文檔設計資料庫系統軟體的模型和架構,劃分模塊分別進行概要和詳細設計。
編程:按照模塊分工和設計文檔,進行編碼和調試。
測試:將開發完成的資料庫系統交給測試人員進行測試,主要使用的測試方法有黑盒測試、白盒測試、壓力測試、性能測試等,測試全部通過後即可等待發布。