通過使用多元索引(Search Index)的多種高效的索引結構,可以解決巨量資料的複雜查詢難題。

解決什麼問題

Table Store的資料表是一種典型的分布式NoSQL資料結構,可以高效地支援大規模資料的儲存和讀寫情境,例如監控資料、日誌資料等情境。

為了滿足使用者的按照非主鍵列查詢,多列的自由組合查詢等複雜查詢需求,Table Store在支援單行讀、範圍讀等主鍵查詢的同時,創新性的推出了多元索引。

多元索引基於倒排索引和列式儲存,可以解決巨量資料的複雜查詢難題,包括非主鍵列查詢、全文檢索索引、首碼查詢、模糊查詢、多欄位自由組合查詢、巢狀查詢、地理位置查詢和統計彙總(max、min、count、sum、avg、distinct_count、group_by、percentiles和histogram)等功能。

索引區別

Table Store在支援資料表的主鍵查詢的基礎上,還提供了二級索引(Secondary Index)和多元索引兩種加速查詢的索引結構。下表展示了三種索引的區別。

索引類型 原理 情境
資料表主鍵 資料表類似於一個巨大的Map,它的查詢能力也就類似於Map,只能通過主鍵查詢。 適用於可以確定完整主鍵(Key)或主鍵首碼(Key prefix)的情境。
二級索引 通過建立一張或多張索引表,使用索引表的主鍵列查詢,相當於把資料表的主鍵查詢能力擴充到了不同的列。 適用於能提前確定待查詢的列,待查詢列數量較少,且可以確定完整主鍵或主鍵首碼的情境。
多元索引 使用了倒排索引、BKD樹、列存等結構,具備豐富的查詢能力。 適用於除資料表主鍵和二級索引之外的其他所有查詢和分析情境:
  • 非主鍵列的條件查詢
  • 任意列的自由組合查詢
  • And、Or、Not等關係查詢
  • 全文檢索索引
  • 地理位置查詢
  • 首碼查詢
  • 模糊查詢
  • 嵌套結構查詢
  • Null值查詢
  • 統計彙總(min、max、sum、avg、count、distinct_count、group_by、percentiles和histogram)

多元索引的使用方式不同於MySQL等傳統資料庫的索引使用方式,無最左匹配原則的限制,使用時非常靈活。一般情況下一張表只需要建立一個多元索引即可。例如有一個學生表,包括的列有姓名、學號、性別、年級、班級、家庭住址等,建立多元索引時,將這些列添加到同一個多元索引中即可。使用多元索引時,可以指定任意條件的組合查詢,例如“姓名等於張三且年級為三年級的學生”、“家庭住址在附近1公裡內且性別為男的學生”、“找出三年級二班住在某小區的學生”等。

介面

多元索引目前提供通用查詢介面(Search)和資料匯出介面(ParallelScan)。

兩種介面的功能大部分相同,但是ParallelScan介面為了提高某些方面的效能和吞吐能力捨棄了部分功能,詳細資料請參見下表。
介面 說明
Search 全功能查詢介面,支援多元索引的所有功能點。
  • 查詢功能:非主鍵列查詢、全文檢索索引、首碼查詢、模糊查詢、多欄位自由組合查詢、巢狀查詢、地理位置查詢
  • 摺疊(去重)
  • 排序
  • 統計彙總
  • 資料總行數
ComputeSplits+ParallelScan 多並發資料匯出介面,支援多元索引中的查詢功能,不支援排序、統計彙總等分析功能。

相對於Search介面,ParallelScan可以提供更好的效能,單並發時效能(吞吐能力)是Search介面的5倍。

  • 查詢功能:非主鍵列查詢、全文檢索索引、首碼查詢、模糊查詢、多欄位自由組合查詢、巢狀查詢、地理位置查詢
  • 單請求支援多並發查詢

注意事項

注意 使用多元索引時,無需為資料表設定預定義列。
  • 索引同步

    使用者為資料表建立了多元索引後,當在資料表中寫入資料時,資料會先寫入資料表中,資料寫成功後會立即返回使用者寫成功,同時另一個非同步線程會從資料表中讀取寫入的資料然後寫入到多元索引,採用非同步方式建立多元索引不會降低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屬性。

功能

多元索引可以解決巨量資料中複雜的查詢問題,同時資料庫、搜尋引擎等其他系統也可以解決資料的查詢問題。Table Store與資料庫及搜尋引擎等系統的主要區別如下。

除了Join、事務和相關性外,Table Store能覆蓋資料庫和搜尋系統中的其他功能,同時具備資料庫的資料高可靠性和搜尋系統的進階查詢能力,可以替換常見的資料庫 + 搜尋系統組合架構方式。如果您的使用情境中不需要Join、事務和相關性,您可以選擇使用Table Store多元索引。

fig_20220325

計費

更多資訊,請參見多元索引計量計費