主鍵分片 vs 非主鍵分片

選擇分片字段的考慮條件: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

相關文章
相關標籤/搜索