本文介紹字串相關的三種類型Keyword、FuzzyKeyword和Text,以及如何在業務研發時選擇合適的字串類型。
背景資訊
字串是資料類系統中最常見的類型,基本在所有業務情境中均會使用到。在傳統的關係型資料庫中,字串類型會被細分為定長、變長等多種不同的類型。
在Table Store中,字串類型主要是String類型,類似於C++、Java等開發語言中的String類型。在多元索引中為了支援更豐富的功能,在功能層面對字串做了進一步細分,字串包括類似String的Keyword類型、用於模糊查詢的FuzzyKeyword類型以及可以分詞的用於全文檢索索引的Text類型。
本文會介紹這三種不同字串類型的關係、區別以及如何在業務情境中進行字串類型選擇。
表中和多元索引中類型映射
表中的字串類型可直接在多元索引中映射為Keyword、FuzzyKeyword或Text類型。您也可以使用虛擬列功能將表中的Integer類型和Double類型在多元索引中映射為Keyword、FuzzyKeyword或Text類型。
表中資料類型 | 方式 | 多元索引中資料類型 |
String | 直接使用 | Keyword |
FuzzyKeyword | ||
Text | ||
Integer | 虛擬列 | Keyword |
FuzzyKeyword | ||
Text | ||
Double | 虛擬列 | Keyword |
FuzzyKeyword | ||
Text |
類型介紹
Keyword
Keyword類型類似於資料庫中的字串類型,也類似於C++、Java等開發語言中的String類型,是最常用的字串類型。
在功能上,主要支援精確查詢、範圍查詢、萬用字元查詢、首碼查詢、存在性查詢(空值查詢)、排序和 GroupBy等彙總操作。其中,萬用字元查詢和首碼查詢在中大規模資料集(百萬以上)情境中的效能會隨著資料規模的增長而下降。
在業務情境中,如果不需要使用模糊查詢或全文檢索索引功能,則可以使用Keyword類型。如果需要使用排序、統計彙總等功能,則需要使用Keyword類型。
Text
Text類型類似於搜尋引擎中的文本類型,支援多種分詞,即系統會先將字串類型切分成多個連續的詞語,然後按照不同的詞語去儲存,主要用於全文檢索索引情境。
Text類型的分詞包括了多種分詞,有些分詞是簡單的按字或者按字元切分,有些是按照語義去切分,不同分詞方式適用於不同的業務情境。更多資訊,請參見分詞。
在業務情境中,如果需要使用全文檢索索引功能,則需要使用Text類型。
FuzzyKeyword
FuzzyKeyword類型也是一種字串類型,主要特點是支援高效能的萬用字元查詢、首碼查詢和尾碼查詢,在任意規模資料上均能保持比較好的查詢效能,查詢效能不會隨著規模增大而下降。
在業務情境中,如果需要使用高效能(毫秒級)的萬用字元查詢、首碼查詢或尾碼查詢,則需要使用FuzzyKeyword類型。
如果需要使用尾碼查詢,則可以直接使用FuzzyKeyword類型的SuffixQuery,或者將資料翻轉後使用效能較弱的Keyword類型的PrefixQuery。
FuzzyKeyword類型的欄位不支援排序和統計彙總。如果FuzzyKeyword類型的欄位同時需要進行排序或統計彙總,可以通過虛擬列為Keyword類型實現。
如果在業務情境中某一個欄位需要用到多種查詢功能,例如既需要精確查詢,又需要高效能模糊查詢和全文檢索索引,則可以使用虛擬列功能,將表中的一列在多元索引中映射為三列,這三列可以分別使用Keyword、Text和FuzzyKeyword類型。更多資訊,請參見虛擬列。
類型區別
三種字串類型可用於的查詢功能和最大長度有差異,具體說明請參見下表。
“✓”表示支援,“×”表示不支援。
功能 | Keyword | FuzzyKeword | Text |
✓ | × | × | |
✓ | × | × | |
✓ | × | × | |
✓ | ✓ | ✓ | |
✓ | × | × | |
✓ | × | × | |
× | × | ✓ | |
全文檢索索引:相關性分數 | × | × | ✓ |
全文檢索索引:高亮和摘要 | × | × | ✓ |
× | × | ✓ | |
× | × | ✓ | |
✓(大規模時效能較差) | ✓(效能優) | × | |
✓(大規模時效能較差) | ✓(效能優) | × | |
尾碼查詢 | × | ✓ | × |
最大長度 | 4 KB | 2 KB | 2 MB |