使用MYSQL Sharding拆分大数TB的表

Imr*_*ran 5 mysql database sharding bigdata

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

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

例如:

Users 1 - 10000: server A
Users 10001 - 20000: server B
Run Code Online (Sandbox Code Playgroud)

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

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

Chr*_*ers 1

在继续前进之前,你需要调整你的想法。我不认为在 MySQL 上有一种简单的方法可以做到这一点——我相信如果您付出努力使用表FEDERATED和视图就可以做到这一点但是,rdbs 分片充其量也绝非易事。

然而分片却非常有。分片表几乎总是错误的看待方式。相反,您确实需要对数据集进行分片。这是因为跨节点的连接成本很高。

所以我强烈建议大家重新开始讨论这个问题。如果您确实不需要联接,请查看其他开箱即用支持此类事物的数据库,例如 Cassandra。但是,如果确实需要联接,则确实需要查看数据库中的每个表并找到良好的分区标准,然后对其进行分区,以便拥有相同的数据库模式和不同的分片。

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