单表多大做分片并没有硬性限制。理论上讲,你的硬件越好,可以存储的数据量就越大,所以标准答案是:看你的硬件决定。标准就是,内存能够容纳“热数据”。热数据指的是你需要经常用到的数据和索引,最坏的情况,也应该容纳经常使用的索引。内存容量不仅会影响到读,还会影响到写。因为写的时候也会需要修改索引,如果此时索引不在内存中,同样会造成比较严重的影响。
但是这也并不代表数据可以无限大下去。在实际使用中我们也发现,数据量大之后有些运维动作会很不方便,最典型的有:
- 重新同步从节点
- 从备份恢复数据
所以为了日常运维方便,建议数据量维持在一定量之内。这个量我们的经验值是每个节点2TB。注意是节点,不是表。再注意这里说的2TB是数据容量,不是存储容量。由于压缩的存在,存储容量会比数据容量小得多。数据容量可以在各个库上执行db.stats().dataSize获得。
dami 发表新评论
星哥基本上都回答完成,我之前做过一次非分片表转分片表,这个是需要注意考虑应用是否能够兼容分片集群。
1、慢SQL主要关注下是否使用高效索引,否则转成分片还会存在同样问题。
2、单实例与分片集群下分片表,更新与删除操作单个记录时必须带分片键,单实例下不会报错,而集群下会报错。
转换过程以及注意事项,可以参考下。
dami 发表新评论
非常感谢,当前场景确实不适合做分片
非常感谢,懂了