5

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

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

例如:

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

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

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

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

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

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

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

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

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

4

1 回答 1

1

在你前进之前,你需要调整你的想法。我认为在 MySQL 上没有简单的方法可以做到这一点——如果你努力使用表和视图,我相信你可以做到。FEDERATED但是,rdbs 分片充其量从来都不是一件容易的事。

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

所以我强烈建议回到绘图板上。如果您真的不需要连接,请查看其他数据库,例如 Cassandra,它支持这种开箱即用的东西。但是,如果您确实需要连接,则确实需要查看数据库中的每个表并找到好的分区标准,然后对其进行分区,以便您拥有相同的数据库架构和不同的分片。

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

于 2016-12-11T14:00:39.887 回答