使用MYSQL Sharding拆分大数TB的表

时间:2013-10-11 05:30:53

标签: mysql database bigdata sharding

我知道水平分区......你可以创建很多表。

seen在基于应用程序的分片中,您将在多个数据库服务器上拥有相同的数据库结构。但它不会包含相同的数据。

例如:

Users 1 - 10000: server A
Users 10001 - 20000: server B

用于分片的技术是MySQL-Proxy,例如一些工具(基于MySQL代理)是SpockProxy。我们也可以手动分片。必需的是主表,例如:

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------

但是这些技术在应用程序级别处理..我想在DB服务器级别解决它..

我们可以透明地使用多台服务器吗?这将允许Mysql表扩展。

在X服务器上创建X表,最终用户通过简单查询获取数据到单个数据库服务器?

简而言之,我想在单个表中插入16TB的数据,但我在单机上没有这么大的空间,所以我想安装两个服务器,每个容量为8TB。但是用户查询单个数据库并在后端获取结果可能会使用分片。

我还讨论了一些其他好的解决方案,例如MYSQL Clustering

有没有人愿意解释,或者有一个好的初学者教程(循序渐进)教你如何跨多个服务器进行分区?

1 个答案:

答案 0 :(得分:1)

在你前进之前,你需要调整你的思路。我不认为在MySQL上有一个简单的方法可以做到这一点 - 我相信如果你使用FEDERATED表和视图付出努力,你可以做到这一点但是,rdbs最好的分片永远不会容易。

然而,Sharding非常。分片表几乎总是错误的查看方式。相反,你真的需要分片数据集。这是因为跨节点的连接很昂贵。

所以我强烈建议你回到绘图板上。如果你真的不需要加入,那么看看像Cassandra这样开箱即用的其他dbs。但是,如果确实需要连接,则需要查看数据库中的每个表并找到良好的分区条件,然后对其进行分区,以便使用相同的数据库模式,然后使用不同的分片。

一旦你有了这个,那么你就在你的数据库前放置一个代理来适当地处理路由查询。请参阅https://github.com/flike/kingshard作为一种可能性(虽然作为免责声明,我没有在MySQL上使用过这些)。通过代理,您可以获得单个数据库的应用程序外观,并且当我阅读您的问题时,您的目标确实如此。