在做的时候正好翻到一篇文章,里面的思路(甚至名字)都完全一致,还挺有意思的。不过我是基于逻辑上的分区方法,和具体的数据库没什么关系(我用Mongo)。

如果机器资源多,那么就用哈希分区;反之,则用顺序分区。
哈希的方法会使得访问被均摊到各个分片主机上,所以如果机器多,那么最能够最大化的利用机器资源进行快速响应;反之,如果机器少,那么数量更多的查询会降低速度。

那么多少机器是多呢?至少是30台。没3台构成一个副本集,那么可以支持的分片基数是10。假设每个主节点的核是8,那么在80个左右的分片下写入是最快的;而读取的能力则是2倍。
在机器少的时候不如用顺序分区,利用数据的倾斜性。例如总数据有1亿,分为100个分片,每个分片只有100万条数据。当请求发生时,先计算出分片号(通常不会很多),然后进行并发操作。极端情况下,查询/写入读速是快几十倍的。
简单的一个流程就是:
因为之前使API的方式封装了数据库操作,现在再使用对象简化这样的分-并发和合操作。基本上可以做到使用时没有感觉到分片的麻烦,但是速度可以快很多(量级)。