主键分片 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

相关文章
相关标签/搜索