OLTP 系統和 OLAP 系統的核心設計思想

關于 OLTP 系統和 OLAP 系統的核心設計思想

數據存儲系統的關于查詢的典型操作:

-- 第一種需求: 根據 key(1) 找 value(name,age), 單點查詢
select name, age from student where id = 1; student:map id=1value=(name,age)
-- 第二種需求: 根據 department 統計平均年齡, 全表查詢
select name, age from student where age > 30; 全表掃描
select department, avg(age) from student group by department; 全表掃描

對于第一種需求來說:

  • 如果數據量小,并且數據是結構化的,使用 MySQL 去存儲即可
  • 如果數據量大,不管是不是結構化的,可以轉成 key-value 的存儲,使用 HBase,Cassandra 等來解決, OLTP 系統 KV 系統 來滿足

對于第二種需求來說:

  • 如果數據量小,并且數據是結構化的,使用 MySQL 去存儲即可
  • 如果數據量大,不管是不是結構化的,設計一個專門用來做分析的存儲計算引擎解決分析的低效率問題, 設計一個 OLAP 系統

OLTP存儲系統核心設計思想

OLTP 存儲系統,核心需求是 實現海量數據集中的低延時隨機讀寫操作

  • 01、數據排序:在海量數據中要想保證低延時的隨機讀寫操作,數據最好是排序的
  • 02、范圍分區:當數據排序之后,可以進行范圍分區,來平攤負載,讓多臺服務器聯合起來對外提供服務
  • 03、內存 + 磁盤:保證處理效率,也保證數據安全
  • 04、內存:必須經過設計,內存具備優秀的數據結構,保證基本的讀寫高效,甚至為了不同的需求,可以讓讀寫效率傾斜。
  • 05、寫緩存:將為了實現數據有序而進行的低效率隨機寫轉換為內存隨機寫+磁盤順序寫的方式
  • 06、讀緩存:將經常查詢的熱點數據緩存在內存中,提高查詢效率
  • 07、磁盤:數據必須存放在磁盤,保證數據安全。磁盤數據文件必須經過精心設計,保證掃描磁盤數據文件的高效率
  • 08、跳表:基于數據排序+范圍分區構建索引表,形成跳表的拓撲結構,方便用戶操作時快速定位數據分區的位置
  • 09、LSM-Tree 存儲引擎:把隨機寫變成順序追加,在通過定期合并的方式來合并數據,去除無效數據,從而實現數據的刪除和修改。
  • 10、布隆過濾器:快速判斷一個元素(1)是否存在于一個龐大集合內/文件中(100E),常數級別的執行效率

海量數據中,如果進行高效率的查詢的核心思想:設計一種架構,能夠快速把待搜尋的數據范圍降低到原來的 1/n,然后再結合索引或者熱點數據放在內存等思路,就能實現高效率的查詢了。

OLAP存儲系統核心設計思想

核心需求是 實現海量數據集中的高性能低延遲查詢分析功能

  • 01、數據排序
  • 02、數據分區分片 + 分布式查詢
  • 03、列式存儲 + 字段類型統一
  • 04、列裁剪
  • 05、預聚合(搜索引擎: 輸入關鍵詞,搜索引擎根據關鍵詞到 數據庫 找到這個 關鍵詞對應的所有的 URL:這些 URL 就是提前計算出來的 )
  • 06、利用CPU特性:向量化引擎,操作系統必須支持
  • 07、主鍵索引 + 二級索引 + 位圖索引 + 布隆索引 等等各種索引技術
  • 08、支持近似計算, pv 一個電商平臺的 sku 總數
  • 09、定制引擎:多樣化的存儲引擎滿足不同場景的特定需要
  • 10、多樣化算法選擇:Volnitsky高效字符串搜索算法 和 HyperLogLog基于概率高效去重算法
    單條記錄的增刪改等操作,通過數據的橫向劃分,做到數據操作的快速定位,在海量數據查詢分析中,一般就是針對大量行少量列做分析,既然并不是全部列,那么把數據做縱向切分把表中的數據按照列來單獨存儲,那么在做分析的時候,同樣可以快速把待查詢分析的數據總量降低到原來表的1/n,同樣提高效率。而且對于常用的聚合邏輯的結果,也可以提前算出來緩存起來用來提供效率,這就是預聚合技術。
    Kylin 是一個把預聚合技術發揮到極致的一個 OLAP 技術,詳細見:OLAP引擎——Kylin介紹
    它的缺點如下:
  • 1、預聚合只支持固定的分析場景,無法滿足自定義分析場景,所以預聚合只能作為一種可選方案
  • 2、維度組合爆炸會導致數據膨脹,這樣會造成不必要的計算和存儲開銷。無必要的維度組合的計算就屬于浪費資源
  • 3、大概率數據都是增量生成,預聚合不能進行數據更新。所以會產生大量的重算。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛擬機

vt-x 虛擬技術的硬盤支持。想像成“硬解碼”的東東。不是裝虛擬機必須的,但有它效果會好些。 vt-x檢測工具:securable.exe 下載地址:http://pan.baidu.com/s/1kTBOvzD Hardware Virtualization選項: no [CPU和BIOS都不支持VT] loc…

算法(轉)

歡迎自薦和推薦鏈接。 算法 優秀博客推薦:各種數據結構與算法知識入門經典(不斷更新)基本算法 貪心算法:貪心算法 作者:獨酌逸醉 貪心算法精講 作者:3522021224 遞歸和分治:遞歸與分治策略 …

sjf調度算法_如何通過靜態方法預測SJF調度中未來過程的突發時間?

sjf調度算法In SJF Scheduling, CPU is assigned to the process having the smallest burst time but it can not be implemented practically, because we dont know burst time of the arrived processes in advance. 在SJF Scheduling中 ,將CPU分配給具有最短突…

flask 知識點總結

request對象的常用屬性具體使用方法如下:request.headers, request.headers.get(If-None-Match)request.json, request.json[value] 或 request.json.get(detail_msg, "")request.args, request.args.get(limit, 10)來獲取query parametersrequest.form, request.for…

Postgresql中的hybrid hash join(無狀態機講解)

hybrid hash join hybrid hash join是基于grace hash join 的優化。 在postgresql中的grace hash join 是這樣做的:inner table太大不能一次性全部放到內存中,pg會把inner table 和outer table按照join的key分成多個分區,每個分區(有一個inn…

末日中的黎明

哈哈, 今天是2012-12-21,傳說中的世界末日,不過現在看來,一切都是空的。。。 在這個容易記憶的日子里,我的博客開通了。他將伴隨我以后的學習開發,期望我能充分利用博客,幫我養成常總結、常記筆…

使用numpy.tanh()打印矢量/矩陣元素的雙曲正切值 使用Python的線性代數

Prerequisite: 先決條件: Defining a Vector 定義向量 Defining a Matrix 定義矩陣 Numpy is the library of function that helps to construct or manipulate matrices and vectors. The function numpy.tanh(x) is a function used for generating a matrix / v…

Mahout kmeans聚類

Mahout K-means聚類 一、Kmeans 聚類原理 K-means算法是最為經典的基于劃分的聚類方法,是十大經典數據挖掘算法之一。K-means算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚…

Web項目中獲取SpringBean——在非Spring組件中獲取SpringBean

最近在做項目的時候我發現一個問題:Spring的IOC容器不能在Web中被引用(或者說不能被任意地引用)。我們在配置文件中讓Spring自動裝配,但并沒有留住ApplicationContext的實例。我們如果希望在我們的項目中任何位置都能拿到同一個ApplicationContext來獲取…

postgresql對于HashJoin算法的Data skew優化與MCV處理

Data skew 很好理解,即數據傾斜。現實中的數據很多都不是正態分布的,譬如城市人口,東部沿海一個市的人口與西部地區一個市地區的人口相比,東部城市人口會多好幾倍。 postgresql的skew的優化核心思想是"避免磁盤IO"。 優…

JavaScript | 創建對象并通過JavaScript函數在表中顯示其內容

In this example, we created an object named employee with id, name, gender, city, and salary and assigned and displaying the values in the table using JavaScript function. 在此示例中,我們創建了一個名為employee的對象,其對象為id &#x…

基于socket的簡單文件傳輸系統

【實驗目的及要求】 在 Uinx/Linux/Windows 環境下通過 socket 方式實現一個基于 Client/Server 文件傳輸程序。 【實驗原理和步驟】 1. 確定傳輸模式:通過 socket 方式實現一個基于 Client/Server 或 P2P 模式的文件傳輸程序。 2. 如果選擇的是 Client/Server 模式的文件傳輸…

《GPU高性能編程-CUDA實戰》中例子頭文件使用

《GPU高性能編程-CUDA實戰(CUDA By Example)》中例子中使用的一些頭文件是CUDA中和C中本身沒有的,需要先下載這本書的源碼,可以在:https://developer.nvidia.com/content/cuda-example-introduction-general-purpose-g…

mcq 隊列_人工智能| AI解決問題| 才能問題解答(MCQ)| 套裝1

mcq 隊列1) Which of the following definitions correctly defines the State-space in an AI system? A state space can be defined as the collection of all the problem statesA state space is a state which exists in environment which is in outer spaceA state sp…

Postgresql的HashJoin狀態機流程圖整理

狀態機 可以放大觀看。 HashJoinState Hash Join運行期狀態結構體 typedef struct HashJoinState {JoinState js; /* 基類;its first field is NodeTag */ExprState *hashclauses;//hash連接條件List *hj_OuterHashKeys; /* 外表條件鏈表;list of …

Ajax和Jsonp實踐

之前一直使用jQuery的ajax方法,導致自己對瀏覽器原生的XMLHttpRequest對象不是很熟悉,于是決定自己寫下,以下是個人寫的deom,發表一下,聊表紀念。 Ajax 和 jsonp 的javascript 實現: /*! * ajax.js * …

得到前i-1個數中比A[i]小的最大值,使用set,然后二分查找

題目 有一個長度為 n 的序列 A&#xff0c;A[i] 表示序列中第 i 個數(1<i<n)。她定義序列中第 i 個數的 prev[i] 值 為前 i-1 個數中比 A[i] 小的最大的值&#xff0c;即滿足 1<j<i 且 A[j]<A[i] 中最大的 A[j]&#xff0c;若不存在這樣的數&#xff0c;則 pre…

學習語言貴在堅持

學習語言貴在堅持 轉自&#xff1a;http://zhidao.baidu.com/link?urlr2W_TfnRwipvCDLrhZkATQxdrfghXFpZhkLxqH1oUapLOr8jXW4tScbyOKRLEPVGCx0dUfIr-30n9XV75pWYfK給大家介紹幾本書和別處COPY來的學習C50個觀點 《Thinking In C》&#xff1a;《C編程思想》&#xff1b; 《The…

stl vector 函數_在C ++ STL中使用vector :: begin()和vector :: end()函數打印矢量的所有元素...

stl vector 函數打印向量的所有元素 (Printing all elements of a vector) To print all elements of a vector, we can use two functions 1) vector::begin() and vector::end() functions. 要打印矢量的所有元素&#xff0c;我們可以使用兩個函數&#xff1a;1) vector :: b…

JqueryUI入門

Jquery UI 是一套開源免費的、基于Jquery的插件&#xff0c;在這里記錄下Jquery UI 的初步使用。 第一、下載安裝 下載Jquery,官網&#xff1a;http://jquery.com;  下載Jquery UI&#xff0c;官網&#xff1a;http://jqueryui.com/ Jquery的部署就不說了&#xff0c;說下Jqu…