|
|
1
3
而每一行都必须有一个
以下是一些提示:
|
|
|
2
1
您可能希望对主键使用guid—在复制的系统中,在整个拓扑中,行必须是唯一的,guid pks是实现这一点的一种方法。 |
|
|
3
1
我要说的是,您真正的问题不是如何处理复制,而是如何处理向外扩展,或者至少扩展为可查询性。虽然这个难题有各种各样的答案,但有一个答案是显而易见的: 不 使用复制。 复制的问题,特别是合并复制的问题是 写入次数增加 在复制中。假设您有一个每秒处理100个查询(90个读取和10个写入)的系统。您希望向外扩展,然后选择复制。现在您有两个系统,每个系统处理50个查询、45个读取和5个写入 每个 . 现在,这些写操作必须被复制,因此实际的写操作数不是5+5,而是5+5(原始写操作),然后是另一个5+5(副本写操作),所以您有90次读操作和20次写操作。因此,当每个系统上的负载减少时,写入和读取的比率也增加了。这不仅改变了IO模式,而且最重要的是它改变了负载的并发模式。添加第三个系统,您将有90次读取和30次写入等等。很快,您将拥有比读取更多的写操作,复制更新延迟以及并发问题和合并冲突将使您的项目脱轨。其要点是,“快”比你预期的要快得多。很快就有足够的理由考虑扩大规模,因为无论如何,你所说的扩大规模最多是6-8家同行的6-8倍,而使用扩大规模增加6-8倍的容量将更快、更简单,甚至可能更便宜。 记住这些都是 纯粹的理论 数字。实际上,复制基础结构不是免费的,它在系统上添加了自己的负载。需要跟踪写入,必须读取更改,必须存在分发服务器才能存储更改,直到分发到订阅服务器,然后必须写入更改并 调解可能的冲突 .这就是为什么我看到很少有部署能够声称通过基于复制的扩展策略获得成功。 另一种选择是只扩展读操作,在这里复制 做 工作,通常使用事务复制,但日志传送或数据库快照镜像也可以。 真正的选择是分区(即切分)。请求在应用程序中路由到适当的分区,并在包含适当数据的服务器上着陆。一个分区上需要反映在另一个分区上的更改通过异步(通常是基于消息传递的)方式发送。数据只能在分区内联接。要更详细地讨论我所说的内容,请阅读 how MySpace does it . 不用说,这样的策略对应用程序设计有很大的影响,不能简单地在v1之后进行粘合。 |
|
|
developer · 带外键的SQL表设计 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 2 年前 |
|
|
robertspierre · 在多对多关系中自动删除未引用的行 2 年前 |
|
|
Michael Samuel · MYSQL在以下情况下自动创建索引 8 年前 |