TableStore 的注意事項

公司使用阿里的 TableStore(以下簡稱 TS) 已經有些日子了。這周仔細翻閱了一下 TableStore 的官方文檔。現對 TableStore 做一些總結。

我們先來了解一下什麼是 TableStore。表格存儲(Table Store)是阿里雲自研的 NoSQL 多模型數據庫,提供海量結構化數據存儲以及快速的查詢和分析服務。表格存儲的分佈式存儲和強大的索引引擎能夠提供 PB 級存儲、千萬 TPS 以及毫秒級延遲的服務能力。

接下來我們來看看 TS 給我們提供了一些什麼樣的功能,以及這些功能對應的一些限制。

我們首先來看看日常操作(增刪改查)。對於日常操作,官方提供了單行操作和多行操作(批量操作)。對於批量操作,官方可能出於安全或者技術上的考慮,將很多操作都進行了數量的限制,這些限制會使得我們在編寫代碼時變得麻煩。

日常操作中需要注意的點如下:

1.更新和刪除的操作都只能根據主鍵列進行。也就是如果你要更新或者刪除某行數據,只能先查找出該行數據的主鍵,然後再根據該行主鍵去更新或刪除。而無法直接通過某些組合的條件去做更新或刪除的操作。

2.範圍讀操作時,一次操作請求讀取的行數不能超過 5000 行(4 MB)。

3.批量讀操作時,一次操作請求讀取的行數不能超過 100 筆。

4.批量寫操作時,一次操作請求寫入行數不能超過 200 筆,數據大小不能超過 4 MB。同時,TS 無法保證批量操作一定都會執行成功,也就是如果 200 筆,有一筆失敗了,你需要自己對失敗的這筆數據進行處理。

5.在沒有索引的情況下,查詢表中數據的總行數是件非常麻煩的事情,需要使用範圍讀,自己去遍歷查詢。

接下來我們來看看 TS 提供的索引功能。TS 爲我們提供了兩種索引,一種是二元索引,一種是多元索引。二元索引類似於 MySQL 的索引,多元索引類似於 Solr 的索引。

二元索引可以在指定列上建立索引,生成的索引表中數據按用戶指定的索引列進行排序,主表的每一筆寫入都將自動異步同步到索引表。在很多場景下,我們需要對錶的屬性列、或者非首列主鍵進行條件上的查詢,這個時候就可以用到二元索引。

二元索引中需要注意的點如下:

1.查詢時,如果需要返回的屬性列不在索引表中,需要反查主表。相當於,我們需要對查詢出來的數據,再做遍歷,然後去主表中查詢。實際使用起來還是挺麻煩的。

2.TS 的索引中暫時沒有類似於 MySQL 的唯一索引的概念,如果你希望某一字段的值全局唯一,你只能將該字段設置爲主鍵。

多元索引支持以下三種索引方法。1.倒排索引:基於建立了倒排索引的屬性列,可以實現多字段自由組合的 ad-hoc 查詢。2.多維空間索引:表格存儲基於多維空間索引提供了地理位置的查詢能力。3.列式正排索引:可以更好地支持排序、統計聚合等功能。

基於上述三種基礎索引能力,多元索引提供很多其他的索引功能。非主鍵列的查詢、多字段自由組合查詢、地理位置查詢、排序等等,詳情請見官網。另外在 TS 的控制檯,可以直接下查詢條件去測試這些索引的查詢方法。

關於查詢的功能,其實都挺好理解的,大家自己測試一下就可以知道大致的一些用法。這邊有個稍微需要提一下的是,建立多元索引時,可以選擇分詞字符串,分詞字符串又分爲單字分詞和多層語義分詞。單字分詞,中文會按字拆分,英文會按照空格拆分;多層語義分詞會根據下劃線拆分。官網暫時沒有這兩個分詞規則的文檔,是我自己測試後給出的定義,最終以官方文檔爲準。

最後是關於收費的問題,我個人在這個方面也是比較困惑的,官方給的價格表不是很好理解。查看最近的消費明細,一個多元索引,每個小時費用是0.05元。給大家做個參考。

關於本文提到的一些限制,都是通過官網文檔或個人測試後得到的結果,大家最終以官方最新文檔爲準。如果有不準確的地方,歡迎大家指出。

參考文檔:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章