多元索引(Search Index)基於倒排索引和列式儲存,可以解決巨量資料的多維查詢和統計分析難題。當日常業務中有非主鍵列查詢、多列組合查詢、模糊查詢、全文檢索索引和向量檢索等複雜查詢需求以及求最值、統計行數、資料分組等資料分析需求時,您可以將這些屬性作為多元索引中的欄位並使用多元索引查詢與分析資料。
背景資訊
多元索引可以解決巨量資料中複雜的查詢問題,同時資料庫、搜尋引擎等其他系統也可以解決資料的查詢問題。
Table Store與資料庫及搜尋引擎等系統的主要區別如下:
除了Join、事務和相關性外,Table Store能覆蓋資料庫和搜尋系統中的其他功能,同時具備資料庫的資料高可靠性和搜尋系統的進階查詢能力,可以替換常見的資料庫 + 搜尋系統組合架構
方式。如果您的使用情境中不需要Join、事務和複雜相關性時,您可以選擇使用Table Store多元索引。
索引介紹
多元索引基於倒排索引和列式儲存,可以解決巨量資料的多維資料查詢和統計分析難題,包括非主鍵列查詢、首碼查詢、模糊查詢、多欄位自由組合查詢、巢狀查詢、地理位置查詢、全文檢索索引、向量檢索和統計彙總(max、min、count、sum、avg、distinct_count、group_by、percentiles和histogram)等功能。
下圖展示了多元索引採用的倒排索引和列式儲存的原理以及多維空間索引結構。
多元索引的使用方式不同於MySQL等傳統資料庫的索引使用方式,無最左匹配原則的限制,使用時非常靈活。一般情況下一張表只需要建立一個多元索引即可。例如有一個學生表,包括姓名、學號、性別、年級、班級、家庭住址等列,如果要實現姓名等於張三且年級為三年級的學生
、家庭住址在附近1公裡內且性別為男的學生
、找出三年級二班住在某小區的學生
等任意條件的組合查詢,您可以建立一個多元索引實現,在建立多元索引時,將這些列添加到同一個多元索引中即可。
Table Store為資料表提供了資料表主鍵查詢方式,還提供了二級索引(Secondary Index)和多元索引兩種加速查詢的索引結構。下表展示了三種查詢方式的區別。
查詢方式 | 原理 | 情境 |
資料表主鍵 | 資料表類似於一個巨大的Map,它的查詢能力也就類似於Map,只能通過主鍵查詢。 | 適用於可以確定完整主鍵(Key)或主鍵首碼(Key prefix)的情境。 |
二級索引 | 通過建立一張或多張索引表,使用索引表的主鍵列查詢,相當於把資料表的主鍵查詢能力擴充到了不同的列。 | 適用於能提前確定待查詢的列,待查詢列數量較少,且可以確定完整主鍵或主鍵首碼的情境。 |
多元索引 | 使用了倒排索引、BKD樹、列存等結構,具備豐富的查詢能力。 | 適用於除資料表主鍵和二級索引之外的其他所有查詢和分析情境,例如非主鍵列的條件查詢、任意列的自由組合查詢、關係查詢、全文檢索索引、地理位置查詢、首碼查詢、模糊查詢、嵌套結構查詢、Null值查詢、統計彙總等。 |
典型情境
多元索引可廣泛應用於各類應用系統中進行資料查詢與分析。多元索引的實際應用情境包括但不限於下表的範例情境。
應用系統 | 範例情境 |
電商平台 | 在電商平台中使用多元索引實現商品的分類、屬性篩選等功能,方便使用者進行快速的商品搜尋和篩選。 |
社交應用 | 在社交網路中使用多元索引實現使用者的關注關係、好友關係等查詢以及根據使用者的興趣標籤進行推薦和匹配。 |
日誌分析 | 在日誌分析情境中使用多元索引進行日誌的關鍵字搜尋、按照時間範圍查詢等操作,用於快速定位問題和分析日誌資料。 |
物聯網資料分析 | 在物聯網情境中使用多元索引進行裝置資料的查詢和分析,例如按照裝置類型、地理位置等進行篩選和統計。 |
應用效能監控 | 在應用效能監控中使用多元索引進行指標資料的彙總和查詢,例如按照時間範圍、應用程式名稱等進行篩選和匯總。 |
地理位置服務 | 在地理位置服務中使用多元索引進行地理位置的查詢和附近搜尋,用於提供附近的店鋪、景點、服務等資訊。 |
文本搜尋引擎 | 在文本搜尋引擎中使用多元索引進行全文檢索索引和相關性排序,用於快速搜尋和尋找文檔、文章等資訊。 |
核心功能
多元索引的核心功能主要包括:
資料庫查詢加速:
任意列查詢(包括主鍵列和非主鍵列)
多欄位自由組合查詢
地理位置查詢
And、Or、Not和Null等查詢
In 查詢
模糊查詢(WildcardQuery、PrefixQuery、SuffixQuery)
巢狀查詢(NestedQuery)
排序
翻頁
統計彙總(Max、Min、Sum、Avg、Count、DistinctCount、Percentile、Histogram、GroupBy等)
全文檢索索引
向量檢索
資料快速篩選
更多資訊,請參見多元索引功能。
地區支援
目前多元索引功能開放的地區包括華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、華南1(深圳)、華南3(廣州)、西南1(成都)、中國香港、日本(東京)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、菲律賓(馬尼拉)、泰國(曼穀)、德國(法蘭克福)、英國(倫敦)、美國(矽谷)、美國(維吉尼亞)、沙特(利雅得)。其中美國(矽谷)地區暫不支援向量檢索功能。
容災能力
多元索引在具備同城容災能力的地區預設提供同城冗餘的容災能力,會將資料同時儲存到地區內多個不同的可用性區域。在單可用性區域遇到斷電、斷網、火災等故障時仍能保障資料的正常讀寫服務、不會影響讀寫可用性。
目前多元索引支援同城冗餘的地區包括華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、華南1(深圳)、中國香港、日本(東京)、新加坡、印尼(雅加達)、德國(法蘭克福)。
使用限制
更多資訊,請參見多元索引限制。
注意事項
使用多元索引時,無需為資料表設定預定義列。
適用模型
多元索引只適用於寬表模型。
索引同步
使用者為資料表建立了多元索引後,當在資料表中寫入資料時,資料會先寫入資料表中,資料寫成功後會立即返回使用者寫成功,同時另一個非同步線程會從資料表中讀取寫入的資料然後寫入到多元索引,採用非同步方式建立多元索引不會降低Table Store的寫入能力。
目前多元索引的延遲大部分在3秒以內,通過Table Store控制台可以即時查看多元索引建立的延遲情況。
資料生命週期(TTL)
如果資料表無UpdateRow更新寫入操作,則您可以使用多元索引TTL。更多資訊,請參見生命週期管理。
當只需要保留一段時間內的資料且時間欄位不需要更新時,您可以通過按時間分表的方法實現資料生命週期功能。按時間分表的原理、原則和優點請參見下表說明。
維度
按時間分表
原理
按照固定時間,例如“日”、“周”、“月”或者“年”分表,並為每個表建立一個多元索引,根據需要保留所需時間的資料表。
例如當資料需要保留6個月時,可以將每個月的資料儲存在一張資料表中,例如table_1、table_2、table_3、table_4、table_5、table_6,並為每個資料表建立一個多元索引,每個資料表和多元索引中只會儲存一個月的資料,只需要每個月把6個月前的資料表刪除即可。
當使用多元索引查詢資料時,如果時間範圍在某個表中,只需要查詢對應表;如果時間範圍在多個表中,需要對涉及的資料表均查詢一次,再將查詢結果合并。
原則
單表(單索引)大小不超過500億行,當單表(單索引)大小不超過200億行時,多元索引的查詢效能最好。
優點
通過保留資料表的個數調節資料存放區時間長度。
查詢效能和資料量成正比,分表後每個表的資料大小有上限,查詢效能更好,避免查詢延遲太大或者逾時。
資料多版本
多元索引不支援資料多版本,即不能對設定了資料多版本的資料表建立多元索引。
當在單版本中每次寫入資料時自訂了timestamp,且先寫入版本號碼較大的資料,後寫入版本號碼較小的資料,此時先寫入的版本號碼較大的資料可能會被後寫入的版本號碼較小的資料覆蓋。
Search和ParallelScan請求的結果資料中不一定包括timestamp屬性。
介面說明
多元索引提供了多元索引管理介面和查詢介面。其中查詢介面包括通用查詢介面(Search)和資料匯出介面(ParallelScan),兩種查詢介面的功能大部分相同,但是ParallelScan介面為了提高某些方面的效能和吞吐能力捨棄了部分功能。
分類 | 介面 | 描述 |
管控介面 | 建立一個多元索引。 | |
擷取多元索引的詳細描述資訊。 | ||
列出多元索引的列表。 | ||
刪除某個多元索引。 | ||
查詢介面 | Search | 全功能查詢介面,支援多元索引的所有功能點,包括所有的查詢功能以及排序、統計彙總等分析能力,其結果會按照指定的順序返回。
|
多並發資料匯出介面,只包括所有的查詢功能,捨棄了排序、統計彙總等分析能力,能將命中的資料以更快的速度全部返回。 相對於Search介面,ParallelScan可以提供更好的效能,單並發時效能(吞吐能力)是Search介面的5倍。
多並發匯出資料時,您還需要通過ComputeSplits介面擷取當前ParallelScan單個請求的最大並發數。 |
使用流程
步驟 | 操作 | 說明 |
1 | 在資料表上建立一個多元索引後,您可以根據多元索引中建立索引的欄位來查詢資料表中的資料。 | |
2 | 使用多元索引查詢資料 | 多元索引提供了全匹配查詢、匹配查詢、短語匹配查詢、精確查詢、多詞精確查詢、首碼查詢、範圍查詢、萬用字元查詢、多條件組合查詢、巢狀型別查詢、地理距離查詢、地理長方形範圍查詢、地理多邊形範圍查詢、列存在性查詢、摺疊(去重)等資料查詢功能,請根據實際查詢情境選擇。 使用多元索引查詢資料時支援通過配置分詞指定匹配詞的切分方式以及對滿足條件的資料進行排序和翻頁。更多資訊,請參見分詞和排序和翻頁。 |
3 | 如果要分析表中資料,您可以使用統計彙總功能實現求最小值、求最大值、求和、求平均值、統計行數、去重統計行數、百分位統計、按欄位值分組、按範圍分組、按地理位置分組、按過濾條件分組、長條圖統計、日期長條圖統計等資料分析功能。 | |
4 | 當使用情境中不關心整個結果集的順序時,您可以使用並發匯出資料功能以更快的速度將命中的資料全部返回。 |
使用方式
您可以通過控制台、命令列工具或者SDK使用多元索引。
計費說明
多元索引計費項目包括讀輸送量、資料存放區量和外網下行流量,其中讀輸送量包括預留讀輸送量和按量讀輸送量。更多資訊,請參見多元索引計量計費。