20

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

你怎么能用多台服务器做到这一点?这将允许 Mysql 扩展。

在 X 服务器上创建 X 表?

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

4

3 回答 3

23

使用 MySQL,人们通常会做所谓的基于应用程序的分片

简而言之,您将在多个数据库服务器上拥有相同的数据库结构。但它不会包含相同的数据。

例如:

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

分片(当然)不是一种备份技术,它旨在跨集群分布读取和写入。

例如,用于分片的技术是 MySQL-Proxy。这不是 HScale 发明的,它或多或少是一个简单的 LUA 脚本,它将读取和写入分配到不同的后端服务器。MySQL forge 上应该有很多示例。

另一个工具(基于 MySQL 代理)是SpockProxy。完全针对分片量身定制。他们还摆脱了 Lua,并致力于各种事情以使其比代理更快。到目前为止,我只测试了 SpockProxy,但从未在生产环境中运行过它。

现在,除了这些代理之外,您还可以对自己进行分片。需要一个主表,例如:

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

然后构建对服务器的读写。不是很漂亮,但很管用。下一个障碍是让它变得更加容错。例如,server1server2每个server3都应该是一个小集群。

最后但同样重要的是,另一个有趣的跨服务器分区数据和索引的方法是 Digg 的IDDB。我不确定他们是否曾经发布过它的代码,但他们的博客文章详细介绍了它的作用。

让我知道这是否有帮助!

于 2009-10-25T19:12:04.457 回答
4

但是您需要记住,如果您出于某些原因想要将此解决方案带到云上并使其成为多租户,那么上述配置可能会变得更具挑战性。想想这个——

  1. 您登录系统并根据用户组织表选择数据库(数据库交换)
  2. 这将是您现在正在与它自己的奴隶交谈的新主表
  3. 但是上面的第 2 点现在也需要分片,因为您要确保向外扩展不会成为瓶颈。

So now the question is that you will probably need to think how can you do this sharding in a mster-slave kind of env where slaves are typically for reading and masters for writing.

cheers ! Gary

于 2011-04-23T03:42:03.523 回答
0

这里是在 HSCALE 0.1 的公告中写的:

现在我们只需要拆分大表,但稍后我们希望将分区分布在多个 MySQL 服务器实例上以实现真正的横向扩展。最困难的部分将是处理我们必须使用分布式事务(XA)或不允许涉及不同主机上的分区的事务的事务......

看看这个项目: http: //sourceforge.net/projects/hscale/也许它会适合你。

于 2009-10-23T09:33:26.183 回答