第一世界的问题:我们的生产系统正在快速增长,我们的目标是进一步扩大用户群。在高峰时间,我们的数据库在100%CPU时趋于平坦,这表明它已经远远超出了极限。作为一个AWS实例,我们总是可以向它扔一些更多的硬件,但是从长远来看,似乎我们需要实现分片。

我到处搜索Google,发现很多关于分片是什么,为什么在某些情况下是个好主意,什么设计方面的考虑等等的解释,但是没有关于如何做到这一点的一句话。

分片数据库的实际步骤是什么?如何将查询重定向到适当的分片?以及如何运行需要来自所有分片的数据的报告?

最佳答案

您要决定的第一件事是是否要承担应用程序中路由查询的复杂性。如果您决定推出自己的实施方案,那么随着时间的推移,您将需要处理许多复杂性。

您将需要一个方案来在整个集群中平均分配数据和查询。您需要确保该方案与更大的集群具有前向兼容性,就好像您的数据已经足够大,需要分片式架构一样,可能您需要添加更多服务器。

分片方案的问题在于,它们迫使您进行权衡,而这些权衡您无需使用单服务器数据库。例如,如果按user_id分片,则跨越多个用户的任何查询都需要发送到所有服务器(或服务器的子集),并且结果必须累积在客户端应用程序中。如果您使用的是依赖于数据顺序(例如MAX()或任何直方图计算)的聚合查询,则这特别复杂。

所有这些复杂性并不意味着吓到您,但这是您需要注意的事情。有一些工具可以为您提供帮助(公开:我公司制造了一个名为dbShards的工具),但是您绝对可以组合使用自己的解决方案,尤其是在您的应用程序成熟并且查询模式可以完全预测的情况下。

关于sql-server - 如何实现分片?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34852763/

10-13 09:32