公司使用阿里的 TableStore(以下簡(jiǎn)稱 TS) 已經(jīng)有些日子了暗赶。這周仔細(xì)翻閱了一下 TableStore 的官方文檔《死瘢現(xiàn)對(duì) TableStore 做一些總結(jié)赖捌。
我們先來(lái)了解一下什么是 TableStore坯墨。表格存儲(chǔ)(Table Store)是阿里云自研的 NoSQL 多模型數(shù)據(jù)庫(kù)楣颠,提供海量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)以及快速的查詢和分析服務(wù)。表格存儲(chǔ)的分布式存儲(chǔ)和強(qiáng)大的索引引擎能夠提供 PB 級(jí)存儲(chǔ)夏志、千萬(wàn) TPS 以及毫秒級(jí)延遲的服務(wù)能力乃坤。
接下來(lái)我們來(lái)看看 TS 給我們提供了一些什么樣的功能,以及這些功能對(duì)應(yīng)的一些限制沟蔑。
日常操作
我們首先來(lái)看看日常操作(增刪改查)湿诊。對(duì)于日常操作,官方提供了單行操作和多行操作(批量操作)瘦材。對(duì)于批量操作厅须,官方可能出于安全或者技術(shù)上的考慮,將很多操作都進(jìn)行了數(shù)量的限制食棕,這些限制會(huì)使得我們?cè)诰帉?xiě)代碼時(shí)變得麻煩朗和。
日常操作中需要注意的點(diǎn)如下:
1.更新和刪除的操作都只能根據(jù)主鍵列進(jìn)行错沽。也就是如果你要更新或者刪除某行數(shù)據(jù),只能先查找出該行數(shù)據(jù)的主鍵眶拉,然后再根據(jù)該行主鍵去更新或刪除千埃。而無(wú)法直接通過(guò)某些組合的條件去做更新或刪除的操作。
2.范圍讀操作時(shí)忆植,一次操作請(qǐng)求讀取的行數(shù)不能超過(guò) 5000 行(4 MB)放可。
3.批量讀操作時(shí),一次操作請(qǐng)求讀取的行數(shù)不能超過(guò) 100 筆朝刊。
4.批量寫(xiě)操作時(shí)耀里,一次操作請(qǐng)求寫(xiě)入行數(shù)不能超過(guò) 200 筆,數(shù)據(jù)大小不能超過(guò) 4 MB拾氓。同時(shí)冯挎,TS 無(wú)法保證批量操作一定都會(huì)執(zhí)行成功,也就是如果 200 筆咙鞍,有一筆失敗了房官,你需要自己對(duì)失敗的這筆數(shù)據(jù)進(jìn)行處理。
5.在沒(méi)有索引的情況下奶陈,查詢表中數(shù)據(jù)的總行數(shù)是件非常麻煩的事情易阳,需要使用范圍讀,自己去遍歷查詢吃粒。
接下來(lái)我們來(lái)看看 TS 提供的索引功能潦俺。TS 為我們提供了兩種索引,一種是二元索引徐勃,一種是多元索引事示。二元索引類似于 MySQL 的索引,多元索引類似于 Solr 的索引僻肖。
二元索引
二元索引可以在指定列上建立索引肖爵,生成的索引表中數(shù)據(jù)按用戶指定的索引列進(jìn)行排序,主表的每一筆寫(xiě)入都將自動(dòng)異步同步到索引表臀脏。在很多場(chǎng)景下劝堪,我們需要對(duì)表的屬性列、或者非首列主鍵進(jìn)行條件上的查詢揉稚,這個(gè)時(shí)候就可以用到二元索引秒啦。
二元索引中需要注意的點(diǎn)如下:
1.查詢時(shí),如果需要返回的屬性列不在索引表中搀玖,需要反查主表余境。相當(dāng)于,我們需要對(duì)查詢出來(lái)的數(shù)據(jù),再做遍歷芳来,然后去主表中查詢含末。實(shí)際使用起來(lái)還是挺麻煩的。
2.TS 的索引中暫時(shí)沒(méi)有類似于 MySQL 的唯一索引的概念即舌,如果你希望某一字段的值全局唯一佣盒,你只能將該字段設(shè)置為主鍵。
多元索引
多元索引支持以下三種索引方法侥涵。1.倒排索引:基于建立了倒排索引的屬性列沼撕,可以實(shí)現(xiàn)多字段自由組合的 ad-hoc 查詢宋雏。2.多維空間索引:表格存儲(chǔ)基于多維空間索引提供了地理位置的查詢能力芜飘。3.列式正排索引:可以更好地支持排序、統(tǒng)計(jì)聚合等功能磨总。
基于上述三種基礎(chǔ)索引能力嗦明,多元索引提供很多其他的索引功能。非主鍵列的查詢蚪燕、多字段自由組合查詢娶牌、地理位置查詢、排序等等馆纳,詳情請(qǐng)見(jiàn)官網(wǎng)诗良。另外在 TS 的控制臺(tái),可以直接下查詢條件去測(cè)試這些索引的查詢方法鲁驶。
關(guān)于查詢的功能鉴裹,其實(shí)都挺好理解的,大家自己測(cè)試一下就可以知道大致的一些用法钥弯。這邊有個(gè)稍微需要提一下的是径荔,建立多元索引時(shí),可以選擇分詞字符串脆霎,分詞字符串又分為單字分詞和多層語(yǔ)義分詞总处。單字分詞,中文會(huì)按字拆分睛蛛,英文會(huì)按照空格拆分鹦马;多層語(yǔ)義分詞會(huì)根據(jù)下劃線拆分。官網(wǎng)暫時(shí)沒(méi)有這兩個(gè)分詞規(guī)則的文檔忆肾,是我自己測(cè)試后給出的定義荸频,最終以官方文檔為準(zhǔn)。
收費(fèi)
最后是關(guān)于收費(fèi)的問(wèn)題难菌,我個(gè)人在這個(gè)方面也是比較困惑的试溯,官方給的價(jià)格表不是很好理解。查看最近的消費(fèi)明細(xì)郊酒,一個(gè)多元索引遇绞,每個(gè)小時(shí)費(fèi)用是0.05元键袱。給大家做個(gè)參考。
關(guān)于本文提到的一些限制摹闽,都是通過(guò)官網(wǎng)文檔或個(gè)人測(cè)試后得到的結(jié)果蹄咖,大家最終以官方最新文檔為準(zhǔn)。如果有不準(zhǔn)確的地方付鹿,歡迎大家指出澜汤。
參考文檔:
https://help.aliyun.com/document_detail/91524.html?spm=a2c4g.11186623.6.916.13203d76r16QMK
https://help.aliyun.com/product/27278.html?spm=a2c4g.11186623.6.540.39041b82N7FXbs