小编xni*_*kmx的帖子

使用 MySQL 定期对 100+ GB 的表进行多路连接?

背景
我创建了一个 Web 应用程序,我希望它能够合理地扩展。我知道我不是 Google 或 Twitter,但我的应用程序为每个用户使用了相当大量的数据,因此对数据的要求相当高。我想准备好进行合理的扩展,而不必在以后重新构建所有内容。

我认为自己是一名软件开发人员,而不是数据库专家。这就是我在这里发帖的原因。希望有更多数据库专业知识的人可以给我建议。

拥有相对大量的用户,但与 Facebook 的数字完全不同,我希望有一个如下所示的数据库:

一张“大桌子”:

  • 2.5 亿条记录
  • 20列
  • 大约 100 GB 的数据
  • 有一个索引 bigint(20) 外键
  • 有一个索引 varchar(500) string_id 列
  • 有一个 int(11)“值”列

其他 4 个表:

  • 每个 1000 万条记录
  • 每个大约 2 - 4 GB 的数据
  • 这些表中的每一个都有 4 - 8 列
  • 一列是日期时间 date_created
  • 一列是 varchar(500) string_id 列
  • 将在连接中选择这些表中的每一个中的一或两列

这些表之一用于存储平均值——它的架构是 bigint(20) id、varchar(20) string_id、datetime date_created、float average_value

我想要做什么——两个相对昂贵的查询:

  1. 计算新的平均值:

    • 使用外键,从大表中选择多达几百万条单独的记录。
    • 计算一个新的平均值,按 string_id 分组。
    • 将结果插入到平均值表中。
    • 按照目前的构造,此查询使用两个连接。
  2. 为服务用户创建非规范化的只读记录:

    • 使用外键从大表中选择 1,000-40,000 条记录。
    • 使用字符串 id 列与最新记录上的其他四个表中的每一个连接。
    • 将结果插入到非规范化表中。
    • 这些记录供前端用来向用户展示信息。
    • 按照目前的构造,此查询使用四个连接。

我计划在批处理后端数据库上运行这些昂贵的查询中的每一个,该数据库将其结果推送到处理用户请求的实时前端数据库服务器。这些查询将定期运行。我还没有决定多久。平均查询可能每天进行一次。非规范化查询需要更频繁——也许每隔几分钟。

这些查询中的每一个当前在 …

mysql rdbms

11
推荐指数
1
解决办法
3266
查看次数

标签 统计

mysql ×1

rdbms ×1