1. TDSQL 開發規范
總體架構
分布式數據庫(Tencent Distributed SQL,TDSQL)是騰訊打造的一款分布式數據庫產品,具備強一致高可用、全球部署架構、分布式水平擴展、高性能、企業級安全等特性,同時提供智能 DBA、自動化運營、監控告警等配套設施,為客戶提供完整的分布式數據庫解決方案。目前 TDSQL 已經為超過500+的政企和金融機構提供數據庫的公有雲及私有雲服務,客戶覆蓋銀行、保險、證券、互聯網金融、計費、第三方支付、物聯網、互聯網+、政務等領域。TDSQL 亦憑借其高質量的產品及服務,獲得了多項國際和國家認證,得到了客戶及行業的一致認可。
總體架構如下:

計算節點[sql引擎]
l SQ引擎也會被叫做Proxy 或網關
l 在TDSQL中位於接入層的位置,屬於CPU密集型服務
l SQL引擎沒有主備之分,本身無狀態,多節點部署

數據節點
l 數據節點上部署MYSQL數據庫服務
l Agent屬於旁路模塊,主要承擔MYSQL實例的狀態監控
l MYSQL實例通過AGENT和TDSQL集群建立聯系
l SET:TDSQL最小數據單無, 包含一主N備 ,N+1個數據節點

設計規范
l 充分考慮業務邏輯和數據分離
l 盡量避免使用自定義函數,存儲過程,觸發器和視圖
l 數據庫管理和使人員權限分離
l 充分考慮數據增長模型,決策是否采用SHARD模式
l 充公考慮業務可用性數據,可靠性需求,設計合適的備份和恢復策略
l 使用InnoDB存儲引擎(默認)
l 使用UTF8或UTF8MB4字符集
l 不在數據庫中存儲圖片,二進制文件等大數據
l 提前規划好單表規模,行數和大小
l 對象命名要使用富有意義英文詞匯,不要使用SQL關鍵字和特殊字符
l 字段屬性盡量加上NOT NULL 約束以及默認值
l 數據庫用戶權限授權按照最小分配原則
l 除核心維護人員外,其他用戶不能擁有SUPER權限帳號
l 避免使用簡單密碼
l 開發,測試和 生產環境中用戶權限 設置要保持一至
l 嚴格禁止在數據庫存儲任何形式的密碼明文。
開發規范
l 合理使用USE INDEX 和 IGNORE INDEX 進行索引的選擇
l 查詢條件盡量使用索引
l 注意字段類型,避免類型轉換
l 盡量不要讓數據庫做算術運算,交給應用層來做
l 盡量不要直接select * , 直接列出需要查詢的字段
l Where 子句使用原則:盡量使用索引,盡量簡單,盡量匹配更少的行
l LIKE 子句的條件中,%不要是第一個字符,盡量靠后
l 表盡量避免用去類似count(*) 的全表掃描查詢。
2. TBASE 開發設計規范
設計規范
l 充分考慮業務邏輯和數據分離
l 盡量不使用外鍵
l 盡量避免使用自定義函數,存儲過程和觸發器
l 充分考慮數據增長模型,決定表的存儲方式
l 充分考慮業務可用性和可靠性要求,設計合適的備份和恢復策略
l 避免在數據庫中存儲圖片二進制等大數據
l 對象命名要使用富有意義詞匯,不使用SQL關鍵字和特殊字符
l 數據庫用戶權限授權按照最小分配原則
l 除核心維護人員外,其他用戶不能擁有SUPER權限帳號
l 避免使用簡單密碼
l 開發,測試和 生產環境中用戶權限 設置要保持一至
l 嚴格禁止在數據庫存儲任何形式的密碼明文。
命名規范
l 小寫字母,下划線組合。不使用雙引號,除非必須包含大寫字母或都特殊字符
l 長度不超過63個字符
l 不建議用pg_或pgxc_ 開頭,禁止使用關鍵字
l 見名知意
表設計規范
l 指定shard key 和 group
l 最多支持1600個例
l 不建議用public schema ,建議為每個應用分配單獨的schema
l 盡量添加comment
l 多表中相同的列,必須保證列名,數據類型一致
列設計規范
l 能用數值類型的,不使用字符類型
l 盡量用varchar2(n) 代替char(n)
l 如有國際化業務的話,使用timestamp with time zone (timestamptz)
l 使用numeric(precision,scale) 來存儲貨幣金額和其它要求精確計算的數值
l 盡量添加comment
INDEX設計規范
l Tbase 提供的index類型:B-treee ,hash,gist,建議create 或 drop index 時加 concurrently 參數
l 建議對where 中帶多個字段and 條件的高頻query,參考數據分布情況,建多個字段的聯合index
l 建議對固定條件的(一般有特定業務含義)且選擇比較好(數據占比低的)query,建帶where的 partial indexes
l 建議對經常使用表達式作為查詢條件的query,可以使用達式,或函數索引加速query
l 建議不要建過多index ,一般不超過5個,核心table 可以適當增加index 個數
l 建議使用count(1) 或 count(*) 來統計行數
dml/ddl規范
l 建議非必須時避免select * ,只取所需字段,以減少包括不限於網絡帶寬消耗。
l 避免在業務高峰期做DDL操作
l 大批量的數據入庫,使用COPY代替insert
l 避免大事務
