說到數據庫存儲技術的基礎,就要了解企業應用的數據特性以及面臨的瓶頸。數據庫
1.企業應用的數據特性網絡
以快遞追蹤爲例,信息讀取過程包括當前讀取操做的地點、時間戳、當前所處的業務流程(如收件、打包、運送)以及其餘詳細信息。固然,對網絡遊戲活動數據的分析就更爲複雜。每一個事件數據的數據集較小(Byte/KB)而每一個實體可產生多個事件。性能
結構化數據有標準的格式存儲便可被計算機自動處理。非結構化數據是不具備特定的數據解析模型,不能被計算機自動處理的數據,例如視頻、圖片與任何非結構化的文本信息。以患者數據爲例,性別、年齡是結構化的,而病史、診斷數據是非結構化的。企業要對非結構化數據進行專項處理,以達到高效的搜索。優化
2.數據庫的瓶頸編碼
現代的企業偏向「數據導向」。企業要處理人與機器時時刻刻產生的大量數據來支撐決策,爲此要將不一樣數據源的數據整合;企業要進行交互式決策,爲此要對數據實時分析。數據傳輸的效率受限於CPU總線,而經過並行處理可超越總線速率。磁盤用於數據的備份和歸檔,不是線上服務性能的關注點。所以,內存的訪問成爲數據庫的新瓶頸。spa
3.瓶頸的改善方法視頻
固然,分庫能夠改善內存瓶頸,但改善瓶頸的本質是減小對內存的訪問。咱們應該儘量減小數據的表示位數,這樣既能減小內存佔用又能減小內存的訪問。同時,在執行訪問時也要精打細算,只訪問被用到的列。排序
減小數據表示位數的最基本思路就是字典編碼,既簡單又好用,也是編碼列壓縮技術的基礎。遊戲
4.字典編碼事件
字典編碼以列爲單元進行操做,經過簡單的轉換將不一樣的值替換爲不一樣的整數值(短整數優先),將長文本值壓縮爲短整數值,所以並無改變表的規模。一般狀況下,企業數據的熵較低,即數據的重複度大,所以壓縮效果較爲理想。以性別列壓縮爲例:性別列僅包含兩個值,若經過"m", "f"表示,那麼須要1byte.假設全世界有70億人口,那麼須要70億*1byte約爲6.52GB. 若是使用字典壓縮,1位足夠表達相同信息,須要70億)1bit=0.81GB, 其中字典須要2*1字節=2字節。壓縮比例=未壓縮大小/壓縮大小約爲8.
一般狀況下,姓名、國家、生日等文本數據都可經過字典編碼得到10~20倍的壓縮比例。
5.排序字典
上述字典編碼的全量掃描時間爲O(n), 如過將字典加以排序,利用二分法的字典檢索時間僅爲O(lon(n)). 通常狀況下,咱們但願字典既精煉又冗餘,由於這樣的優化要付出代價:新字的加入致使字典重排序,若新字不在字典末尾,數據表也要更新,即新字後面的字所對應的值均要向後位移。所以,對於國家、生日等「可數可列」(可窮舉)的列採用字典編碼便可得到更好的查找速度,又幾乎不會擔憂字典產生變更。
參考書籍
[1]. A Course in In-Memory Data Management: The Inner Mechanics of In-Memory Databases. Hasso Plattner. 2012