選擇分片字段的考慮條件:node
儘量的比較均勻分佈數據到各個節點上;
該業務字段是最頻繁的或者最重要的查詢條件。緩存
主鍵分片理由:性能
當你沒有任何字段能夠做爲分片字段的時候,主鍵分片就是惟一選擇,其優勢是按照主鍵的查詢最快,當採用自動增加的序列號做爲主鍵時,還能比較均勻的將數據分片在不一樣的節點上。code
非主鍵分片理由:內存
常見的除了主鍵以外的其餘可能分片字段有「訂單建立時間」、「店鋪類別」或「所在省」等。當你找到某個合適的業務字段做爲分片字段之後,沒必要糾結於「犧牲了按主鍵查詢記錄的性能」,由於在這種狀況下,MyCAT 提供了「主鍵到分片」的內存緩存機制,熱點數據按照主鍵查詢,絲絕不損失性能。table
<table name="t_user" primaryKey="user_id" dataNode="dn$1-32" rule="mod-long"> <childTable name="t_user_detail" primaryKey="id" joinKey="user_id" parentKey="user_id" /> </table>
MyCat主鍵到分片的緩存機制:方法
對於非主鍵分片的 table,填寫屬性 primaryKey,此時 MyCAT 會將你根據主鍵查詢的 SQL 語句的第一次執行結果進行分析,肯定該 Table 的某個主鍵在什麼分片上,並進行主鍵到分片 ID 的緩存。第二次或後續查詢mycat 會優先從緩存中查詢是否有 id–>node 即主鍵到分片的映射,若是有直接查詢,經過此種方法提升了非主鍵分片的查詢性能。 im