因為一開始的目的之一是想要找一套兼容MySQL可盡量無痛轉移的資料庫,所以兼容程度是蠻重要的考量。官網上有列出目前尚不支援的部分,使用前請詳閱並三思。以下是我把第一眼看到會我頭痛的不支援的部分整理出來。
TiDB目前不支援event,也不支援store procedure...因為我目前會用event加上procedure定時對表格做一些資料刪除以及新增刪除partition的動作,所以勢必得改以其他方式進行。
目前TiDB支援的parition類型有Range,List,List Columns,Hash。但是建議在正式站上使用的只有Range。新增與刪除partition一樣是使用ADD PARTITION/DROP PARTTION,但是不支援REORGANIZE PARTITION。這表示無法對已經建立的partition做修改。這影響到我用來執行新增刪除partition的部分,必須改為每天執行ADD/DROP PARTITION,且不設定MAX Value。
在語法的使用上,要注意的地方有,執行alter table的時候,不能一次異動兩個以上的欄位或者index。另外group by回傳的順序也與MySQL5.7不同。在index的使用上,要注意的地方是欄位型態,如果今天條件欄位本身是字串,那就要避免讓他cast,例如zone_id是字串,那條件就該用zone_id > "9487"。
還有一般我們常用的auto increment,TiDB只保證在僅有一台TiDB server會依序增加,目前預設一台TiDB分配到30000個值。所以遇到多台TiDB server時,就可能發生auto increment id 從1跳到300001又跳回2的情況,如果要以這欄位當作排序的條件會發生問題。另外auto increment必須在一開始就宣告好欄位,無法使用alter table的方式追加。除了auto increment,tidb可以指定某一列為AUTO_RANDOM,這主要是為了解決大量的併發寫入導致產生熱點。