“索引”、大數據的思考

来源:http://www.cnblogs.com/logicbaby/archive/2016/06/16/5591460.html
-Advertisement-
Play Games

索引是什麼大家都知道是加快查詢用的,是的,沒錯,索引的根本作用是縮小掃描範圍,而不是直接定位記錄,直接定位記錄只是索引的一種特殊情況,縮小範圍之後最終都是線性掃描得到結果。 就是按照某個值排序,這是最最基本的索引了,RDBMS里的聚集索引,別小看這種簡陋的東西,它是大數據里常用甚至是唯一可用的索引。 ...


    1.  什麼是索引?

        索引是什麼大家都知道是加快查詢用的,是的,沒錯,索引的根本作用是縮小掃描範圍,而不是直接定位記錄,直接定位記錄只是索引的一種特殊情況,縮小範圍之後最終都是線性掃描得到結果。

    2. 常見索引
      1. 線性索引——排序索引

        就是按照某個值排序,這是最最基本的索引了,RDBMS里的聚集索引,別小看這種簡陋的東西,它是大數據里常用甚至是唯一可用的索引。

      2. 樹形索引——B+索引

        這個基本上是DB標配了,可以簡單理解為有序樹再加一堆平衡機制。

      3. hash索引

        這個也越來越的DB支持了,大多碼農都非常熟悉hashmap,沒錯,其實就是這貨。

      4. 點陣圖索引

        這個在少量固定值等特定有時很有用,具體自行搜索了。

    3. 索引之——機械硬碟/SSD

        機械硬碟適用的索引是少seek也就是尋道,多順序掃描scan,如果是樹形索引的話也就是要求樹的深度淺,減少定位(尋道)次數,樹深度淺帶來的問題就是數據切分的不夠小,每個葉子節點會有大量的數據,如果這些葉子節點的數據在物理上是連續的話這將大大有利於機械硬碟的性能。

        SSD沒有尋道問題,故可以將數據切分的很細,也就是樹的深度會變大,通過多層定位直接定位到最小範圍的數據集。

    4. 大卡車or跑車

        很多不瞭解的人問我為什麼mapreduce或者hive在數據很少甚至只有一條數據的情況下也要跑幾十秒?我給的回答是傳統的RDBMS是相當於跑車,而大數據相當於超大卡車,即便兩者都空車的情況下大開車也不可能跑過跑車車;我自認為這個比喻很形象的說明瞭兩者的本質上的區別。

        其實這也反映出了一個基本的軟體設計理念,吞吐(Throughput)和響應是蹺蹺板的兩端,一遍上去另一邊就得下來。

        那麼大數據是靠“大”(堆機器)的傻大黑粗的蠻力Low B技術?NO,其實大數據也有“索引”的概念。

    5. 大數據有索引?

        在RDBMS中索引的概念大家一點都不陌生,但是在大數據里大家似乎沒有聽過所以一說,當然Solr/ES之類的FullText索引並不在這裡所思考的範圍內,這裡思考的還是那些傳統的基礎索引技術;其實很多相同的概念在不同的地方披著不同的外衣。

    6. 那麼大數據的索引是什麼?
      1. 數據分區——“分區”索引

          “分區”索引一詞屬於自創,其實分區索引是一種特殊的hash索引,hash索引是一種多對一的映射,而分區索引是一對一的映射。

          具體表現就是hive表分區。說白了就是按一定規則切分數據,比如按天切分等,這樣將大數據切分成較小的數據,利於程式處理。

      2. 排序索引——hbase rowkey

          排序索引在大數據里典型的就是hbase了,hbase表內的數據全部按照rowkey排序,定位具體行的時候可二分查找定位O(logn),範圍掃描就更有利了;當然前提是得你的rowkey設計得當。

 

  大數據用這兩種看似簡陋的索引其實也是無奈,其實對於DB來說只有原始的數據才是“有效載荷”(Payload),其他的數據字典、索引維護的數據都是額外開銷,在RDBMS中不存儲非常大的數據集所以維護這些額外開銷的成本較低,大數據的數據量本身就很大,如果再維護這些額外開銷成本會很高,當然RDBMS在非常大的數據量情況下也有人提出了各種所謂的“反範式化”“反模式”等概念,其中一條就是取消索引……所以同樣的技術在不同的地方的使用場景是不同的甚至披著另外一個外衣。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • RunLoop 基礎知識 作用 保持程式持續運行 處理app中的各種事件(如觸摸事件、定時器事件【NSTimer】、selector事件【選擇器·performSelector···】) 節省CPU資源,提高程式性能 說明 沒有RunLoop,那麼程式一啟動就會退出 有了Runoop,那麼相當於在內 ...
  • ...
  • IOS最好要設置系統預設啟動頁面,不然進入應用就會突然閃現黑色畫面 下圖是我們要實現的效果: 總體思路:設置一個系統預設啟動頁面,在進入didFinishLaunchingWithOptions時, 給Window添加自定義啟動頁,其初始畫面和系統啟動頁一樣。 可在自定義啟動頁實現一些動畫,動畫結束 ...
  • 1. 安裝配置git 安裝:需要從網上下載一個,然後進行預設安裝即可。安裝完成後,找到 “Git Bash”,點擊: 配置: 註意:name和email 只是用來標識身份,但是一定要配置好 2. Studio集成git git路徑: 3.通過git上傳github 輸入github用戶名和密碼,點擊 ...
  • 公司的介面一般會兩種協議的,一種HTTP,一種HTTPS的,HTTP 只要請求,伺服器就會響應,如果我們不對請求和響應做出加密處理,所有信息都是會被檢測劫持到的,是很不安全的,客戶端加密可以使用本文這套工具類進行處理。 導言 公司的介面一般會兩種協議的,一種HTTP,一種HTTPS的,HTTP 只要 ...
  • PostgreSQL添加新的伺服器連接時,報錯: 解決方法: 第一步:修改配置文件中連接的伺服器列表,添加伺服器IP地址(圖pg002.png) 配置文件地址:資料庫右擊屬性,打開資料庫的安裝路徑在data文件中找到配置文件pg_hba.conf。 如:D:\Program Files\Postgr ...
  • 命令 #查看版本 mysql --version #進入mysql 命令 mysql -u root -p mysql -u root@localhost (沒有密碼的情況) ...
  • 【MongoDB】2014-07-25T11:00:48.634+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:10061 由於目標電腦積極拒絕,無法連接。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...