DB结构大于10mm的MySQL结构记录

时间:2011-10-17 16:27:10

标签: mysql synchronization

我正在使用一个应用程序,该应用程序有3个表,每个表记录超过10毫米,大于2GB。

每次插入数据时,至少有一条记录被添加到三个表中的每个表中,甚至可能更多。 每次INSERT之后都会启动一个脚本,该脚本会查询所有这些表,以便将数据提取到最后一个INSERT(让我们称之为聚合脚本)。

以较小的单位和不同的服务器划分数据库的最佳方法是什么,以便每个服务器的负载都是可管理的?

注意:
1.每秒超过10次插入,因此聚合脚本的运行次数相同 2.聚合脚本是资源密集型的 3.必须对所有数据运行聚合脚本,以便找出哪一个与最后一个插入相关 我还没有找到一种方法将DB分成更小的单位 5.我对分布式数据库知之甚少,因此请使用非常基本的术语,并在可能的情况下提供进一步阅读的链接

1 个答案:

答案 0 :(得分:1)

从数据库的角度来看,有两个答案。

  1. 找到一种将数据库分解为更小单位的方法。这非常依赖于数据库的使用。这真是你最好的选择,因为这是让数据库同时查看更少内容的唯一方法。这称为分片:
    http://en.wikipedia.org/wiki/Shard_(database_architecture

  2. 在只读模式下有多个“slave”数据库。这些基本上是数据库的副本(有一点滞后)。对于任何只读滞后的查询,他们可以跨整个站点的代码访问这些数据库。这将占用您正在查询的主数据库的一些负载。但是,对于任何特定查询,它仍然是资源密集型的。

  3. 从编程的角度来看,您已经拥有了几乎所有的信息(除了ID)。您可以尝试找到一些方法来使用该信息来满足您的所有需求,而不必在插入后重新查询数据库。您可以使用一些只创建首先查询的ID的进程。想象一下,你有表A,B,C。你会有其他表只有主键A_ids,B_ids,C_ids。第一步,从id表中获取新ID。第二步,插入A,B,C并同时做你想做的其他事情。

    此外,应审查所有查询的一般效率/性能。确保您在查询的任何内容上都有索引。对正在运行的所有查询执行explain以确保它们使用索引。

    这实际上是一种中级/高级dba类型的事情。询问你的公司,让他们伸出援助之手,教你。