【问题标题】:Split Large table of Terabytes using MYSQL Sharding使用 MYSQL 分片拆分大 TB 表
【发布时间】:2013-10-19 02:31:46
【问题描述】:

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

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

例如:

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

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

【问题讨论】:

  • 据我所知,所有分片都是在应用程序级别完成的。 MySQL 不会透明地这样做。
  • @Namphibian 是否有任何其他解决方案可以解决此问题,例如mysql集群等..
  • 今天会看一下,但我上次使用集群时速度很慢,真的不值得。
  • @Namphibian :谢谢,我很期待。

标签: mysql database bigdata sharding


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多