日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

索引 Index -- 快速查找数据

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 索引 Index -- 快速查找数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 為什么需要索引
    • 2. 索引的需求定義
      • 2.1 功能性需求
      • 2.2 非功能性需求
    • 3. 構建索引常用的數據結構
    • 4. 總結

索引這種常用的技術解決思路,底層往往會依賴哪些數據結構?

1. 為什么需要索引

實際的軟件開發中,它們的本質都可以抽象為“對數據的存儲和計算”。

  • 存儲,增刪改查。一旦存儲的數據很多,性能就成了關注的重點
  • “如何節省存儲空間、提高數據增刪改查的效率”,是設計的重點。不夸張地說,索引設計得好壞,直接決定了這些系統是否優秀

2. 索引的需求定義

2.1 功能性需求

  • 數據是格式化數據還是非格式化數據?要構建索引的原始數據,類型有很多。分為兩類,一類是結構化數據,比如,MySQL數據;另一類是非結構化數據,比如網頁。對于非結構化數據,需要做預處理,提取出查詢關鍵詞,對關鍵詞構建索引。

  • 數據是靜態還是動態?如果原始數據是靜態數據,不會有數據的增加、刪除、更新操作,所以,在構建索引的時候,只需要考慮查詢效率就可以了。大部分情況下,我們都是對動態數據構建索引,不僅要考慮到索引的查詢效率,還需要動態更新索引。

  • 索引存儲在內存還是硬盤?存儲在內存,查詢速度比磁盤高。索引大的時候,內存有限,可能不得不將索引存在磁盤中。還可以一部分存在內存,一部分存在磁盤,兼顧內存消耗和查詢效率。

  • 單值查找還是區間查找

  • 單關鍵詞查找還是多關鍵詞組合查找?比如,搜索引擎中構建的索引,既要支持一個關鍵詞的查找,比如“數據結構”,也要支持組合關鍵詞查找,比如“數據結構 & 算法”。對于多關鍵詞查詢來說,要分多種情況。像MySQL這種結構化數據的查詢需求,可以實現針對多個關鍵詞的組合,建立索引;對于像搜索引擎這樣的非結構數據的查詢需求,可以針對單個關鍵詞構建索引,然后通過集合操作,比如求并集、求交集等,計算出多個關鍵詞組合的查詢結果。

2.2 非功能性需求

  • 不管是存在內存中還是磁盤中,索引對存儲空間的消耗不能過大

  • 考慮索引查詢效率的同時,還要考慮索引的維護成本。索引的目的是提高查詢效率,但是,基于動態數據集合構建的索引,還要考慮索引的維護成本。因為在原始數據動態增刪改的同時,也需要動態的更新索引。而索引的更新會影響到增刪改操作的性能。

3. 構建索引常用的數據結構

常用來構建索引的數據結構,就是講過的幾種支持動態數據集合的數據結構。比如,散列表、紅黑樹、跳表、B+樹。除此之外,位圖、布隆過濾器可以作為輔助索引,有序數組可以用來對靜態數據構建索引。

  • 散列表增刪改查操作的性能非常好,時間復雜度是O(1)。一些鍵值數據庫,比如Redis、Memcache,就是使用散列表來構建索引的。這類索引,一般都構建在內存中。

  • 紅黑樹作為一種常用的平衡二叉查找樹,數據插入、刪除、查找的時間復雜度是O(log n),也非常適合用來構建內存索引。Ext文件系統中,對磁盤塊的索引,用的就是紅黑樹。

  • B+樹比紅黑樹來說,更適合構建存儲在磁盤中的索引。B+樹是多叉樹,對相同個數的數據構建索引,B+樹的高度要低于紅黑樹。查詢時,讀取B+樹索引,需要的磁盤IO次數更少。所以,大部分關系型數據庫索引,比如MySQL、Oracle,都是用B+樹來實現的。

  • 跳表也支持快速添加、刪除、查找數據。而且,通過靈活調整索引結點個數和數據個數之間的比例,可以很好地平衡索引對內存的消耗及其查詢效率。Redis中的有序集合,就是用跳表來構建的。

  • 布隆過濾器有一定的判錯率。盡管對于判定存在的數據,有可能并不存在,但是對于判定不存在的數據,那肯定就不存在。更大的特點,就是內存占用非常少。針對數據,構建一個布隆過濾器,存儲在內存中。要查詢時,先通過布隆過濾器,判定是否存在。如果判定數據不存在,就沒必要讀取磁盤中的索引了。對于數據不存在的情況,數據查詢就更加快速了。

  • 有序數組也可被作為索引。如果數據是靜態的,可以把數據的關鍵詞抽取出來,組織成有序數組,然后利用二分查找來快速查找數據。

4. 總結

架構設計離不開數據結構和算法。要想成長為一個優秀的業務架構師、基礎架構師,數據結構和算法的根基一定要打穩。那些看似很驚艷的架構設計思路,實際上,都是來自最常用的數據結構和算法。

總結

以上是生活随笔為你收集整理的索引 Index -- 快速查找数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。